将Web引用添加到GACed的DLL

时间:2008-09-24 04:05:10

标签: .net sharepoint events moss gac

当我在SharePoint中编写事件处理程序时,我遇到了这个问题。我的事件处理程序有一个Web引用。当我创建此Web引用时,Web服务的URL将添加到程序集的.config文件中。如果我必须更改Web引用URL,我只需要更改配置文件中的链接。

当我尝试GAC dll时出现问题。当我GAC DLL,配置文件不能与DLL一起GAC,因此,我没有办法更新Web引用。

我找到的一个解决方法是修改构造函数方法Reference.cs类,当我添加引用时由visual studio自动生成,以便构造函数从其他位置读取Web服务URL,例如注册表或XML文件在某个预定的位置。但这有时会出现问题,因为当我使用visual studio更新Web引用时,此Reference.cs文件会重新生成,并且我的所有修改都将丢失。

有没有更好的方法来解决这个问题?

4 个答案:

答案 0 :(得分:2)

SharePoint托管的任何应用程序都使用位于IIS中SharePoint网站根目录的web.config。您需要做的是将Web / Service Reference向导生成的配置添加到web.config。

这大致是如何运作的:

  • SharePoint应用程序池加载您的DLL
  • 您的DLL在当前应用程序配置文件中查找服务信息
  • 您的DLL找到web.config并在那里查找配置信息

基本上,不使用DLL中生成的app.config。由于此案例中的应用程序是托管SharePoint应用程序的应用程序池(w3wp.exe)。对于SharePoint,app.config实际上名为web.config,并且存在于SharePoint网站的根目录中。

答案 1 :(得分:1)

如果您有Visual Studio 2008,请使用服务引用而不是Web引用,这将生成可用于覆盖功能的部分类,而不会使代码覆盖生成器。

对于Visual Studio 2005,您只需将部分关键字添加到Reference.cs中的类中,并使用您自己的分部类保留单独的文件:

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

WebServiceReference svc = new WebServiceReference(myConfig);

答案 2 :(得分:0)

我通过为我的类库创建动态Web引用,然后将包含web引用的applicationSettings config部分从app.config文件复制到我的Sharepoint站点web.config中来解决这个问题。

请注意,您还需要将applicationSettings的条目复制到web.config中,因为这通常不存在。

答案 3 :(得分:-1)

您可以尝试这样做:而不是使用动态Web引用使其成为静态引用,以便Reference.cs中的代码不会在.config文件中查找URL的值。然后对生成的Web服务客户端代码进行子类化,并在该派生类中添加您自己的逻辑以设置.Url属性。然后VS.NET可以重新生成它所喜欢的Reference.cs,你的网址设置代码将保留。当然,您必须更新任何下游代码才能使用派生类,但这应该是一个简单的全局替换。