如何从Web服务返回异常?

时间:2010-10-05 13:26:34

标签: web-services delphi exception soap

我使用THTTPSoapDispatcher和THTTPSoapPascalInvoker在Delphi中编写了一个简单的web服务应用程序。一切正常,除了我不明白如何处理异常。因此,只要在服务方法内发生异常,就会生成以下SOAP响应:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
 <SOAP-ENV:Body>
  <SOAP-ENV:Fault>
  <faultactor/>
   <faultcode>SOAP-ENV:Server</faultcode>
   <faultstring>Error Message</faultstring>
  </SOAP-ENV:Fault>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

没有有用的异常消息或错误代码。

如何以响应包含异常信息的方式处理异常?

修改

关于这个问题的更多信息。要将异常转换为正确的SOAP响应,它应该是ERemotableException或此异常类的后代。问题是TSoapPascalInvoker(实际上是TOPToSoapDomConvert)无法生成正确的XML。根据soap模式,元素faultactor,faultcode,faultstring的顺序很重要,TOPToSoapDomConvert将它们放在错误的顺序中:

<faultactor/>
<faultcode>SOAP-ENV</faultcode>
<faultstring>This is my Error Message</faultstring>

预计

<faultcode>SOAP-ENV</faultcode>
<faultstring>This is my Error Message</faultstring>
<faultactor/>

我尝试过TOPToSoapDomConvert选项的不同组合但没有任何效果。

1 个答案:

答案 0 :(得分:0)

我最终通过修复方法TOPToSoapDomConvert.MakeFault。有更好的解决方案吗?