SOAP メッセージ XML を書き出すために、WCF アプリケーションでカスタム エンコーダーを使用しています。textMessageEncoding
WCF に組み込まれている既定の 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;