2

我正在从基于 C# 表单的应用程序调用 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

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

4

1 回答 1

3

可以从 Web 服务调用中引发的异常的完整列表是如此之多,以至于我真的不认为测试每种可能的异常类型是一个好主意。在许多情况下,捕获可能包含通过SOAP 故障元素传输的一些业务错误的 SoapException 就足够了,并且所有其他异常都可以被视为未处理的错误:

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();
}

这是一篇很好的文章,解释了如何引发和处理 SoapExceptions。

于 2009-01-21T19:01:05.367 回答