1

SOAP メッセージ XML を書き出すために、WCF アプリケーションでカスタム エンコーダーを使用しています。textMessageEncodingWCF に組み込まれている既定の XML を使用する場合は問題ありませんが、カスタム エンコーダーを使用する場合、名前空間で問題が発生します。下のxmlns:aタグ (要素と要素内) は、2 つの異なる名前空間に対して 2 回定義されています。解析時にサービス側で問題を引き起こしています

<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action a:mustUnderstand="1" u:Id="_3" xmlns="http://www.w3.org/2005/08/addressing" **xmlns:a="http://schemas.xmlsoap.org/soap/envelope/"**></Action>
    <MessageID u:Id="_4" xmlns="http://www.w3.org/2005/08/addressing">
      <!--Omitted-->
    </MessageID>
    <ActivityId CorrelationId="1" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">
      <!--Omitted-->
    </ActivityId>

この問題を解決する方法について何か考えはありますか? カスタム エンコーダーでC# を使用しXmlWriterて XML を記述していますが、それが問題の原因となっているようです。

また、すべての宣言にxmlnsを使用するのではなく、上記のタグXmlWriterにプレフィックスを使用するにはどうすればよいですか-<Action><a:Action>

<Action a:mustUnderstand="1" u:Id="_3" xmlns="http://www.w3.org/2005/08/addressing"

ここに私のXmlWriterSettingsがあります

XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.Encoding = Encoding.GetEncoding(factory.CharSet);
writerSettings.OmitXmlDeclaration = true;
writerSettings.NamespaceHandling = NamespaceHandling.OmitDuplicates;  
4

1 に答える 1

0

XmlDictionaryWriterの代わりに を使用して、これを修正しましたXmlWriter。幸いなことに、私は Utf-8 エンコーディングを使用しており、これを行うオプションがありました

于 2012-04-27T08:47:57.323 に答える