これは、既存のクライアントが存在するため、クライアントが消費するサーバーを構築する必要がある状況です。私はクライアントを所有しておらず、それを変更する立場にありません。メッセージをすることができ、クライアントの石鹸は、私は私のサービスは、丸で囲んだプレフィックスの両方を受け入れる作るにはどうすればよいC# - すべてのSOAPメッセージプレフィックスを受け入れます。
に従います。現在のところ、 "c2b"プレフィックスだけを受け付け、 "ns1"プレフィックスを持つリクエストは処理しません。
これは、既存のクライアントが存在するため、クライアントが消費するサーバーを構築する必要がある状況です。私はクライアントを所有しておらず、それを変更する立場にありません。メッセージをすることができ、クライアントの石鹸は、私は私のサービスは、丸で囲んだプレフィックスの両方を受け入れる作るにはどうすればよいC# - すべてのSOAPメッセージプレフィックスを受け入れます。
に従います。現在のところ、 "c2b"プレフィックスだけを受け付け、 "ns1"プレフィックスを持つリクエストは処理しません。
DTO(Classオブジェクト)をサービスに渡していますが、wcfサービスが正確なクラスを認識できません。 WCFに任意のプレフィックスを受け入れるには、そのプレフィックスに適切なオブジェクトの場所を追加するだけです。 もう1つxmlns
属性を<soapenv:Envelope>
に追加する必要があります。
例:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://cps.huawei.com/cpsinterface/c2bpayment" xmlns:c2B="http://cps.huawei.com/cpsinterface/c2bpayment">
正に、あなたはここでクリークになるかもしれません。完全に無効なSOAPメッセージを提供しているクライアントがあります。これは、宣言していない名前空間接頭辞を使用しています。
私はそれを試してみる時間がありませんが、最初の考えはおそらくXmlNamespaceDeclarationsAttributeを使用していた可能性があります - ルートC2BPaymentConfirmationRequestクラスでそれを提供し、コンストラクタで "ns1" 「http://cps.huawei.com/cpsinterface/c2bpayment」となります。試すだけの価値があります。それがうまくいくかどうか私たちに知らせてください。
Shubham Sharma's answerは100%正確です。
もう少し説明を加えると、これらの接頭辞はあなたが宣言した名前空間のエイリアスに過ぎません。彼らは何も意味しません。接頭辞としてns1を使用する場合は、xmlns:c2bをxmlns:ns1に置き換えるだけです。
あなたの場合、クライアントはリクエストの生成方法を知らない場合があります。たぶん、SoapUIのようなwsdlに基づくリクエスト生成ツールを使用するようアドバイスする方が良いでしょう。
サービスのどのファイルに上記を追加しますか? –
このリンクを参照してSoap Messageを変更してください。[Change Soap Message](https://cmatskas.com/changing-soap-message-data-and-namespaces-with-c/) –