在 Visual Studio 中更新 Web 参考

Nei*_*ilD 5 c# wcf biztalk web-services

我继承了一个网站项目,该项目使用 BizTalk 服务器上托管的许多 WCF Web 服务。我需要将此项目部署到两个环境,不同的 BizTalk 服务器具有不同的 URL。

即在登台环境中,我需要将服务指向xx.xx.xx.101
在实时环境中,我需要将它们指向xx.xx.xx.102,或者其他。

目前,我们已将所有 URL 存储在 web.config 文件的键中,以便我们可以动态更改它们。不幸的是这不起作用。

如果我将 web.config 中的 URL 更改为项目编译时使用的其他 URL,则在调用服务时会收到错误消息:

服务器无法识别 HTTP 标头 SOAPAction 的值:xx.xx.xx.101\ServiceName\MethodName

我被告知,他们知道部署此功能的唯一方法是更新 web.config URL,更改 Visual Studio 中的所有 Web 引用以匹配,单击 Visual Studio 中每个引用的“更新 Web 引用”,然后编译。

我编写了一个预构建 NAnt 脚本来遍历并替换在项目目录中任何位置找到的 URL 的所有实例,即使这样也没有任何区别。

当我单击“更新参考”时,必须从服务中删除其他内容,但我不确定是什么。

有人有什么想法吗?有没有办法以编程方式执行此操作?

mat*_*nja 5

除了 Url 之外,不同服务器上引用的 Web 服务是否完全相同?特别是所有引用的服务的命名空间必须相同。

如果您引用的 Web 服务中的命名空间和其他所有内容都完全相同,您只需更新您的 Web 服务端点,而不是整个 Web 引用。您可以通过简单地将服务的 Url 属性设置为您的配置值来设置端点

YourServiceReference yourService = new YourServiceReference();
yourService.Url = "http://yourconfigendpoint";
Run Code Online (Sandbox Code Playgroud)

编辑:这适用于旧式 Web 服务,对 WCF 不确定,但应该类似..?


Nei*_*ilD 0

是的...我想我已经解决了!

我放弃了所有 Visual Studio Web 引用,转而使用 NAntContrib“wsdl”任务生成的代理类。

该脚本现在将根据您选择的构建类型(调试、发布等)更新所有引用。

这仍然没有回答为什么这个问题首先发生,但我怀疑它正如 mattanja 所建议的那样,并且每个服务器上的 Web 服务存在一些差异。

更新 此问题的根本原因是在两台服务器上部署 Web 服务的人为每个部署使用了不同的命名空间。使用相同的命名空间重新部署 Web 服务解决了这个问题,并且消除了所有这些 NAnt 愚蠢的需要。