我在我的WCF应用程序中使用自定义编码器来写出SOAP消息XML。当我使用WCF内置的默认XML textMessageEncoding
时,它很好,但是当我使用自定义编码器时,我遇到了名称空间的问题 - 下面的 xmlns:a 标记(在元素和对于两个不同的命名空间,元素)被定义了两次,这在解析
<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,这似乎是导致问题的原因。
此外,如何让XmlWriter
为上面的<Action>
标记使用前缀,使其为<a:Action>
,而不是为每个声明使用xmlns -
<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 :(得分:0)
使用XmlDictionaryWriter
代替XmlWriter
来解决此问题。幸运的是我正在使用Utf-8编码并且可以选择这样做