可以在IClientChannel代理上调用Abort()会抛出异常吗?

Ela*_*lan 5 wcf proxy abort wcf-client

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

MyServiceClient proxy = null;
try {
    proxy = new MyServiceClient();
    proxy.DoSomething();
    proxy.Close();
} catch (Exception ex) {
    if (proxy != null)
        proxy.Abort();
}
Run Code Online (Sandbox Code Playgroud)

是否有可能调用Abort()自己抛出异常?对Abort()的调用应该在自己的try/catch中吗?

mar*_*c_s 4

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

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

马克

  • 如果您没有在上面的 catch 块中的通道上调用 abort 会发生什么? (3认同)
  • 客户端和服务器之间的通道不会正确关闭和处置,因此您的系统中可能会存在未使用的通道。最终,它会被垃圾收集——但这需要一些时间,在那之前,它会毫无用处地耗尽系统资源。 (3认同)