我正在设计一个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"]
调用所有不同的代理。有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
由于每个服务实现不同的接口,因此它必须是对象...除非您可以创建公共基本接口,否则使代理继承该接口,然后创建List&lt; MyBaseInterface&gt;。
为什么你不能在每个代理的班级上拥有一个属性?至少那时你可以用强类型的方式访问代理。
答案 1 :(得分:2)
不要重复使用代理。重新实例化它们。用于区分代理的魔术字符串同样很糟糕。
最好使用返回服务代理的静态工厂而不是只保留一个实例。
这样的事情:
public static class ServiceFactory
{
public static Proxy CreateProxy();
public static Proxy2 CreateProxy2();
// etc.
}