2009-07-30 49 views
1

我有這樣的代碼:的SPSite在Web服務拋出401錯誤

using (var site = new SPSite(myUrl)) { 
    using (var web = site.AllWebs[0]) { 
     // read-only operations 
    } 
} 

的 「myUrl」 爲頂級域名的網址與WSS 3.0。身份驗證設置爲Windows。 如果我在「external_app_user」帳戶下從命令行運行此代碼,則一切正常。但是,如果我從webservice(WSS webapplication外部)運行此代碼,則結果是http響應「401 UNAUTHORIZED」而不是SOAP響應。這很奇怪,因爲這段代碼位於「try-catch」塊中,如果有任何拋出,我在SOAP響應中返回了自己的錯誤消息。

代碼與WSS在同一臺機器上運行。

如果我在web服務運行的機器上從webbroser運行webservice,將顯示經典的Windows登錄窗體。如果我在另一臺計算機上從webbrowser運行webservice,則只能獲得「401 UNAUTHORIZED」http響應。

Web服務正在正確的帳戶下運行。此帳戶可以訪問WSS(通過Sharepoint網站進行測試)。如果我嘗試獲取「System.Security.Principal.WindowsIdentity.GetCurrent()。Name」,則返回正確的用戶名。

在web.config中設置爲 「<身份冒充=」 真」的userName = 「_ my_username_」 密碼= 「_ my_password_」/>。

任何人有想法有什麼不好?

回答

1

你可以檢查在。IIS匿名如果和Windows身份驗證都被允許則可以讓你通過爲匿名,而不是讀你的Windows標識,從而導致未授權後

+0

允許匿名和Windows身份驗證。 現在我得到了stacktrace,並且401 UNAUTHORIZED錯誤從get的「AllWebs」屬性中獲得。 – TcKs 2009-07-30 10:47:30