C# 如何从web服务捕获抛出的soap异常?
我成功地在web服务中抛出了一些soap异常。我希望捕获异常并访问异常调用的字符串和ClientFaultCode。以下是我在web服务中的一个例外示例:C# 如何从web服务捕获抛出的soap异常?,c#,soap,service,exception,C#,Soap,Service,Exception,我成功地在web服务中抛出了一些soap异常。我希望捕获异常并访问异常调用的字符串和ClientFaultCode。以下是我在web服务中的一个例外示例: throw new SoapException("You lose the game.", SoapException.ClientFaultCode); 在我的客户机中,我尝试从可能引发异常的web服务运行该方法,并捕获它。问题是我的挡块没有任何作用。请参见此示例: try { service.StartGame(); } ca
throw new SoapException("You lose the game.", SoapException.ClientFaultCode);
在我的客户机中,我尝试从可能引发异常的web服务运行该方法,并捕获它。问题是我的挡块没有任何作用。请参见此示例:
try
{
service.StartGame();
}
catch
{
// missing code goes here
}
如何访问通过抛出的异常调用的字符串和ClientFaultCode?捕获
SoapException
实例。这样,您就可以访问其信息:
catch (SoapException soapEx)
{
//Do something with soapEx
}
try {
service.StartGame();
} catch (SoapException e) {
// The variable 'e' can access the exception's information.
}
您可能希望捕获特定的异常
try
{
service.StartGame();
}
catch(SoapHeaderException)
{
// soap fault in the header e.g. auth failed
}
catch(SoapException x)
{
// general soap fault and details in x.Message
}
catch(WebException)
{
// e.g. internet is down
}
catch(Exception)
{
// handles everything else
}
为了确保Lou不会因为这个更改而破坏代码,他可以添加一个额外的块
catch(异常e)
。有时,异常可能不是SoapException
。。。e、 g.:OutOfMemoryException
,或连接问题,或线程中止等。这很好。不过,我有一个问题。如何找出字符串的真正名称,以便访问它?例如:e.GetString()或其他什么。对于这个特定的例子,我想访问字符串“You lose the game.”我可以调用e.Message,它返回一个很长的错误消息,但我只需要字符串消息。Louise,我不知道您的情况,但我想您可以创建继承自SoapException
的类,以及您需要的任何附加信息。然后在捕获之前为这些类添加捕获块,如下所述。Louise:e.Message
返回与传递给构造函数的字符串完全相同的字符串,我测试过。也许您使用了其他一些异常类,为您的消息添加了额外的信息?这并没有回答Louise的问题我一直在努力解决这个问题,创建一个包含错误消息的简单响应类是最好的选择。请参见此问题和答案: