Добрый день.
Занимаюсь сопряжением стороннего маршрутизатора XML сообщений с программой, написанной на Fox Pro. Изучив ваши статьи на тему WebService, пришёл к выводу что это единственная возможная реализация задачи.
Были созданы ВебСервисы с несколькими методами. Всё было сделано по вашим инструкциям. При вызове методов из командной строки данные можно и передавать, и получать. Всё как и нужно... дальше возникла проблема именно сопряжения стороннего маршрутизатора XML сообщений.
Запустил утилиту перехвата SOAP сообщений MSSoapT, устанавливающуюся вместе с FoxPro, и изучил сообщения, которые проходят к ВебСервисам и обратно.
Если делать вызов, допустим метода "test", то получаем вот такое сообщение запроса:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
- <SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> - <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAPSDK4:test xmlns:SOAPSDK4="http://tempuri.org/WS_MES_SERVER/message/" />
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
И вот такое сообщение ответа:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
- <SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> - <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> - <SOAPSDK4:testResponse xmlns:SOAPSDK4="http://tempuri.org/WS_MES_SERVER/message/"> </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Насколько я понял, данные ответа лежат в теге Result. Если на вывод данных готовить xml сообщение заранее оформленной структуры... оно находится там-же.
Дальше - хуже. Настраиваю маршрутизатор на работу с ВебСервисами (прописываю адрес ВебСервисов: http://MyHost:8080/ws_server/ws_mes_server.WSDL). Запускаю тест сервиса в машрутизаторе, и получаю ошибку. В утилите MSSOapT вижу следующие запросы:
<?xml version="1.0" ?>
- <MESSAGE DTD="XMLMSG" VERSION="1.0"> <REQUEST NAME="TEST" DTD="" VERSION="" ID="1" />
</COMMAND>
</MESSAGE>
И соответственно ответ ВебСервисов, которые не знают что дальше делать с таким сообщением:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
- <SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> - <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <faultcode>SOAP-ENV:Server</faultcode>
<faultstring>An unanticipated error occurred during the processing of this request.</faultstring>
<faultactor>SoapAction could not be retrieved from the request</faultactor>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Каким образом можно запустить обработку заранее известного xml-сообщения от маршрутизатора на стороне веб-сервисов и выдать правильно-сформированное xml-сообщение без лишней технической информации о SOAP схемах и лишних тегах примерно в вот таком виде:
<?xml version="1.0" encoding="UTF-8" ?>
- <MESSAGE DTD="XMLMSG" VERSION="1.0"> - <RESPONSE NAME="TEST" DTD="" VERSION="" VENDOR="1"> </RESULT>
</MESSAGE>