c#如何在客户端管理wcf服务代理生命周期?

时间:2013-09-23 13:11:40

标签: c# .net wcf service client

我编写了一个带有一些常规功能的WCF服务(添加用户,删除,搜索,更新......)。此功能的实现在实体框架中(使用sql DB)。

现在我想在客户端使用它。 我有一些基本问题:

  1. 我在客户端调用了很多WCF方法 - 每次调用时我都应该尝试捕获吗?
  2. 每次我想调用一个方法时,例如AddUser(用户用户),我需要创建一个我的服务实例,如:

    WcfService client = new WcfService();
    client.AddUser(user);
    

    在另一个地方我写道:

    WcfService client = new WcfService(); //Again making a new instance...
    client.UpdateUser(user);
    
  3. 我应该为我的wcf服务的所有应用程序创建一个实例吗? 或者每次在调用方法之前创建一个新实例? (如上例所示)。

    非常感谢!

2 个答案:

答案 0 :(得分:6)

在许多情况下,您希望重用相同的客户端代理,因为此连接方法可以产生最佳性能。如果您使用具有较高初始安全协商成本的安全功能,则重用相同的代理会特别有用。注意:在使用之前,您确实需要检查客户端代理的状态。

如果不能重用相同的客户端代理,则考虑使用使用缓存的ChannelFactory代理。

以下链接提供了一个很好的解释以及最佳做法建议: http://blogs.msdn.com/b/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx

答案 1 :(得分:4)

(i)您可以为服务创建一次实例,并在需要进行方法调用时使用同一客户端。如果要中止或关闭连接,则需要每次创建。

(ii)如果在每种方法中使用try catch方法会更好,因此很容易关闭连接并识别异常。