Как я могу вернуть исключения из веб-службы? - PullRequest
4 голосов
/ 05 октября 2010

Я написал простое приложение веб-службы в 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, но ничего не получалось.

1 Ответ

0 голосов
/ 06 октября 2010

В итоге я исправил метод TOPToSoapDomConvert.MakeFault.Есть ли лучшее решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...