【问题标题】:Update Web Reference in Visual Studio在 Visual Studio 中更新 Web 引用
【发布时间】:2010-03-09 09:30:38
【问题描述】:

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

即在 Staging 环境中,我需要将服务指向xx.xx.xx.101
在 Live 环境中,我需要将它们指向 xx.xx.xx.102 或其他。

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

如果我将 web.config 中的 URL 更改为项目编译时使用的 URL,调用服务时会出错:

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

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

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

当我点击“更新参考”时,一定有其他东西从服务中拉下来,但我不确定是什么。

有人有什么想法吗?有没有办法以编程方式做到这一点?

【问题讨论】:

  • 这些是网络引用还是服务引用?

标签: c# wcf web-services biztalk


【解决方案1】:

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

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

YourServiceReference yourService = new YourServiceReference();
yourService.Url = "http://yourconfigendpoint";

编辑:这是针对旧式 Web 服务的,与 WCF 无关,但应该类似..?

【讨论】:

  • 嗨 Mattanja,对不起,如果我没有说清楚,但我已经将 URL 属性设置为 web.config 值。完成后,我收到上面显示的错误。该服务连接到正确的服务器,但之后出现错误。
  • 是的,对不起,我后来也注意到,我可能没有真正给你你一直在寻找的答案:) - 已编辑
  • 老实说,我不相信两台服务器上的 Web 服务是相同的。不幸的是,它们不是我的服务器,而且很难检查!
【解决方案2】:

尼尔!我认为在项目中完全替换 URL 并不是最好的解决方案。我认为在 Web 项目中对 WCF 服务的调用产生了抛出消息合同。你能把调用一些服务方法的代码sn-p放在这里吗?您只需替换代理构造函数中存在的 URL。指定方法名称的其他 URL 必须保持不变

【讨论】:

  • Hi Yuriy... 调用服务方法的代码几乎与 mattanja 上面发布的 sn-p 相同。我已经设法使用 NAnt 解决了这个问题,但感谢您的宝贵时间。
【解决方案3】:

好吧……我想我已经修好了!

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多