WCF包装客户端(包装服务方法调用的静态方法)

时间:2011-04-29 11:29:59

标签: c# wcf wcf-client

  

可能重复:
  WCF wrap proxy client

我项目中的服务中有很多使用客户端应用程序的Web方法。

我不想写这样的代码:

 using(ServiceClient sc = new ServiceClient())
    {
         //Invoke service methods        
         sc.Method1();
    }

而不是,我想写:ServiceClient.Method1(); (例如) - 在这种情况下,所有引用代理的常见操作(初始化,调用方法,处理,异常处理)都将在ServiceClient中。当然,我可以用类似的代码包装我的任何web方法,或者使用反射来按名称检索方法,但是可能还有其他方法吗?

2 个答案:

答案 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实现,并在内部维护一个初始化的客户端。

然后,将您想要的方法公开为单例类的静态成员。这有加速服务通信的额外好处,因为大多数重载是代理的创建(合同加载,绑定初始化和客户端设置)。