可能重复:
WCF wrap proxy client
我项目中的服务中有很多使用客户端应用程序的Web方法。
我不想写这样的代码:
using(ServiceClient sc = new ServiceClient())
{
//Invoke service methods
sc.Method1();
}
而不是,我想写:ServiceClient.Method1(); (例如) - 在这种情况下,所有引用代理的常见操作(初始化,调用方法,处理,异常处理)都将在ServiceClient中。当然,我可以用类似的代码包装我的任何web方法,或者使用反射来按名称检索方法,但是可能还有其他方法吗?
答案 0 :(得分:1)
这样的静态方法怎么样:
public static TResult Execute<TResult>(Func<ServiceClient, TResult> proxy)
{
using (var client = new ServiceClient())
{
return proxy(client);
}
}
然后:
string result1 = Execute(proxy => proxy.Method1());
int result2 = Execute(proxy => proxy.Method2("some param", 123));
答案 1 :(得分:0)
如果您愿意,可以编写一个包含所有客户端操作的Singleton实现,并在内部维护一个初始化的客户端。
然后,将您想要的方法公开为单例类的静态成员。这有加速服务通信的额外好处,因为大多数重载是代理的创建(合同加载,绑定初始化和客户端设置)。