当我在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文件会重新生成,并且我的所有修改都将丢失。
有没有更好的方法来解决这个问题?
答案 0 :(得分:2)
SharePoint托管的任何应用程序都使用位于IIS中SharePoint网站根目录的web.config。您需要做的是将Web / Service Reference向导生成的配置添加到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,你的网址设置代码将保留。当然,您必须更新任何下游代码才能使用派生类,但这应该是一个简单的全局替换。