WCF Web服务调用 - 要捕获哪个异常?

Eyv*_*ind 6 c# wcf exception-handling

我有一个调用外部Web服务的程序,我想向用户提供一个友好的对话框,例如服务器关闭,有人切断电缆等.假设以下代码

try {
   client.MyWebService()
}
catch(? ex)
{
   // display friendly dialog explaining what went wrong
}
Run Code Online (Sandbox Code Playgroud)

我应该在代码中代替问号的什么例外?当一切工作顺利并且我无法控制外部部件时,很难真正测试这样的情况,因此有些见解会受到赞赏.

谢谢!

Chr*_*ham 6

首先要做的是利用代理上的.Fululted事件,你可以这样连接:

((ICommunicationObject)client).Faulted += new EventHandler(client_Faulted);
Run Code Online (Sandbox Code Playgroud)

在您的client_Faulted事件处理程序中,您可以尝试重新连接,或转移到备份服务器,或禁用UI,记录错误或在那里显示消息.

将try-catch中的每个调用包装起来显然仍然是一个好习惯,但是.Faulted事件可以让你更早地处理大多数通道问题.

至于异常本身,您可以使用您提供FaultException的详细信息将服务转移回客户端.在此博客文章中查看其使用示例.

如果通道本身发生故障,您将不会获得FaultException(FaultException是服务器将其自身内部故障传达给客户端的一种方式).

对于通道故障,您可能会得到一个CommunicationExceptionTimeoutException.

最后,看一下Codeplex 上的这个项目,用于生成异常处理WCF代理.它可以为您提供更灵活的处理故障的方法.