Präfix SOAP XML Stattdessen direkter Namespace

Ich arbeite mit einem unserer Partner zusammen, um unsere Geschäftsservices zu integrieren. Ich verwende WCF (.Net 3.5), um mit dem Partner-Webdienst zu kommunizieren. Ich denke, Partner-Web-Service ist in Java geschrieben.

Mit SVC util habe ich eine Proxy-Klasse generiert. Statt des DataContract-Serializers verwendete svcutil den xmlserializer. Die vom Partner bereitgestellte WSDL und die SOAP-XML der Webdienstantwort stimmen jedoch nicht überein. Da der Partner nicht daran interessiert ist, die WSDL zu ändern, habe ich die heruntergeladene WSDL manuell geändert, um sie an die Antwort anzupassen. Dieses Problem wurde behoben.

Jetzt stoße ich auf ein anderes Problem. Wenn ich eine Anfrage an den Webdienst sende, ist diese immer fehlgeschlagen. Dann habe ich fiddler verwendet, um die SOAP-Anfrage an den Partner weiterzuleiten. Partner sagte, dass die von der Anfrage gesendeten XML-Namespaces nicht auf ihren Systemen validiert werden. Sie antworteten auch mit einer SOAP-Musteranfrage.

Durch den Vergleich der beiden Anforderungen sehen die Namespaces korrekt aus. Partner-XML verwendet die Präfixe jedoch, um die Namespaces zu definieren, und Elemente erhalten ein Präfix. Während XML auf unserer Seite keine Präfixe hat, werden die Namespaces direkt im übergeordneten Element verwendet.

Hier ist das XML, das wir gesendet haben

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

Hier ist das XML-Beispiel, das der Partner von uns erwartet hat

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

Wenn Sie beide XML vergleichen, wird der Namespacehttp://www.ACORD.org/standards/PC_Surety/ACORD1/xml/ wird "acd" in partner xml vorangestellt, unsere nicht. Der Partner wollte, dass wir in diesem Format senden.

Ich denke, Partner Xml folgt nicht den Standards. Das ist wirklich ein Partnerproblem. Aber ich hatte keine Option mehr und musste das XML auf meiner Seite ändern.

Obwohl wir die Serialisierung im WCF-Dienst anpassen konnten, bin ich nicht sicher, ob es möglich ist, das Präfix auf dieser Ebene zu ändern. Außerdem bin ich mir nicht sicher, ob das Partner-XML den XSD-Standards entspricht.

Ich würde es begrüßen, wenn Sie die WCF-Serialisierung an die oben genannten Änderungen anpassen könnten.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage