1

クライアントから、開発中の WCF サービスが次のような応答を返す必要があることを指定するドキュメントを受け取りました。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hsdq="http://site.gov/21398">
        <soapenv:Header/>
    <soapenv:Body>
      <inf:getCarsResponse xmlns:inf="inf">
               <hsdq:Message1/>
          <hsdq:Message2>
            <hsdq:ApplicationData>
            ...
            </hsdq:ApplicationData>
            <hsdq:ApplicationDocument/>
          </hsdq:Message2>
      </inf:getCarsResponse>
  </soapenv:Body>
</soapenv:Envelope>

しかし、私たちのサービスによって生成された応答は少し異なります。

<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">
      <getCarsResponse xmlns="inf">
         <Message2 xmlns="http://site.gov/21398">
            <ApplicationData>
            ...
            </ApplicationData>
         </Message2>
      </getCarsResponse>
   </s:Body>
</s:Envelope>

ApplicationDocumentセクションとセクションの欠落を修正できることを知っていHeaderます。しかし、どうすれば私の応答を提供されたものとまったく同じにすることができますか?

可能なように構成したいということです。 1.不要な名前空間をxmlserializer削除xsiします。xsd2. エンベロープの名前空間sを に変更しsoapenvます。3.hsdq名前空間はルート要素で指定する必要があり、URL だけでなく名前でも識別される必要があります。xmlns:hsdq="http://site.gov/21398"(最初の応答:と 2 番目の応答: を比較してください。xmlns="http://site.gov/21398"

私はそれを使用する必要があると思いますIDispatchMessageFormatterが、私には複雑すぎて、サンプルがないと ut を使用できませんでした。

みんなありがとう!

4

1 に答える 1

0

私はあなたがそれをすることができなかったと思います。プレフィックスの名前空間の順序は、サーバーにとって重要ではありません。名前空間を交換するカスタム エンコーダーを作成することもできますが、サーバーがこれを拒否する理由を実際に確認する必要があります。

于 2012-05-09T15:46:27.223 に答える