ProductA使用我们唯一的Web服务,这是与ProductA的单独部署。我们将两者都部署到生产中。
后来,我们正在编写ProductB。在此过程中,我们为我们唯一的Web服务添加了一种新方法。当ProductA发布时,该新方法不在WSDL中。我们在开发过程中不对ProductA进行任何更改。
当我们将ProductB部署到生产环境时,我们还部署(生产)我们唯一的Web服务的新版本(到ProductA期望找到它的同一端点URL)。我们不会将ProductA重新部署到生产环境中。
我们唯一的Web服务的WSDL在生产中已经改变,但ProductA使用的方法的签名没有改变。他们仍然在WSDL中。
由于我们以这种方式升级我们唯一的网络服务,ProductA会有任何问题吗?
如果Web服务发生变化,原始客户端的方法保持不变,您是否必须升级Web服务的客户端?
答案 0 :(得分:14)
没有。只要您离开了产品A单独使用的方法,您就不必更新产品A的WebReference副本。
答案 1 :(得分:13)
只是为现有答案添加更多细节,对需要对客户端代理进行相应更改的Web服务的唯一更改是:
添加新方法或向类型添加新字段/属性几乎总是不间断的更改(仍然,使用客户端进行测试并没有什么坏处。)
当然,请记住,客户端在重建之前实际上无法使用这些新方法或属性。但它不会破坏现有的功能。
答案 2 :(得分:2)
通常我会说不。但是,我们有50个客户端中有一个使用JAX-WS遇到问题。他们得到这样的错误:
javax.xml.ws.WebServiceException:
The Endpoint validation failed to validate due to the following errors:
:: Invalid Endpoint Interface :: :: The operation names in the WSDL portType
do not match the method names in the SEI or Web service implementation class.
wsdl operations = [...]
我认为这与此有关:
其中说:“最佳实践:确保在收到更新的WSDL文件时重新生成客户端工件。”
但是,在我们的客户端实例中在运行时检查服务器端WSDL,因此一旦添加新方法它就会失败。我不知道问题的具体细节或范围,但似乎您可以编写一个SOAP客户端实现,该实现将破坏服务提供的WSDL中的新方法。
答案 3 :(得分:2)
我不想讨论一个老化的线程,并且已经提出了许多关键点,但我想添加一个关于迁移框架的说明。在从.Net 2.0迁移到4.6之后,我有时会遇到异常行为。我会详细说明具体的错误,但它们是不久前的。
我还要补充一点,尽管大多数这些评论,我已经遇到了许多客户的问题,即使在此处描述的最小变化后也没有升级Web引用。我可能会补充说,这可能是由于更新的框架。多年来,我已经在MSDN的许多地方阅读过,应该始终重新生成WSDL。
我实际上一直在寻找一种自动执行此操作的技术。以便在Web服务更新时防止客户端崩溃。我在搜索中跳过了这个帖子。
这不是一个真正的答案,但这里的评论太长了。
答案 4 :(得分:1)
虽然我同意不更新现有客户端的服务引用可能不会有任何问题,但您还应该询问如果 更新现有客户端的服务引用会出现什么问题客户端。一定要测试那个场景。
虽然我们倾向于考虑将服务方法添加为服务器上唯一重要的方法,但请记住,更新服务引用时,这实际上是在更改客户端的代码。
有些组织相信在客户端代码更改时测试客户端代码。