在静态类中封装WCF代理

时间:2011-06-24 09:11:22

标签: wcf .net-3.5 proxy encapsulation

我正在设计一个Web服务,它将根据给定对象的属性(例如“请求”)调用不同的外部Web服务。通过Visual Studio 2008中的“添加Web引用”菜单添加对这些Web服务的引用,如您所知,该菜单为从System.ServiceModel.ChannelBase<ISomeInterface>继承的每个端点创建代理类(其中ISomeInterface为由特定服务的WSDL定义的端点。

问题是我想将所有代理封装在单个ServiceManager(例如)静态类中,例如,包含所有代理的内部列表,这样,一方面,对给定服务的所有呼叫都可以通过ServiceManager而不是分散在主应用程序周围,另一方面,可以通过简单的方式使ServiceManager知道可以添加的新服务。添加对新代理类的引用。

我想过要ServiceManager喜欢

public static class ServiceManager
{
    #region Properties

    public static Dictionary<string, TProxy> ServiceList { get; private set; }

    #endregion
}

但我不知道应该替换TProxy,以便可以使用ServiceManager.ServiceList["ServiceName"]调用所有不同的代理。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

由于每个服务实现不同的接口,因此它必须是对象...除非您可以创建公共基本接口,否则使代理继承该接口,然后创建List&lt; MyBaseInterface&gt;。

为什么你不能在每个代理的班级上拥有一个属性?至少那时你可以用强类型的方式访问代理。

答案 1 :(得分:2)

不要重复使用代理。重新实例化它们。用于区分代理的魔术字符串同样很糟糕。

最好使用返回服务代理的静态工厂而不是只保留一个实例。

这样的事情:

public static class ServiceFactory
{
    public static Proxy CreateProxy();
    public static Proxy2 CreateProxy2();
    // etc.
}