【问题标题】:How do you catch a thrown soap exception from a web service?如何从 Web 服务中捕获抛出的肥皂异常?
【发布时间】:2010-12-20 19:01:07
【问题描述】:

我成功地在我的网络服务中抛出了一些肥皂异常。我想捕获异常并访问与异常一起调用的字符串和 ClientFaultCode。这是我在 Web 服务中的一个例外示例:

throw new SoapException("You lose the game.", SoapException.ClientFaultCode);

在我的客户端中,我尝试从可能引发异常的 Web 服务运行方法,然后我捕获了它。问题是我的 catch 块没有做任何事情。看这个例子:

try
{
     service.StartGame();
}
catch
{
     // missing code goes here
}

如何访问抛出异常时调用的字符串和 ClientFaultCode?​​p>

【问题讨论】:

  • 我一直在努力解决这个问题,创建一个带有错误消息的简单响应类是最好的选择。看到这个问答:stackoverflow.com/q/32058/945875

标签: c# soap service exception


【解决方案1】:

您可能想要捕获特定的异常。

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
}

【讨论】:

  • 这没有回答路易丝的问题
【解决方案2】:

捕获SoapException 实例。这样您就可以访问其信息:

try {
     service.StartGame();
} catch (SoapException e)  {
    // The variable 'e' can access the exception's information.
}

【讨论】:

  • 为了确保 Lou 不会因为此更改而破坏他的代码,他可能会添加一个额外的块 catch (Exception e)。有时异常可能不是SoapException...例如:OutOfMemoryException,或者连接问题,或者线程中止等。
  • 这很好用。但是,我有一个问题。如何找出真正调用的字符串以便访问它?例如:e.GetString() 什么的。对于这个特定的示例,我想访问字符串“你输了比赛”。
  • 我可以调用e.Message,它返回一个很长的错误信息,但我只想要字符串信息。
  • Louise,我不知道你的情况,但我想你可以创建继承自 SoapException 的类以及你需要的任何附加信息。然后为这些类添加捕获块之前按照此处所述进行捕获。
  • Louise: e.Message 返回 完全 与传递给构造函数的字符串相同的字符串,我测试过。也许您使用了其他一些异常类,为您的消息添加了额外的信息?
【解决方案3】:
catch (SoapException soapEx) 
{
  //Do something with soapEx
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多