Мы создали веб-сервис с помощью Spring-WS и пытаемся получить к нему доступ из клиента С# .NET. служба работает нормально со всеми тестами, которые мы сделали с SoapUI и другими java-клиентами, но зависает в .NET.
Кажется, это проблема с пространствами имен.
Например, этот запрос работает, когда пространство имен объявлено только в теге конверта, и ни один элемент не имеет пространства имен или префикса в нем:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://mycompany.org/schemas">
<soapenv:Header/>
<soapenv:Body>
<authenticationRequest>
<username>user</username>
<password>password</password>
</authenticationRequest>
</soapenv:Body>
</soapenv:Envelope>
Однако этот, казалось бы, эквивалентный запрос НЕ работает:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://mycompany.org/schemas">
<soapenv:Header/>
<soapenv:Body>
<authenticationRequest xmlns="http://mycompany.org/schemas">
<username>user</username>
<password>password</password>
</authenticationRequest>
</soapenv:Body>
</soapenv:Envelope>
Обратите внимание, что в этом случае пространство имен снова объявляется в элементе authenticationRequest. Указанная ошибка заключается в том, что запрос не проверяется на соответствие схеме XML, жалуясь на то, что элемент «имя пользователя» не определен.
К сожалению, при добавлении ссылки на службу (а также веб-ссылки) в .NET код, сгенерированный wsdl.exe, всегда создает запрос во втором случае.
Может ли кто-нибудь объяснить, почему эти два фрагмента XML не эквивалентны, и как мы могли бы в клиенте C#...
- удалить объявление второго пространства имен?
- или добавить префикс пространства имен к каждому элементу в запросе?
- или добавить объявление пространства имен без префикса к каждому элементу?
Мы пытались несколько часов :(
Спасибо!