有效关闭WCF 4通道的正确方法
我使用以下方法关闭WCF 4通道。 这是正确的方法吗?
using (IService channel = CustomChannelFactory.CreateConfigurationChannel()) { channel.Open(); //do stuff }// channels disposes off??
虽然没有严格针对频道,但您可以这样做:
ChannelFactory channelFactory = null; try { channelFactory = new ChannelFactory (); channelFactory.Open(); // Do work... channelFactory.Close(); } catch (CommunicationException) { if (channelFactory != null) { channelFactory.Abort(); } } catch (TimeoutException) { if (channelFactory != null) { channelFactory.Abort(); } } catch (Exception) { if (channelFactory != null) { channelFactory.Abort(); } throw; }
这曾经是在WCF“早期”发布WCF客户端代理的普遍接受的方式。
然而事情发生了变化。 事实certificate, IClientChannel
因此,在catch
块中调用Close()
并不是一个好主意,因为如果发生exception,可能会留下一些未发布的资源。
新建议的方法是在catch
块中调用IClientChannel Close()
失败。 这是一个例子:
try { channel.DoSomething(); channel.Close(); } catch { channel.Abort(); throw; }
更新:
以下是对描述此建议的MSDN文章的引用。