[英]Handling WCF exceptions/faults along with FaultException AND IErrorHandler
[英]Capturing SOAP faults and handling exceptions
我正在使用Web服务。 一些方法在我调用时抛出异常,因为参数是无效的值,例如。 我想处理异常,但它不包含任何数据信息,只包含消息“Bad Request”。 这是我的http响应:
try
{
var data = client.SomeMethod(4);
}
catch (Exception exception)
{
// exception.Message = Bad Request
// exception don't contains any more data information
}
我如何捕获其他信息
当http状态代码为2xx或5xx而非4xx时,您可以使用FaultException
捕获异常。 您可以使用System.ServiceModel.ProtocolException
捕获http状态代码4xx,然后从InnerException
获取流并解析它或从此流中获取FaultException。 有关详细信息,请参阅http://blogs.msdn.com/b/nathana/archive/2011/03/31/deciphering-a-soap-fault-with-a-400-status-code.aspx 。
我假设这是一个WCF Web服务? 你正在接受广泛的例外。 尝试使用FaultException<TDetail>
。
典型的已部署服务使用FaultContractAttribute正式指定客户端可以在正常操作过程中接收的所有SOAP错误。 FaultContractAttribute中的错误信息在到达客户端应用程序时显示为FaultException(其中typeparameter是操作的FaultContractAttribute中指定的可序列化错误对象)。 FaultContractAttribute可用于为双向服务方法和异步方法对指定SOAP错误。
因为FaultException既是FaultException又是CommunicationException,要捕获指定的SOAP错误,请确保在FaultException和CommunicationException类型之前捕获FaultException类型,或者在其中一个异常处理程序中处理指定的异常。
您可以使用如下所示的try-catch。 然后您可以访问其他信息。 你必须找到“TDetail”。 它由Web服务提供。
catch(FaultException<TDetail> ex)
{
ex.Code.ToString();
ex.Reason.ToString();
}
另一种方式。
FaultException faultException = (FaultException)ex;
MessageFault msgFault = faultException.CreateMessageFault();
XmlElement elm = msgFault.GetDetail<XmlElement>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.