向webservice添加方法:旧客户端是否需要更新Web引用?

时间:2010-01-26 21:34:40

标签: web-services soap wsdl signatures

ProductA使用我们唯一的Web服务,这是与ProductA的单独部署。我们将两者都部署到生产中。

后来,我们正在编写ProductB。在此过程中,我们为我们唯一的Web服务添加了一种新方法。当ProductA发布时,该新方法不在WSDL中。我们在开发过程中不对ProductA进行任何更改。

当我们将ProductB部署到生产环境时,我们还部署(生产)我们唯一的Web服务的新版本(到ProductA期望找到它的同一端点URL)。我们不会将ProductA重新部署到生产环境中。

我们唯一的Web服务的WSDL在生产中已经改变,但ProductA使用的方法的签名没有改变。他们仍然在WSDL中。

由于我们以这种方式升级我们唯一的网络服务,ProductA会有任何问题吗?

如果Web服务发生变化,原始客户端的方法保持不变,您是否必须升级Web服务的客户端?

5 个答案:

答案 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 = [...] 

我认为这与此有关:

http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.nd.multiplatform.doc%2Finfo%2Fae%2Fae%2Ftwbs_devjaxws_exposewebmethod.html

其中说:“最佳实践:确保在收到更新的WSDL文件时重新生成客户端工件。”

但是,在我们的客户端实例中在运行时检查服务器端WSDL,因此一旦添加新方法它就会失败。我不知道问题的具体细节或范围,但似乎您可以编写一个SOAP客户端实现,该实现将破坏服务提供的WSDL中的新方法。

答案 3 :(得分:2)

我不想讨论一个老化的线程,并且已经提出了许多关键点,但我想添加一个关于迁移框架的说明。在从.Net 2.0迁移到4.6之后,我有时会遇到异常行为。我会详细说明具体的错误,但它们是不久前的。

我还要补充一点,尽管大多数这些评论,我已经遇到了许多客户的问题,即使在此处描述的最小变化后也没有升级Web引用。我可能会补充说,这可能是由于更新的框架。多年来,我已经在MSDN的许多地方阅读过,应该始终重新生成WSDL。

我实际上一直在寻找一种自动执行此操作的技术。以便在Web服务更新时防止客户端崩溃。我在搜索中跳过了这个帖子。

这不是一个真正的答案,但这里的评论太长了。

答案 4 :(得分:1)

虽然我同意不更新现有客户端的服务引用可能不会有任何问题,但您还应该询问如果 更新现有客户端的服务引用会出现什么问题客户端。一定要测试那个场景。

虽然我们倾向于考虑将服务方法添加为服务器上唯一重要的方法,但请记住,更新服务引用时,这实际上是在更改客户端的代码。

有些组织相信在客户端代码更改时测试客户端代码。