在 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 可疑转换

wcf第4步之原生调用简单封装

为啥“findById()”在同一实体上调用 getOne() 后返回代理?

Angular - 连接到代理服务器并获得响应,但随后在其他时间有效的 api 调用上显示错误

Java 后台性能优化简要

Privoxy搭建代理服务器