4

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

当我尝试对 dll 进行 GAC 时,问题就来了。当我对 DLL 进行 GAC 时,配置文件无法与 dll 一起被 GAC,因此,我无法更新 Web 参考。

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

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

4

4 回答 4

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 网站的根目录中。

于 2008-09-24T04:18:47.140 回答
1

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

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

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

WebServiceReference svc = new WebServiceReference(myConfig);
于 2008-09-24T04:07:23.220 回答
0

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

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

于 2008-09-26T13:13:50.587 回答
-1

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

于 2008-09-24T04:24:21.090 回答