2008-09-24 43 views
4

當我在SharePoint中編寫事件處理程序時遇到此問題。我的事件處理程序有一個Web引用。當我創建這個Web引用時,Web服務的URL將被添加到程序集的.config文件中。如果我必須更改Web引用URL,我只需要更改配置文件中的鏈接。添加一個Web引用到GACed的DLL

問題出現在我嘗試GAC dll的時候。當我GAC DLL時,配置文件不能與dll一起GAC,因此,我無法更新Web引用。

我發現的一個解決方法是修改構造函數方法Reference.cs類,它是由Visual Studio在我添加引用時自動生成的,以便構造函數從其他位置(例如註冊表或一個註冊表)讀取Web服務url XML文件在某個預定位置。但是這有時會造成問題,因爲當我使用Visual Studio更新Web引用時,這個Reference.cs文件會被重新生成,並且所有的修改都會丟失。

有沒有更好的方法來解決這個問題?

回答

1

如果您有Visual Studio 2008,請使用服務引用而不是Web引用,它將生成部分類,您可以使用這些類來覆蓋功能,而不會覆蓋生成器的代碼。

對於Visual Studio 2005中,你可以只添加部分關鍵字在Reference.cs類,並保持一個單獨的文件用自己的部分類:

public partial class WebServiceReference 
{ public WebServiceReference(ExampleConfigurationClass config) 
    { /* ... */ 
    } 
} 

WebServiceReference svc = new WebServiceReference(myConfig); 
+0

好吧,有沒有任何第三方部分類生成器,我可以用它來生成這個部分類,以便我可以在VS2005中使用?如果是的話,那麼可能是我可以將Web引用類編譯成DL,並將該DLL引用到我的項目中.L – ashwnacharya 2008-09-24 04:09:55

2

由SharePoint託管的任何應用程序正在使用web.config位於IIS中SharePoint網站的根目錄下。你需要做的是將Web/Service Reference嚮導生成的配置添加到你的web.config中。

這大致是如何工作的:

  • SharePoint應用程序池加載您的DLL
  • 您的DLL查找當前應用程序配置文件中的服務信息
  • 你的DLL發現的web.config和外觀那裏的配置信息

基本上,不會使用在您的DLL中生成的app.config。由於這種情況下的應用程序是託管SharePoint應用程序的應用程序池(w3wp.exe)。對於SharePoint,app.config實際上命名爲web.config,並存在於SharePoint網站的根目錄中。

+0

爲什麼這樣投下了......這是不正確的?沒有理由配置不能進入web.config – 2008-09-24 06:21:38

-1

你可以試試這個:而不是使用動態Web引用使其成爲靜態引用,以便Reference.cs中的代碼不會在.config文件中查找url的值。然後,將生成的Web服務客戶端代碼分類並在該派生類中添加自己的邏輯來設置.Url屬性。然後VS.NET可以重新生成它所喜歡的Reference.cs,並且你的url設置代碼將保留。當然,你必須更新任何下游代碼來使用你的派生類,但這應該是一個簡單的全局替換。

0

我解決了這個問題,方法是爲我的類庫創建Web引用動態,然後將包含來自app.config文件的Web引用的applicationSettings config部分複製到我的Sharepoint站點web.config中。

請注意,您還需要將applicationSettings條目複製到您的web.config中,因爲它通常不在那裏。