Я написал простое приложение веб-службы в Delphi с использованием THTTPSoapDispatcher и THTTPSoapPascalInvoker. Все работает хорошо, за исключением того, что я не понимаю, как обрабатывать исключения. Поэтому, когда в методе службы возникает исключение, генерируется следующий ответ 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>
Нет полезного сообщения об исключении или кода ошибки.
Как мне обрабатывать исключения таким образом, чтобы ответ содержал информацию об исключении?
EDIT:
Немного подробнее об этой проблеме. Чтобы исключение было преобразовано в правильный ответ SOAP, оно должно быть либо ERemotableException, либо потомком этого класса исключений. Проблема в том, что TSoapPascalInvoker (на самом деле TOPToSoapDomConvert) не может сгенерировать правильный XML. Согласно мыльной схеме порядок элементов 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, но ничего не получалось.