如何从ASP.NET中的soap异常中提取内部异常?

前端之家收集整理的这篇文章主要介绍了如何从ASP.NET中的soap异常中提取内部异常?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个这样简单的web服务操作:
[WebMethod]
    public string HelloWorld()
    {
        throw new Exception("HelloWorldException");
        return "Hello World";
    }

然后我有一个消费Web服务的客户端应用程序,然后调用该操作.显然会抛出异常:-)

try
    {
        hwservicens.Service1 service1 = new hwservicens.Service1();
        service1.HelloWorld();
    }
    catch(Exception e)
    {
        Console.WriteLine(e.ToString());
    }

在我的catch块中,我想做的是提取实际异常的消息在我的代码中使用它.捕获的异常是一个SoapException,这是很好的,但它的Message属性是这样的…

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Exception: HelloWorldException
   at WebService1.Service1.HelloWorld() in C:\svnroot\Vordur\WebService1\Service1.asmx.cs:line 27
   --- End of inner exception stack trace ---

…而InnerException为null.

我想做的是提取InnerException(我的示例中的HelloWorldException文本)的Message属性,任何人都可以帮助吗?如果可以避免,请不要建议解析SoapException的Message属性.

解决方法

不幸的是,我不认为这是可能的.

您在Web服务代码中提升的异常正在编码为Soap Fault,然后将其作为字符串传递回您的客户端代码.

您在SoapException消息中看到的仅仅是Soap错误中的文本,它不会被转换回异常,而只是存储为文本.

如果您希望在错误的条件下返回有用的信息,那么我建议从您的Web服务返回一个可以包含您的信息的“错误属性自定义类.

[WebMethod]
public ResponseClass HelloWorld()
{
  ResponseClass c = new ResponseClass();
  try 
  {
    throw new Exception("Exception Text");
    // The following would be returned on a success
    c.WasError = false;
    c.ReturnValue = "Hello World";
  }
  catch(Exception e)
  {
    c.WasError = true;
    c.ErrorMessage = e.Message;
    return c;
  }
}

猜你在找的asp.Net相关文章