錯誤描述:Net 開發(fā)WebService調(diào)用Microsoft.SharePoint.dll的服務(wù)器端對象模型,出現(xiàn)找不到網(wǎng)站的應(yīng)用程序,或者出現(xiàn)500錯誤。
錯誤截圖:
[Webservice調(diào)用頁錯誤]
System.IO.FileNotFoundException: 找不到位于 http://localhost 的 Web 應(yīng)用程序。請確認正確鍵入了此 URL。如果此 URL 需要提供現(xiàn)有內(nèi)容,則系統(tǒng)管理員可能需要添加到指定應(yīng)用程序的新請求 URL 映射。 在 Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite, SPUserToken userToken) 在 Microsoft.SharePoint.SPSite..ctor(String requestUrl) 在 WebApplication1.WebService1.GetWebID(String SiteUrl) 位置 C:\Users\Administrator\Documents\Visual Studio 2010\Projects\WebApplication1\WebApplication1\WebService1.asmx.cs:行號 26
[完整的錯誤提示]
[WebMethod(Description = "獲取WebID")]
public string GetWebID(string SiteUrl)
{
SPSite site = null;
SPWeb web = null;
site = new SPSite(SiteUrl);
web = site.OpenWeb();
return "ID:" + web.ID.ToString();
}
[測試代碼,獲取WebID]
最初以為是備用訪問映射,或者修改Host文件的問題,因為找不到應(yīng)用程序么,然后在瀏覽器里打開url,發(fā)現(xiàn)可以打開;再考慮是不是權(quán)限不夠,因為是net調(diào)用sharepoint的dll,然后提權(quán)進行操作,發(fā)現(xiàn)也不能解決問題。
查了很久,后來發(fā)現(xiàn),代碼預(yù)覽有問題,但是發(fā)布以后,調(diào)用WebService卻沒有問題,感覺很奇怪,但是沒有辦法進行調(diào)試了。后來查資料,發(fā)現(xiàn)說VS的iis對64位支持有問題,雖然自己并不清楚是不是這里的問題,但是發(fā)布以后,調(diào)試本機的iis,發(fā)現(xiàn)問題不存在了(感謝這位博主的文章,參考博文地址附后)。
解決方法: 把自己建的項目發(fā)布到本地iis,然后 屬性 – web – 使用本地iis web服務(wù)器,填寫格式[url:port/網(wǎng)站名稱],然后可以調(diào)試了。
修改以后,發(fā)現(xiàn)調(diào)用的時候,還有拋黃頁的現(xiàn)象[“拒絕訪問。 (異常來自 HRESULT:0x80070005 (E_ACCESSDENIED))”],后來,經(jīng)朋友提醒,發(fā)現(xiàn)木有提權(quán),菜鳥就是菜鳥,之前調(diào)試的暈頭轉(zhuǎn)向,居然忽略了提權(quán)。
提權(quán)代碼:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
代碼段….
});
再有就是,有人說寫控制臺,也會出現(xiàn)找不到應(yīng)用程序的情況,將生成的目標平臺調(diào)成64位,或者調(diào)成[Any cpu],自己到?jīng)]有遇到過,不過這些對WebService調(diào)用sharepoint.dll是不管用的。