1. 程式人生 > >Sharepoint 2010 自定義WebService 找不到網站應用程式

Sharepoint 2010 自定義WebService 找不到網站應用程式

錯誤描述:Net 開發WebService呼叫Microsoft.SharePoint.dll的伺服器端物件模型,出現找不到網站的應用程式,或者出現500錯誤。

錯誤截圖:

[Webservice呼叫頁錯誤]

System.IO.FileNotFoundException: 找不到位於 http://localhost 的 Web 應用程式。請確認正確鍵入了此 URL。如果此 URL 需要提供現有內容,則系統管理員可能需要新增到指定應用程式的新請求 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檔案的問題,因為找不到應用程式麼,然後在瀏覽器裡開啟url,發現可以開啟;再考慮是不是許可權不夠,因為是net呼叫sharepoint的dll,然後提權進行操作,發現也不能解決問題。

  查了很久,後來發現,程式碼預覽有問題,但是釋出以後,呼叫WebService卻沒有問題,感覺很奇怪,但是沒有辦法進行除錯了。後來查資料,發現說VS的iis對64位支援有問題,雖然自己並不清楚是不是這裡的問題,但是釋出以後,除錯本機的iis,發現問題不存在了(感謝這位博主的文章,參考博文地址附後)。

解決方法: 把自己建的專案釋出到本地iis,然後 屬性 – web – 使用本地iis web伺服器,填寫格式[url:port/網站名稱],然後可以除錯了。

  修改以後,發現呼叫的時候,還有拋黃頁的現象[“拒絕訪問。 (異常來自 HRESULT:0x80070005 (E_ACCESSDENIED))”]

,後來,經朋友提醒,發現木有提權,菜鳥就是菜鳥,之前除錯的暈頭轉向,居然忽略了提權。

提權程式碼:

SPSecurity.RunWithElevatedPrivileges(delegate()
{

程式碼段….
});

  再有就是,有人說寫控制檯,也會出現找不到應用程式的情況,將生成的目標平臺調成64位,或者調成[Any cpu],自己到沒有遇到過,不過這些對WebService呼叫sharepoint.dll是不管用的。