在 IClientChannel 代理上调用 Abort() 会引发异常吗?
Posted
技术标签:
【中文标题】在 IClientChannel 代理上调用 Abort() 会引发异常吗?【英文标题】:Can calling Abort() on an IClientChannel proxy throw an exception? 【发布时间】:2009-09-13 19:13:19 【问题描述】:根据文档和文章,如果遇到意外异常/故障,建议在客户端代理上调用 Abort()。请参阅以下内容(简化):
MyServiceClient proxy = null;
try
proxy = new MyServiceClient();
proxy.DoSomething();
proxy.Close();
catch (Exception ex)
if (proxy != null)
proxy.Abort();
调用 Abort() 本身是否有可能引发异常?对 Abort() 的调用是否应该在它自己的 try/catch 中?
【问题讨论】:
为什么你在这个sn-p中有一个空检查? 我的意思是将代理的实例化放在 try 块中。因此,空值检查以防实例化出现任何问题。可能有点矫枉过正,但向我保证我确实有 Abort 的代理。 【参考方案1】:不,Abort 不会失败(但 .Close() 或 .Dispose() 可能)。调用 .Abort() 是终止通道的“大锤”方法 - 无论正在进行的消息处理如何,它都会被拆除。
请谨慎使用 - 例如在调用 .Close() 失败时出现异常捕获情况。这才是它的真正目的和正确用途。
马克
【讨论】:
如果在上面的 catch 块中没有在通道上调用 abort 会发生什么? 客户端和服务器之间的通道不会正确关闭和处理,因此您可能会在系统中徘徊未使用的通道。最终,它会被垃圾收集 - 但这需要一些时间,在此之前,它会无用地耗尽系统资源。 您有任何引用来支持此声明吗?我想确保 Abort 在任何情况下都不会抛出任何异常。 @ScottLerch:参见MSDN documentation on ChannelFactory.Abort - 它没有列出任何可能引发的异常以上是关于在 IClientChannel 代理上调用 Abort() 会引发异常吗?的主要内容,如果未能解决你的问题,请参考以下文章
WCF ChannelFactory 转换接口到 IClientChannel 可疑转换
为啥“findById()”在同一实体上调用 getOne() 后返回代理?