2013年4月7日

解決『呼叫Web service:要求失敗,HTTP狀態401:Access Denied』

當我們用windows form 的程式呼叫Web Service時,卻出現錯誤訊息『要求失敗,HTTP狀態401:Access Denied』

 

image

這Web Sevice在別台機器,是可以正確被呼叫的,我們呼叫Web Service的程式也簡單不過,如下所示:

Diag1.HelloWorld()

發生原因

我們到IIS管理員-預設的網站-內容-目錄安全-編輯
發現只有使用整合性 Windows 驗證(MSDN),匿名存取是取消的,那表示使用該Web Service需通過Widows 驗證,這個常發生在一些網管自行提升網站的安全性,把Web Server加入AD後,自行取消企名存取,卻未通知開發人員。或是開發人員的電腦設定不同。
image

解決方式

  1. 修改呼叫Web Service的程式,呼叫WS前加入以下程式碼,把目前的Windows 認證傳給IIS
    Diag1.Credentials = System.Net.CredentialCache.DefaultCredentials
    詳細參考MSDN
  2. 就是把IIS 驗證方式的匿名存取 打勾

沒有留言:

張貼留言