私はWCFアプリケーションでカスタムエンコーダを使用してSOAPメッセージXMLを書き出しています。既定のXML textMessageEncoding
をWCFに組み込んで使用しても問題ありませんが、カスタムエンコーダを使用すると、名前空間に問題が発生します - xmlns:タグ(要素と要素内)は2つの異なる名前空間であり、これは解析時にサービス側で問題を引き起こしていますWCFでXMLWriterによって生成されたXML名前空間の競合を生成するカスタムエンコーダ
<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を使用するよりも<a:Action>
だようXmlWriter
は、上記<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;