2

有没有一种很好的方法来版本化 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;
}

然后公开正确的方法并公开数据类型中的正确值。

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

4

2 回答 2

7

有很多关于服务版本控制的东西——你需要考虑很多事情。

此处概述了我读过的有关版本控制的最低摩擦文章,但是,在某些地方似乎有点“hacky”,特别是在您使用接口继承来对端点合同进行版本控制的地方(请参见此处的示例)。

微软自己对此有很多话要说(这里)。

于 2012-04-24T09:21:48.877 回答
1

Microsoft 发表了一篇关于WCF 中的版本控制策略的优秀文章。

在文章中,作者讨论了 Versioning Service Contracts 的两种主要方法:

敏捷版本控制:尽可能长时间地依赖向后兼容性,避免正式的合同和端点版本控制,直到兼容性被破坏。这种方法在需要频繁更新生产代码的敏捷环境中很有用。

在此处输入图像描述

严格版本控制:对服务合同、数据合同、消息合同或其他合同相关或端点相关更改的任何更改执行正式合同和端点版本控制。这种方法最适合生产更新频率较低或需要详细跟踪任何和所有更改的环境。

在此处输入图像描述

还有一种被称为半严格版本控制的方法,它位于敏捷和严格版本控制之间。

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

于 2014-08-14T14:58:49.337 回答