2012-04-26 9 views
1

私は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; 

答えて

0
です

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

関連する問題