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 的所有实例,即使这样也没有任何区别。
当我单击“更新参考”时,必须从服务中删除其他内容,但我不确定是什么。
有人有什么想法吗?有没有办法以编程方式执行此操作?
除了 Url 之外,不同服务器上引用的 Web 服务是否完全相同?特别是所有引用的服务的命名空间必须相同。
如果您引用的 Web 服务中的命名空间和其他所有内容都完全相同,您只需更新您的 Web 服务端点,而不是整个 Web 引用。您可以通过简单地将服务的 Url 属性设置为您的配置值来设置端点
YourServiceReference yourService = new YourServiceReference();
yourService.Url = "http://yourconfigendpoint";
Run Code Online (Sandbox Code Playgroud)
编辑:这适用于旧式 Web 服务,对 WCF 不确定,但应该类似..?
是的...我想我已经解决了!
我放弃了所有 Visual Studio Web 引用,转而使用 NAntContrib“wsdl”任务生成的代理类。
该脚本现在将根据您选择的构建类型(调试、发布等)更新所有引用。
这仍然没有回答为什么这个问题首先发生,但我怀疑它正如 mattanja 所建议的那样,并且每个服务器上的 Web 服务存在一些差异。
更新 此问题的根本原因是在两台服务器上部署 Web 服务的人为每个部署使用了不同的命名空间。使用相同的命名空间重新部署 Web 服务解决了这个问题,并且消除了所有这些 NAnt 愚蠢的需要。
| 归档时间: |
|
| 查看次数: |
10771 次 |
| 最近记录: |