Prefix SOAP XML Zamiast bezpośredniej przestrzeni nazw

Pracuję z jednym z naszych partnerów, aby zintegrować nasze usługi biznesowe. Korzystam z WCF (.Net 3.5) do komunikowania się z usługą internetową partnera. Myślę, że partnerski serwis internetowy jest napisany w Javie.

Używając SVC util wygenerowałem klasę proxy. Zamiast serializatora DataContract, svcutil użył xmlserializera. Ale WSDL dostarczony przez partnera i odpowiedź usługi SOAP xml nie pasuje. Ponieważ partner niezainteresowany zmianą kodu WSDL, ręcznie zmieniłem pobrany WSDL, aby dopasować odpowiedź. Ten problem został rozwiązany.

Teraz napotykam na inny problem. Gdy wysyłam żądanie do usługi internetowej, zawsze nie powiodło się. Następnie użyłem skrzypka, aby przesłać żądanie SOAP do partnera. Partner powiedział, że przestrzenie nazw xml wysłane przez żądanie nie sprawdzają poprawności ich systemów. Odpowiedzieli również przykładowym żądaniem SOAP.

Porównując oba żądania, przestrzenie nazw wyglądają poprawnie. Ale partner xml używa przedrostków do definiowania przestrzeni nazw i elementów jest poprzedzony prefiksem. Podczas gdy xml po naszej stronie nie ma przedrostków, zamiast tego używał przestrzeni nazw bezpośrednio w elemencie macierzystym.

Oto XML, który wysłaliśmy

<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>

Oto przykładowy XML oczekiwany przez partnera

<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>

Jeśli porównasz obydwa XML, przestrzeń nazwhttp://www.ACORD.org/standards/PC_Surety/ACORD1/xml/ jest poprzedzony przez „acd” w partnerze xml nasz nie. Partner chciał, abyśmy wysłali w tym formacie.

Myślę, że Partner Xml nie przestrzega standardów. To naprawdę problem z partnerem. Nie miałem jednak żadnej opcji i musiałem zmienić Xml po mojej stronie.

Chociaż możemy dostosować serializację w usłudze WCF, nie jestem pewien, czy możliwe jest zmienianie prefiksu na tym poziomie. Ponadto nie jestem pewien, czy Partner Xml przestrzega standardów XSD.

Jeśli mógłbyś wskazać, jak zmodyfikować serializację WCF, aby uwzględnić powyższe zmiany, byłbym wdzięczny.

questionAnswers(1)

yourAnswerToTheQuestion