加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 23:51:05 所属栏目:asp.Net 来源:网络整理
导读:我有一个这样简单的web服务操作: [WebMethod] public string HelloWorld() { throw new Exception("HelloWorldException"); return "Hello World"; } 然后我有一个消费Web服务的客户端应用程序,然后调用该操作.显然会抛出异常:-) try { hwservicens.Service
我有一个这样简单的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:svnrootVordurWebService1Service1.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;
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读