捕获SOAP故障并处理异常

6
我正在使用一个Web服务。当我调用某些方法时,会抛出异常,因为参数是无效的值,例如。我想处理这些异常,但它们不包含任何数据信息,只有消息“Bad Request”。这是我的HTTP响应: enter image description here
        try
        {
            var data = client.SomeMethod(4);
        }
        catch (Exception exception)
        {
            // exception.Message = Bad Request
            // exception don't contains any more data information
        }   

我该如何捕获其他信息?

3个回答

7

2
我假设这是一个WCF Web服务?你捕获了过于宽泛的异常。尝试使用FaultException<TDetail>
典型的部署服务使用FaultContractAttribute来正式指定客户端可以在操作的正常过程中收到的所有SOAP故障。FaultContractAttribute中的错误信息出现在FaultException (其中typeparameter是操作FaultContractAttribute中指定的可序列化错误对象) 到达客户端应用程序时。 FaultContractAttribute可用于为双向服务方法和异步方法对指定SOAP故障。
因为FaultException既是FaultException,也是CommunicationException,所以在捕获指定的SOAP故障时,请确保先捕获FaultException类型,再捕获FaultException和CommunicationException类型,或在这些异常处理程序中处理指定的异常。

我不知道FaultException<TDetail>,然而我无法捕获任何FaultExecption,只有CommunicationException,但它没有任何信息。我没有创建这个服务。 - Alexander Leyva Caro

0
你可以像下面这样使用try-catch。然后你就可以访问其他信息了。你必须找到"TDetail"。它是由网络服务提供的。
catch(FaultException<TDetail> ex)
{
    ex.Code.ToString();
    ex.Reason.ToString();
}

其他方式。

FaultException faultException = (FaultException)ex;
MessageFault msgFault = faultException.CreateMessageFault();
XmlElement elm = msgFault.GetDetail<XmlElement>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接