Я выполняю вызов клиентской веб-службы к веб-службе SOAP, реализованной с использованием .NET.
Я использовал предоставленный WSDL и доволен тем, что отправляю, например:
POST /publicws/query.asmx HTTP/1.1
Host: www.blablabla.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.blablabla.com/WebServices/Query"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Query xmlns="http://www.blablabla.com/WebServices/Query"> <- <Query> tag #1
<string_XML>
<Query> <- <Query> tag #2
<Param1>param1value</Param1>
<Param2>param2value</Param2>
</Query>
</string_XML>
</Query>
</soap:Body>
</soap:Envelope>
Но я получаю сообщение об ошибке:
<faultcode>soap:Client</faultcode>
<faultstring>Server was unable to read request. --> There is an error in XML document (6, 2). --> 'Element' is an invalid node type. Line 6, position 2.</faultstring>
Однако, отправив следующее сообщение (закодированное в html-код), оно успешно выполняется:
[...]
<Query xmlns="http://www.blablabla.com/WebServices/Query">
<string_XML>
<Query><Param1>param1value</Param1><Param2>param2value</Param2></Query>
</string_XML>
[...]
Обратите внимание, что при добавлении CDATAвокруг тега # 2 также успешно.
Исправление, описанное выше, мне кажется довольно грязным.
Мой вопрос касается серверной стороны.
Я думал, что маршрутизациябыло выполнено с использованием действия SOAP, и тело SOAP должно содержать только данные, относящиеся к бизнесу.
Однако, в моем случае, похоже, это не работает так:
-Тэг запроса существует дважды(Наверное, слишком много раз)
-А тега string_XML для бизнеса определенно не существует
[...]
<Query xmlns="http://www.blablabla.com/WebServices/Query"> <- <Query> tag #1 useless ?
<string_XML> <- useless ?
&Query&... <- <Query> tag #2 should be pure xml ?
[...]
И тег Query # 1, и тег string_XML кажутся совершенно бесполезными с точки зрения бизнеса.
Почему я не мог простои чистый XML в теле SOAP?
Существует ли первая служба, которая анализирует запрос до string_XML, а затем передает содержимое в другой фрагмент кода, который обрабатывает бизнес?
Какая архитектура за сценой отвечает за это??
Заранее спасибо за помощь,
Николас.