2009-07-30 227 views
1

我在嘗試在我們的某個平臺上調用SharePoint的Web服務時出現錯誤。首先,我們有開發(DEV),測試(QA)和生產(PROD)SharePoint服務器。 QA和PROD服務器幾乎完全相同。我們有一個ASP.NET Web服務,它們分別作爲一個獨立的應用程序。我們的數據輸入表單會將Web服務插入/更新到SQL數據庫中,並且在某些情況下會調用某些SharePoint Web服務(列表,dws)。SharePoint網絡服務「無法連接到遠程服務器」

我們在從Web服務的PROD上調用SharePoint的Web服務時遇到問題,但是在QA(或DEV)上沒有問題。在我們的Web服務代碼中,我們有對SharePoint Web服務(列表和dws)的Web引用。當通過我們的某個表單創建新條目時,我們試圖調用這些Web服務來創建列表項目/文件夾。在QA上,創建列表項目/文件夾沒有問題。表格填寫完畢後,調用我們的Web服務 - 調用SharePoint Web服務並創建列表項目/文件夾。

PROD上,我們得到以下錯誤,當我們試圖調用的SharePoint Web服務:

無法連接到遠程服務器

在System.Net.HttpWebRequest.GetRequestStream() 在System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName,Object [] parameters) ...

但是,爲了使它更有趣,如果我cal l直接從我的個人計算機執行PROD SharePoint Web服務我無法創建列表項目/文件夾。當我們的Web服務嘗試調用PROD SharePoint Web服務時,我們只有這個問題。我們瀏覽了許多不同的web.config文件,尋找QA和PROD的差異,並且還沒有提出任何問題。

如果任何人有任何指針,他們會大大apprecciated。謝謝。

更新:我只是試圖重構上述方法來使用SharePoint對象模型API,我得到一個未經授權的錯誤。當使用對象模型API時,證書似乎沒有被正確傳遞,因爲它試圖使用MOSS服務器證書。有沒有什麼辦法可以告訴它在使用web服務api時使用哪個憑證?

docLibList.Credentials = System.Net.CredentialCache.DefaultCredentials; 

謝謝。

+0

調用SharePoint Web服務的ASP.NET服務是否位於相同的服務器上(QA和PROD)?如果是這樣,爲什麼不直接用ASP.NET服務調用對象模型呢? – Janie 2009-07-30 17:27:01

回答

0

這可能不是問題,而是您正確指向生產服務器的Web服務的引用。嘗試訪問被錯誤引用的SP服務之前,我遇到了問題。我指向的開發服務器位於單獨的域中,無法找到。

2

肖恩,

我不知道我完全理解你的調用模式,但如果你確實循環回到Web服務在同一個盒子,你可能會運行到臭名昭著的回送問題:

https://serverfault.com/questions/32345/ie-8-authentication-denied-on-local-sharepoint-site/32485#32485

簡而言之:執行基於主機名的HTTP調用,可以阻止發回它們的服務器。如果環回問題在進行中,您可以從另一個盒子的PROD中調用Web服務...但不能從PROD盒子本身調用(即循環返回)。我認爲這與你上面描述的行爲是一致的。

如果您的環境中的Windows補丁程序級別不同,它可能會解釋爲什麼您的代碼在PROD中失敗,但在您的其他環境中失敗。

我希望這有助於!

0

關於更新您的有關使用對象模型中的未經授權的錯誤問題:

根據你的代碼運行在你有時需要提升權限的上下文。有關詳細信息,請參閱此Elevation of Privilege MSDN文章(還請注意最後的社區評論)。還有一個Visual How-To。另一種方法是創建new SPSite object using a SPUserToken object。有更多的信息in this blog post by Daniel Larson。對於系統帳戶,這將與代碼來完成:

SPSite site = new SPSite(SPContext.Current.Site.ID, 
         SPContext.Current.Site.SystemAccount.UserToken); 

順便說一句,這將是它自己的問題,下一次更好,所以它可以正確地投票和回答。