Wcf 在IClientChannel代理上调用Abort()会引发异常吗?

Wcf 在IClientChannel代理上调用Abort()会引发异常吗?,wcf,proxy,wcf-client,abort,Wcf,Proxy,Wcf Client,Abort,根据文档和文章,如果遇到意外的异常/错误,建议在客户端代理上调用Abort()。见下文(简化): 调用Abort()本身是否可能引发异常?如果对Abort()的调用在它自己的try/catch中?否,Abort不会失败(但是.Close()或.Dispose()可能会失败)。调用.Abort()是终止通道的“大锤式”方法——不管正在进行的消息处理如何,它都会被拆除 请小心使用它-例如,在调用.Close()失败的异常捕获情况下。这才是真正的目的和正确的使用 Marc如果在上面的catch块中没有

根据文档和文章,如果遇到意外的异常/错误,建议在客户端代理上调用Abort()。见下文(简化):

调用Abort()本身是否可能引发异常?如果对Abort()的调用在它自己的try/catch中?

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

请小心使用它-例如,在调用.Close()失败的异常捕获情况下。这才是真正的目的和正确的使用


Marc

如果在上面的catch块中没有对通道调用abort,会发生什么?客户端和服务器之间的通道不会正确关闭和处理,因此系统中可能会有一个未使用的通道。最终,它会被垃圾收集——但这需要一些时间,在那之前,它会将系统资源用于无用的目的。你有任何证据支持这一说法吗?我想确保Abort在任何情况下都不会抛出任何异常。@ScottLerch:请看-它没有列出任何可能抛出的异常。为什么在这个代码段中有空检查?我的意思是将代理的实例化放在try块中。因此,如果实例化出现任何问题,则执行空检查。可能有点过分了,但向我保证我确实有一个代理要中止。
MyServiceClient proxy = null;
try {
    proxy = new MyServiceClient();
    proxy.DoSomething();
    proxy.Close();
} catch (Exception ex) {
    if (proxy != null)
        proxy.Abort();
}