Alf*_*son 15 .net asp.net soap web-services exception
我有一个简单的Web服务操作,如下所示:
[WebMethod]
public string HelloWorld()
{
throw new Exception("HelloWorldException");
return "Hello World";
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个客户端应用程序,它使用Web服务,然后调用该操作.显然会抛出异常:-)
try
{
hwservicens.Service1 service1 = new hwservicens.Service1();
service1.HelloWorld();
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
Run Code Online (Sandbox Code Playgroud)
在我的catch-block中,我想要做的是提取实际异常的Message以在我的代码中使用它.捕获的异常是一个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 ---
Run Code Online (Sandbox Code Playgroud)
......而且InnerException
是null
.
我想要做的是提取(我的样本中的文本)的Message
属性,任何人都可以帮助吗?如果你可以避免它,请不要建议解析的属性.InnerException
HelloWorldException
Message
SoapException
不幸的是,我不认为这是可能的.
您在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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是可能的!
服务操作示例:
try
{
// do something good for humanity
}
catch (Exception e)
{
throw new SoapException(e.InnerException.Message,
SoapException.ServerFaultCode);
}
Run Code Online (Sandbox Code Playgroud)
使用服务的客户端:
try
{
// save humanity
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Run Code Online (Sandbox Code Playgroud)
只是一件事 - 您需要在(服务项目的)web.config 中设置 customErrors mode='RemoteOnly' 或 'On'。
关于 customErrors 发现的积分 - http://forums.asp.net/t/236665.aspx/1
归档时间: |
|
查看次数: |
11889 次 |
最近记录: |