关闭WCF连接(Closing WCF connection)

2019-07-17 12:12发布

我们正在使用WCF服务

在客户端,我们计划明确地关闭它似乎有结束的多于一个的方式连接

样本1:在WCF服务消费使用finally块

if (client.State == CommunicationState.Faulted)
{
  client.Abort();
}
client.Close();

因为如果服务处于故障状态,我们将无法调用close()

样品2:

using(ClientProxy proxy = new ClientProxy())
{   
  //call your service methods
}

在SAMPLE2我不知道,如果服务处于故障状态会发生什么,将它抛出错误关闭连接?

Answer 1:

使用“使用”块中的第二样品是不正确。 using块确保Dispose方法被称为代理对象上。 反过来Dispose方法调用Close方法将(尝试)连接时的通信状态发生故障,这将引发异常的服务。 所以,你的感受/直觉是绝对正确的。 如果代理Dispose方法从第一个样品使用的代码,但它并没有那么不使用using块这将是不错:)



Answer 2:

你手头所有必要的信息 - 生成的最佳实践使用和妥善关闭/中止所有的WCF客户端代理将是:

YourClientProxy clientProxy = new YourClientProxy();

try
{
   .. use your service
   clientProxy.Close();
}
catch(FaultException)
{
   clientProxy.Abort();
}
catch(CommunicationException)
{
   clientProxy.Abort();
}
catch (TimeoutException)
{ 
   clientProxy.Abort();
}

凤云的FaultException处理所有的情况下,当服务与错误条件responsded(因此您的频道处于故障状态),并会的CommunicationException处理所有可能发生的其他通信相关的异常,如网络连接等下降

与使用()块中的做法是行不通的,如果有异常发生在块,当Dispose()方法调用Close()方法在客户端代理的结束,因为,你有没有办法捕捉和处理那。



Answer 3:

在朱瓦尔·洛的优秀编程WCF的书 ,他建议:

try 
{
    ClientProxy clientProxy = new ClientProxy();
    clientProxy.SomeMethod();
    clientProxy.Close();
}
catch
{
    proxy.Abort();
}


Answer 4:

使用样品1

这里是为什么你不应该使用使用一个很好的文章:

http://msdn.microsoft.com/en-us/library/aa355056.aspx



文章来源: Closing WCF connection