【问题标题】:Can calling Abort() on an IClientChannel proxy throw an exception?在 IClientChannel 代理上调用 Abort() 会引发异常吗?
【发布时间】: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 的代理。

标签: wcf proxy wcf-client abort


【解决方案1】:

不,Abort 不会失败(但 .Close() 或 .Dispose() 可能)。调用 .Abort() 是终止通道的“大锤”方法 - 无论正在进行的消息处理如何,它都会被拆除。

请谨慎使用 - 例如在调用 .Close() 失败时出现异常捕获情况。这才是它的真正目的和正确用途。

马克

【讨论】:

  • 如果在上面的 catch 块中没有在通道上调用 abort 会发生什么?
  • 客户端和服务器之间的通道不会正确关闭和处理,因此您可能会在系统中徘徊未使用的通道。最终,它会被垃圾收集 - 但这需要一些时间,在此之前,它会无用地耗尽系统资源。
  • 您有任何引用来支持此声明吗?我想确保 Abort 在任何情况下都不会抛出任何异常。
  • @ScottLerch:参见MSDN documentation on ChannelFactory.Abort - 它没有列出任何可能引发的异常
猜你喜欢
  • 1970-01-01
  • 2018-11-11
  • 2018-06-02
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多