Префикс SOAP XML вместо прямого пространства имен

Я работаю с одним из наших партнеров по интеграции наших бизнес-услуг. Я использую WCF (.Net 3.5) для связи с партнерским веб-сервисом. Я думаю, что партнерский веб-сервис написан на Java.

Используя утилиту SVC, я создал прокси-класс. Вместо сериализатора DataContract, svcutil использовал xmlserializer. Но WSDL, предоставленный партнером, и ответ веб-службы SOAP xml не совпадает. Поскольку партнер не заинтересован в изменении wsdl, я изменил загруженный WSDL вручную, чтобы соответствовать ответу. Эта проблема была исправлена.

Сейчас я сталкиваюсь с другой проблемой. Когда я отправляю запрос в веб-сервис, он всегда терпит неудачу. Затем я использовал fiddler для отправки SOAP-запроса партнеру. Партнер сказал, что пространства имен xml, отправленные по запросу, не соответствуют их системам. Они также ответили с примером запроса SOAP.

Сравнивая оба запроса, пространства имен выглядят правильно. Но партнер xml использует префиксы для определения пространств имен, а элементы имеют префикс. В то время как xml на нашей стороне не имеет префиксов, вместо этого используются пространства имен непосредственно в родительском элементе.

Вот XML, который мы отправили

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <iL21stCentRq xmlns="http://schemas.WebServiceProvider.com/us/ileads/messages/Servicing">
        <ACORD xmlns="http://schemas.WebServiceProvider.com/us/ileads/types/Servicing">
            <SignonRq xmlns="http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/">
                <SignonPswd>
                    <CustId>
                        <SPName>111</SPName>
                    </CustId>
                </SignonPswd>
            </SignonRq>
        </ACORD>
    </iL21stCentRq>
</s:Body>

Вот пример XML, который партнер ожидал от нас

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:stc="http://schemas.WebServiceProvider.com/us/ileads/messages/Servicing" xmlns:stc1="http://schemas.WebServiceProvider.com/us/ileads/types/Servicing" xmlns:acd="http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/">
<soapenv:Header/>
<soapenv:Body>
    <stc:iL21stCentRq>
        <stc:input>
            <stc1:ACORD>
                <acd:SignonRq>
                    <acd:SignonPswd>
                        <acd:CustId>
                            <acd:SPName>yourcompany.com</acd:SPName>
                        </acd:CustId>
                    </acd:SignonPswd>
                </acd:SignonRq>
            </stc1:ACORD>
        </stc:input>
    </stc:iL21stCentRq>
</soapenv:Body>

Если вы сравните оба XML, пространство именhttp://www.ACORD.org/standards/PC_Surety/ACORD1/xml/ с префиксом «acd» в партнерском xml нашего нет. Партнер хотел, чтобы мы отправили в этом формате.

Я думаю, что Partner Xml не соответствует стандартам. Это действительно партнерская проблема. Но у меня не было выбора, и мне пришлось сменить XML на моей стороне.

Хотя мы могли бы настроить сериализацию в службе WCF, я не уверен, что можно изменить префикс на этом уровне. Более того, я не уверен, что Partner Xml соответствует стандартам XSD.

Если бы вы могли помочь изменить сериализацию WCF в соответствии с вышеуказанными изменениями, я был бы признателен.

Ответы на вопрос(1)

Ваш ответ на вопрос