我有一个调用外部Web服务的程序,我希望向用户显示一个友好的对话框,例如服务器关闭,有人切断电缆等.假设以下代码
try { client.MyWebService() } catch(? ex) { // display friendly dialog explaining what went wrong }
我应该在代码中代替问号的什么例外?当一切工作顺利并且我无法控制外部部件时,很难真正测试这样的情况,因此有些见解会受到赞赏.
谢谢!
解决方法
首先要做的是利用代理上的.Fululted事件,你可以这样连接:
((ICommunicationObject)client).Faulted += new EventHandler(client_Faulted);
在client_Faulted事件处理程序中,您可以尝试重新连接,或转移到备份服务器,或禁用UI,记录错误或在那里显示消息.
将try-catch中的每个调用包装起来显然仍然是一个好习惯,但是.Faulted事件可以让你更早地处理大多数通道问题.
至于异常本身,您可以让您的服务抛出一个FaultException,它会通过您提供的详细信息传递回客户端.请参阅this blog posting的使用示例.
如果通道本身发生故障,您将不会获得FaultException(FaultException是服务器将其自身内部故障传达给客户端的一种方式).
对于通道故障,您可能会收到CommunicationException或TimeoutException.
最后,看看Codeplex上的this project,以生成异常处理WCF代理.它可以为您提供更灵活的处理故障的方法.