私はパートナーの 1 社と協力して、ビジネス サービスを統合しています。パートナー Web サービスとの通信に WCF (.Net 3.5) を使用しています。パートナーの Web サービスは Java で書かれていると思います。
SVC util を使用して、プロキシ クラスを生成しました。DataContract シリアライザーの代わりに、svcutil は xmlserializer を使用しました。しかし、パートナーが提供する WSDL と Web サービス応答の SOAP xml が一致しません。パートナーは wsdl の変更に関心がないため、ダウンロードした WSDL を手動で変更して応答に一致させました。その問題は修正されました。
今、私は別の問題に直面しています。Web サービスにリクエストを送信すると、常に失敗しました。次に、フィドラーを使用して 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 を比較すると、パートナー xml では名前空間http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/の前に「acd」が付いています。パートナーは、その形式で送信することを望んでいました。
Partner Xml は標準に従っていないと思います。これは本当にパートナーの問題です。しかし、私には選択肢が残っておらず、自分の側で Xml を変更する必要がありました。
WCF サービスでシリアル化をカスタマイズすることはできますが、このレベルでプレフィックスを変更できるかどうかはわかりません。さらに、Partner Xml が XSD の標準に従っているかどうかもわかりません。
上記の変更に対応するために WCF のシリアル化を変更する方法をご案内いただければ幸いです。