Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从web服务捕获抛出的soap异常?_C#_Soap_Service_Exception - Fatal编程技术网

C# 如何从web服务捕获抛出的soap异常?

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

我成功地在web服务中抛出了一些soap异常。我希望捕获异常并访问异常调用的字符串和ClientFaultCode。以下是我在web服务中的一个例外示例:

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的问题我一直在努力解决这个问题,创建一个包含错误消息的简单响应类是最好的选择。请参见此问题和答案: