本文轉載自 輕量級程序員
-------------------------------------------------
錯誤重現:
在VS2005 Beta2中創建基於File System的Web Site和Web Service,在Web Site中引用WebSevice,調用其中的默認的HelloWorld方法。
Dim ws As New localhost.Service()
Response.Write(ws.HelloWorld())
就會出現The request failed with HTTP status 401: Unauthorized錯誤頁面。
為什么呢?
原因就在於Web Service的位置是File System。
采用File System的網站安全性比較高,端口是隨機的,只能在本機訪問,並且網站運行的身份是當前用戶的身份。因此當訪問Web Service的時候需要身份驗證。
WebSite的情況也是這樣,但是在默認情況訪問Web Service的時候使用的是匿名用戶。也就是說,雖然Web Site運行的身份是當前用戶,但是訪問Web Service是的時候是匿名用戶。所以出現401錯誤。
我們要做的就是讓Web Site在訪問Web Service的時候使用默認的身份。
在實例化Web Service代理類之后我們要加上這么一句話
Dim ws As New localhost.Service()
ws.UseDefaultCredentials = True
Response.Write(ws.HelloWorld())
這樣就可以了。
以上問題是在VS2005的Beta2版本當中出現的。自VS2005的正式版中已經沒有。不需要增加ws.UseDefaultCredentials = True語句。但是單步調試的時候發現UseDefaultCredentials的屬性依然是False。看來正式版中只是調整了使用File System網站的運行機制。