2011-04-29 89 views
0

可能重复:
WCF wrap proxy clientWCF包的客户端(静态方法,其包裹服务方法调用)

我在服务很多web方法在我的项目使用客户端应用程序。

我不想写代码是这样的:

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

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

+0

您未注册的账户合并,你现在有你原来的问题的控制。 – 2011-09-01 18:41:55

回答

0

如果您愿意,您可以编写一个Singleton实现,它包装所有客户端操作并在内部维护一个初始化的客户端。

然后,将您想要的方法公开为单例类的静态成员。由于大部分过载都是代理的创建(合同加载,绑定初始化和客户端设置),所以这带来了加速服务通信的额外好处。

+0

但是如何处置呢?请致电 – Yury 2011-04-29 11:42:00

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)); 
+0

后关闭客户频道好主意!谢谢! – Yury 2011-04-29 11:44:24

+0

顺便说一句。这种配置代理不应该使用:http://weblogs.asp.net/cibrax/archive/2009/06/26/disposing-a-wcf-proxy.aspx – 2011-04-29 11:49:59

+0

@Ladislav Mrnka,好点。代码可以很容易地用来代替'using'语句来简单地处理通道。 – 2011-04-29 11:54:30

相关问题