版本ASP.NET 2.0 Web服务的最佳方法是什么?

Ste*_*eet 8 .net versioning asp.net soap

我正在维护SOAP Web服务(ASP.NET 2.0版),我必须进行一些修改,以修改特定方法的返回值.

在不破坏现有实现的情况下,通常接受的方法是什么.

我最初的想法是,以下一切都是可能的.

a)在现有Web服务中提供新版本特定方法,例如getPerson_v1.4
b)提供带有新版本号的.asmx文件的完整副本,例如http:/www.example.com/AdminWS_V1_4.asmx.这不是我喜欢的想法,因为该服务有超过50种方法,并且复制代码以更改2/3方法似乎是太多重复的代码.
c)重写Web服务构造函数以允许传入版本号.这似乎不起作用,并且在反思时我不确定如何在WSDL中表示它

是否有一种普遍接受的方式,或者人们根据他们在这一领域的经验提出建议.

Joh*_*ers 6

在一般情况下,对Web服务进行版本控制不仅仅是对方法名称和.asmx文件名进行版本控制.理想情况下,Web服务(其WSDL)的接口应该是永久合同,并且永远不应该更改.其中一个含义是不需要更改功能的客户端永远不需要更改,因此永远不需要重新测试.

您应该创建一个包含已更改操作的新合同,而不是破坏现有合同.该合同可以"继承"现有合同,即您可以"将方法添加到最终".但是请注意,您还应该将新合同放入新的XML命名空间 - 命名空间基本上标识了WSDL,并且键入命名空间但更改WSDL将是一个谎言.

然后,您应该在新端点(.asmx文件)中实现此新合同.这是否在不同的目录中,甚至在不同的网站上并不重要.重要的是,想要新功能的客户可以在新URL处引用新的WSDL并在其新URL处调用新服务,并且很高兴.

请注意,更改现有合同的一个效果是,下次执行"更新Web引用"时,您将更改客户端代理类的代码.在大多数商店中,更改代码需要重新测试和重新部署.因此,您应该将"仅添加方法"视为"仅添加一些必须进行测试和部署的客户端代码",即使现有客户端代码不使用新方法也是如此.