錯(cuò)誤描述:Net 開(kāi)發(fā)WebService調(diào)用Microsoft.SharePoint.dll的服務(wù)器端對(duì)象模型,出現(xiàn)找不到網(wǎng)站的應(yīng)用程序,或者出現(xiàn)500錯(cuò)誤。
錯(cuò)誤截圖:
[Webservice調(diào)用頁(yè)錯(cuò)誤]
System.IO.FileNotFoundException: 找不到位于 http://localhost 的 Web 應(yīng)用程序。請(qǐng)確認(rèn)正確鍵入了此 URL。如果此 URL 需要提供現(xiàn)有內(nèi)容,則系統(tǒng)管理員可能需要添加到指定應(yīng)用程序的新請(qǐ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:行號(hào) 26
[完整的錯(cuò)誤提示]
[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();
}
[測(cè)試代碼,獲取WebID]
最初以為是備用訪(fǎng)問(wèn)映射,或者修改Host文件的問(wèn)題,因?yàn)檎也坏綉?yīng)用程序么,然后在瀏覽器里打開(kāi)url,發(fā)現(xiàn)可以打開(kāi);再考慮是不是權(quán)限不夠,因?yàn)槭莕et調(diào)用sharepoint的dll,然后提權(quán)進(jìn)行操作,發(fā)現(xiàn)也不能解決問(wèn)題。
查了很久,后來(lái)發(fā)現(xiàn),代碼預(yù)覽有問(wèn)題,但是發(fā)布以后,調(diào)用WebService卻沒(méi)有問(wèn)題,感覺(jué)很奇怪,但是沒(méi)有辦法進(jìn)行調(diào)試了。后來(lái)查資料,發(fā)現(xiàn)說(shuō)VS的iis對(duì)64位支持有問(wèn)題,雖然自己并不清楚是不是這里的問(wèn)題,但是發(fā)布以后,調(diào)試本機(jī)的iis,發(fā)現(xiàn)問(wèn)題不存在了(感謝這位博主的文章,參考博文地址附后)。
解決方法: 把自己建的項(xiàng)目發(fā)布到本地iis,然后 屬性 – web – 使用本地iis web服務(wù)器,填寫(xiě)格式[url:port/網(wǎng)站名稱(chēng)],然后可以調(diào)試了。
修改以后,發(fā)現(xiàn)調(diào)用的時(shí)候,還有拋黃頁(yè)的現(xiàn)象[“拒絕訪(fǎng)問(wèn)。 (異常來(lái)自 HRESULT:0x80070005 (E_ACCESSDENIED))”],后來(lái),經(jīng)朋友提醒,發(fā)現(xiàn)木有提權(quán),菜鳥(niǎo)就是菜鳥(niǎo),之前調(diào)試的暈頭轉(zhuǎn)向,居然忽略了提權(quán)。
提權(quán)代碼:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
代碼段….
});
再有就是,有人說(shuō)寫(xiě)控制臺(tái),也會(huì)出現(xiàn)找不到應(yīng)用程序的情況,將生成的目標(biāo)平臺(tái)調(diào)成64位,或者調(diào)成[Any cpu],自己到?jīng)]有遇到過(guò),不過(guò)這些對(duì)WebService調(diào)用sharepoint.dll是不管用的。