Prefixo SOAP XML Em vez disso, namespace direto

Eu estou trabalhando com um de nossos parceiros para integrar nossos serviços de negócios. Eu estou usando o WCF (.net 3. 5) para se comunicar com o serviço da web do parceiro. Acho que o serviço da web do parceiro está escrito em Java.

Usando o utilitário SVC, gerou a classe de proxy. Em vez disso, serializador DataContract, o svcutil usava o xmlserializer. Mas o WSDL fornecido pelo parceiro e a resposta do serviço da Web SOAP xml não correspondem. Como o parceiro não está interessado em alterar o wsdl, alterei o WSDL baixado manualmente para corresponder à resposta. Esse problema foi corrigido.

Agora eu estou correndo em problema diferente. Quando envio uma solicitação para o serviço da Web, ela sempre falha. Então usei o violinista para encaminhar a solicitação SOAP ao parceiro. O parceiro disse que os namespaces xml enviados pela solicitação não valem em relação a seus sistemas. Eles também responderam com uma solicitação SOAP de amostra.

Ao comparar as duas solicitações, os namespaces parecem corretos. Mas o parceiro xml usa os prefixos para definir os namespaces e os elementos são prefixados. Considerando que o xml do nosso lado não tem prefixos, em vez disso, usou os namespaces diretamente no elemento pai.

Aqui está o XML que enviamos

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

Aqui está o XML de amostra que o parceiro esperava de nós

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

Se você comparar o XML, o namespacehttp://www.ACORD.org/standards/PC_Surety/ACORD1/xml/ é prefixado por "acd" no parceiro xml nosso não. O parceiro queria que enviássemos esse formato.

Acho que o Partner Xml não segue os padrões. Este problema realmente parceiro. Mas eu não tinha opção e precisava mudar o Xml do meu lado.

Embora pudéssemos personalizar a serialização no serviço WCF, não tenho certeza se é possível alterar o prefixo nesse nível. Além disso, não tenho certeza se o Xml do Parceiro está seguindo os padrões do XSD.

Se você pudesse orientar para modificar a serialização do WCF para acomodar as alterações acima mencionadas, eu agradeceria.

questionAnswers(1)

yourAnswerToTheQuestion