Причины обрыва сообщения SOAP и дублирования заголовка? - PullRequest
0 голосов
/ 07 августа 2020

У меня есть веб-сервис, который делает SOAP запросов к нашему клиентскому серверу (у меня нет доступа к этому серверу и я не знаю, как реализованы методы веб-сервиса).

Код на нашем часть в последнее время не менялась и ранее работала нормально (и по-прежнему работает по большей части), но клиент сообщал, что многие наши запросы ежедневно не выполнялись в течение как минимум месяца из-за зарегистрированного «дублирующего XML объявления» внутри Data Power.

Сообщение SOAP, которое они получают, усекается (много данных отсутствует), а в конце XML дублируются начальные заголовки SOAP. Похоже, они получают сообщение частично, затем возникает какая-то ошибка, затем попробуйте повторно обработать его, и это снова не удается. В основном это выглядит примерно так:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
  <soapenv:Body>
    <sendData>
       <requestHeader>
         //PARTIAL INFORMATION INCLUDED HERE
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
  <soapenv:Body>
    <sendProspect xmlns="http://webservices.zurich.com/zsoa/fig/policyacquisition/prospectquote-v1_0">
      <requestHeader>

Что могло привести к усечению сообщения SOAP? Я думаю о какой-то ошибке связи между клиентом и сервером или, возможно, об изменениях веб-сервера, но мне было интересно, были ли у кого-то еще эти проблемы и мог ли он предложить некоторые предложения.

EDIT: добавлен полученный HTTP-заголовок от клиента:

POST <webservice> HTTP/1.1
http_racfid: <info>
SOAPAction: ""
MULE_ENCODING: UTF-8
Host: <hostInfo>
Connection: keep-alive
Accept: */*
Content-Type: text/xml
Content-Length: 41341

1 Ответ

0 голосов
/ 24 августа 2020

duplicate XML declaration в DataPower обычно происходит, когда у вас есть действие таблицы стилей в вашей политике обработки, которое не обнаруживает действительный XML и пытается «исправить» его. Это будет означать, что вы не получаете от сервера полный XML.

Включите Probe для службы и посмотрите на INPUT xml.

Вы также можете в домене default запустите захват пакетов, как предложено в комментариях, или запустите захват файлов, чтобы получать входящие сообщения. NB! И захват пакетов, и захват файлов сильно снижают производительность, так что вам не следует ' Не делайте это в среде массового производства!

Другой, менее навязчивый способ получить «настоящий» INPUT - это добавить действие GatewayScript непосредственно после действия Match, которое записывает INPUT в файл temporary:/// которую вы можете просмотреть. Это «безопаснее», так как хранилище temporary:/// само очищается ...

...