在Web服务的版本之间交换c#

时间:2014-04-16 00:10:56

标签: c# web-services versioning

我希望维护调用现有Web服务的代码,但是这样我可以调用相同Web服务的更新版本(基于配置设置)。我需要具有不同的命名空间,因为webservice是相同的名称。有没有人有任何最佳实践模式来完成这个?

谢谢, 史蒂芬

1 个答案:

答案 0 :(得分:0)

"工厂"模式(可能" Facade"模式)是你的朋友。

因此,如果你有两个服务来实现一个通用的方法或一组方法,你可以做这样的事情来建立一般的服务工厂:

我假设您有两个名为ServiceOldServiceNew的服务(它们可以具有相同的名称,并且根据您的情况设置在不同的名称空间中)。并且这些服务共享一种通用方法public string GetName();

首先,我创建一个体现这些服务的界面:

public interface IService
{
    string GetName();
}

现在,如果您可以直接修改服务代码,则可以直接在服务上实现此接口,或者您可以继承服务并实现此接口。我将假设您的服务不在您的控制之下并且是密封的。所以我会实现两个包装器(或外观)类。

public class ServiceOldWrapper : IService
{
    private ServiceOld _inner = new ServiceOld();
    public string GetName()
    {
        return _inner.GetName();
    }
}

public class ServiceNewWrapper : IService
{
    private ServiceNew _inner = new ServiceNew();
    public string GetName()
    {
        return _inner.GetName();
    }
}

现在我可以写工厂类了。

public class ServiceFactory
{
    public IService CreateService()
    {
        if (configValueThatYouNeedToRead == "Old")
        {
            return new ServiceOldWrapper();
        }
        else
        {
            return new ServiceNewWrapper();
        }
    }
}

现在调用它变得很简单:

var sf = new ServiceFactory();
var s = sf.CreateService();
var name = s.GetName();

您可能需要比我更好地处理清理服务,因此您的代码会更复杂,但这应该可以让您开始。