Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 更新或版本化web服务的策略?_.net_Web Services_Deployment - Fatal编程技术网

.net 更新或版本化web服务的策略?

.net 更新或版本化web服务的策略?,.net,web-services,deployment,.net,Web Services,Deployment,我很想听听关于如何处理不同版本的web服务的最佳实践 为了澄清这一点,如果您已经将一些web方法公开为web服务,那么您希望添加一个特性/功能,从而更改这些方法调用的签名,那么您如何以不破坏当前调用该服务的所有客户机的方式来处理此问题 您是否在不同的URL上部署服务 您是否在方法名称本身中添加了一个版本(MyMethod、MyMethodv2等)-呃..) 是否将版本作为方法调用的一部分与参数列表一起传递 有人知道Google或Amazon如何利用其广泛的Web服务库处理这种情况吗 编辑:到目前

我很想听听关于如何处理不同版本的web服务的最佳实践

为了澄清这一点,如果您已经将一些web方法公开为web服务,那么您希望添加一个特性/功能,从而更改这些方法调用的签名,那么您如何以不破坏当前调用该服务的所有客户机的方式来处理此问题

您是否在不同的URL上部署服务

您是否在方法名称本身中添加了一个版本(MyMethod、MyMethodv2等)-呃..)

是否将版本作为方法调用的一部分与参数列表一起传递

有人知道Google或Amazon如何利用其广泛的Web服务库处理这种情况吗


编辑:到目前为止,我在这里找到了一些好信息。在一些Java细节上也很有用。我仍然很想看到其他一些方法。

我可以告诉你,创建doAPIFunction、doAPIFunctionV2和doAPIFunctionV3等的解决方案在我工作的地方只会带来麻烦。此外,缺少清晰的描述性函数名意味着各种各样的疯狂


您需要清晰的API函数名,如果API正在更改,那么目标就是尝试以尽可能向后兼容的方式进行更改。我建议对您的入口点进行版本控制,以便每个入口点都支持稳定的API,如果有充分的理由更改语义,example.org/API-1.0/中的doFunction可能与example.org/API-2.0中的doFunction不同。

我不确定是否正确理解了您的问题。但是我的2美分。 若方法的签名像另一个新参数一样改变,那个么为什么不能将其设置为可选的呢?但如果现有参数数据类型已更改,则不适用


如果这显然是错误的,请投票否决

几年前,当您可以拥有相同的webservice方法名称和不同的参数时,它会变得更简单。:)

一旦您编写了一个Web服务,您就与客户签订了一份合同,这就是您将支持的内容

对于较旧的方法,我建议登录以查看它们是否被使用,以及由谁使用,以查看是否可以让它们更新

除此之外,您最好只编写一个新方法,这样您可能会有几个类似的函数名,但不同的版本会有所不同

传递版本号的问题是,您必须确保客户端始终传递有效的版本号,如果生成存根,这将起作用,但如果不这样做,这将非常脆弱


在名称中添加一个版本号似乎对我最为有效,因为它可以清楚地显示什么是旧的,并且您可以使用AOP更轻松地记录webservice方法的旧版本。

缓解这种情况的一种方法是通过契约编码和将接口设置为石头。您永远无法真正更改函数签名,但是,您可以重载它们。考虑.NET API。它不赞成某些方法,但它们继续工作,因为围绕它们编写的程序可能会中断。该服务的新版本可能会在不同的URI(v2.webservice.com)上公开,以便为其提供新的路线图,v1需要继续得到支持。

控制web服务版本的典型方法是让客户端指定所需的版本。您可以考虑简单的约束,如“>2.0”,“为了便于参考,这里有一个链接:Oracle文章已经移动了。我认为就是这样:这个问题应该回应你的答案,因为你是否可以使用可选参数取决于你的语言是否支持它@詹姆斯,这是一个很好的链接。正如该论坛所指出的,为什么Matt不能尝试重载?Web服务不支持可选参数或重载,所以无论您使用哪种语言都不重要。+1-回答得很好。谢谢你的洞察力。我们使用SOAP连接到Oracle/Java服务。REST和RPC之间的区别很有趣。非常有洞察力。在URL中还是在名称空间中?约翰,你说的“名称空间”是什么意思?如果它是URL路径的一部分,那么我通常不同意。谢谢你的回答,但我的问题更多的是关于如何在生产中处理web服务的版本控制。例如,如何运行MyWebMethod(inti,intx)和MyWebMethod(inti,intx,inty)并在部署中处理此问题。我们确实在所有编码项目中使用SVN作为我们的VCS。