wcf - 如何维护同一个wcf服务的多个版本

标签 wcf

假设我在生产 PC 中运行 wcf 服务。只是指导我需要在代码中添加什么来为我的服务提供版本。

我是否需要分别维护服务契约(Contract)和数据契约(Contract)的版本....只需给我一个创建至少两个版本的 wcf 服务的小例子。

如果少数几个客户正在使用我的服务,并且如果我更改任何现有的服务契约(Contract)方法或向服务契约(Contract)添加更多方法,那么将会发生什么......在这种情况下,客户可以调用我的服务或者他们需要再次创建代理以获取服务契约(Contract)的更改。如果有人用小的示例代码讨论我的所有观点以清楚地了解这个想法,那将非常有帮助。谢谢

最佳答案

您需要考虑几件事情。首先,您需要将命名空间添加到您的契约(Contract)和模式/消息中。为什么?好吧,因为如果版本 1 和 2 具有相似的操作和消息,它们可能会相互冲突。添加命名空间将使代码/客户端知道他正在处理 2 个不同的实现。

其次,您可能想问为什么要更改服务契约(Contract)。是不是因为需要添加需求操作。或者它是一个全新的功能,可以分离到一个新的 WCF 服务中。如果您想维护版本,请将全新的功能放入新服务中,如果它必须是当前服务的一部分,请复制契约(Contract)并创建一个单独的版本。

更改服务契约(Contract)将破坏当前正在使用该契约(Contract)的客户端。为服务创建单独的版本将允许您当前的客户端继续使用以前的版本,直到您更新该客户端。所以你会得到这样的东西。

namespace MyNamespace.Contracts.V1
{
    [ServiceContract(Namespace = "urn:company:project:servicename:v1")]
    public interface IService
    {
        [OperationContract]
        void RequirementA();
    }
}
namespace MyNamespace.Contracts.V2
{
    [ServiceContract(Namespace = "urn:company:project:servicename:v2")]
    public interface IService
    {
        [OperationContract]
        void RequirementA();

        [OperationContract]
        void RequirementB();
    }
}

两个版本都将单独托管,您的实现也会有所不同。但是,您可以让实现将您的操作委托(delegate)给某种(业务) Controller ,它支持这两个版本,您的流程看起来像这样。
  • V1.IService - V1.Implementation 将调用委托(delegate)给 MyServiceController
  • V2.IService - V2.Implementation 还将调用 MyServiceController

  • 通过这种方式,您可以让 1 个 Controller 处理需要执行的任何(业务)逻辑,从而防止任何可能的重复代码。

    关于wcf - 如何维护同一个wcf服务的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14104823/

    相关文章:

    .net - 断开连接的域客户端上的 SecurityNegotiationException

    .net - 带有 SSL 终止负载平衡服务器的 WCF

    c# - 从 WCF 服务调用 Windows 服务中的方法(自托管)

    visual-studio-2010 - WCF服务主机中的WCF服务抛出错误

    c# - WCF 行为配置作为 .NET Remoting

    wcf - 如何序列化 WCF 中的 UTC 日期时间以在末尾包含 "Z"?

    wcf - 通过共享 channel 的并发 WCF 调用

    wcf - 如何在 1 个 Windows 服务中托管 2 个 WCF 服务?

    wcf - 如何使用带有 Tls 1.2 的端点的 Svcutil.exe 获取元数据

    c# - 当我们使用 JSON.Net 序列化可序列化对象时,JSON 字符串与 DatacontractJSON 序列化器不同