2009-01-21 179 views
2

我正在从基于C#表单的应用程序调用Web服务。SoapHttpClientProtocol.Invoke方法的异常.NET web服务

ServReturnType obj = ServProxyClass(int i, int k); 

我有可能找回异常。例外情况可能是服务根本没有连接,接收失败,但是原始消息已经发送,或者两者之间有任何内容。然后,我需要根据所抛出的异常做出决定,无论是在类型还是在消息中,或者两者兼而有之,以便接下来执行两个操作之一。

try 
{  
    ServReturnType obj = ServProxyClass(int i, int k); 
} 
catch (WebException ex) 
{ 
    DoAction1(); 
} 
catch(SocketException ex) 
{ 
    DoAction2(); 
} 
catch(SoapException ex) 
{ 
    DoAction1() 
} 

问题是,我选择的后续操作取决于第一次调用是否在发生故障前将其发送到服务器。我如何找到所有可能的异常列表,以及它们可能的含义,因为这是框架中的所有代码。我查看了MSDN文档,并看到SoapHttpClientProtocol.Invoke可以抛出SoapException,但是有这种方法调用的方法可能会导致System.Net.WebExceptions无效。所以我需要一个整个调用堆栈的列表以及它可以抛出什么,以及这意味着什么。

任何想法?

更新1

达林,你的回答或多或少的证实了我的怀疑,我想没有什么意义。我选择先做更多的侦探工作,然后用它来决定下一步该做什么。不幸的是,在这种情况下,由于我们正在处理信用卡,所以确实发生了什么事情,以及我们是否发送了数据。

回答

3

可以从Web服务调用抛出的异常的完整列表非常广泛,我真的不认为测试每种可能的异常都是一个好主意。在许多情况下,这将是足以抓住了的SoapException其中可能包含通过发送一些企业错误​​SOAP Fault Element和所有其他异常可能会被视为非处理错误:

try 
{  
    ServReturnType obj = ServProxyClass(int i, int k); 
} 
catch(SoapException ex) 
{ 
    //Serialize and analyze the fault message from the exception to obtain more info. 
    DoSomethingWithTheInfo(); 
} 
catch(Exception ex) 
{ 
    LogTheExceptionSoThatLaterYouKnowWhatHappened(ex); 
    SayToTheUserThatSomethingTerriblyWrongHappened(); 
} 

这里是一个不错的article解释如何提高和处理SoapExceptions。