2012-04-24 62 views
2

有没有一种很好的方式来对WCF服务中的数据类型和方法进行版本化?版本WCF服务的方法

像这样的东西,将版本1.0中的方法包括到版本4.5中会很好。

[ServiceContract()] 
interface ITradeTrackingService 
{ 
    [OperationContract()] 
    [Version(1.0, 4.5)] 
    void PublishQuote(Quote quote); 
} 

和数据类型相似的东西。

然后我想在我的网址这样做:

server.com/ws/2.3/ 

然后在我的Global.asax的BeginRequest做这样的事情:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    Service.Version = someParsingOfUrl(); // return 2.3; 
} 

然后正确的方法暴露并且暴露了数据类型中的正确值。

这只是我在做梦,还是可以以某种方式完成?

+1

[使用WCF版本化您的服务的最佳实践]的可能重复(http://stackoverflow.com/questions/36999/best-practices-for-versioning-your-services-with-wcf) – Cheeso 2012-04-26 01:57:17

回答

7

有关于服务版本的bunch of stuff - 有很多事情你需要考虑。

最低摩擦文章我看了一下版本概述here,但是,它似乎在地方有点“哈克”,具体在哪里,你使用的接口继承版本的端点合同(见一个例子here)。

微软自己有很多话要说(here)。

1

微软在WCF中发布了一篇关于Versioning Strategies的优秀文章。

在这篇文章中,作者讨论版本服务合同的两种主要方法:

敏捷版本:依靠向后兼容性,只要有可能,并避免正式的合同和端点的版本,直到兼容性被打破。此方法在需要频繁更新生产代码的敏捷环境中非常有用。

enter image description here

严格的版本:任何变更服务合同,合同数据,消息,合同或其他合同相关或端点相关变化进行正式的合同和端点版本。此方法适用于生产更新较少或需要详细跟踪任何和所有更改的环境。

enter image description here

还描述被称为半严格版本的方法,其在于敏捷和严格的版本之间。

链接的文章也讨论了数据合同的版本控制。