我使用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选项的不同组合但没有任何效果。
答案 0 :(得分:0)
我最终通过修复方法TOPToSoapDomConvert.MakeFault。有更好的解决方案吗?