WCF客户端最佳实践

时间:2015-06-28 12:08:50

标签: c# performance wcf

在调用某些WCF操作时,我们面临超时问题。

我们没有明确关闭连接。这会导致这个问题吗?现场用户数量非常少,服务器上的maxconcurrentsession设置为150。

我们在客户端有20个调用服务的方法。我们是否需要在所有调用服务的方法上进行以下操作?

  1. 打开连接
  2. 致电服务
  3. 关闭连接
  4. 任何例外中止。
  5. 如果我们不关闭连接,WCF会自动关闭连接吗?

    感谢。

2 个答案:

答案 0 :(得分:0)

你应该做4步以上。

如果您没有关闭连接。任何时候服务遇到错误,你都不能在现有连接上调用服务。错误如:

  

通信对象System.ServiceModel.Channels.ServiceChannel,       不能用于通信,因为它处于Faulted状态。

参考最佳做法:http://www.codeproject.com/Articles/622989/WCF-and-the-Try-Catch-Abort-Pattern

答案 1 :(得分:-1)

WCF服务操作的默认值为sendTimeOut为1分钟。要增加它,您可以在编码或配置中设置此值。

来自here

  
      
  1. SendTimeout - 用于初始化OperationTimeout,它控制发送消息的整个过程,包括接收   回复消息,用于请求/回复服务操作。这个超时也是   从回调合同方法发送回复消息时适用。

  2.   
  3. OpenTimeout - 在未指定显式超时值时打开通道时使用

  4.   
  5. CloseTimeout - 在未指定显式超时值时关闭通道时使用

  6.   

您需要更新客户端以及服务器配置中的值(或者更新服务,然后更新客户端代理),如下所示,这会将所有超时值设置为10分钟。

<configuration>
<system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding openTimeout="00:10:00"
               closeTimeout="00:10:00"
               sendTimeout="00:10:00"
               receiveTimeout="00:10:00">
      </binding>
    </wsHttpBinding>
  </bindings>
</system.serviceModel>