WCF CreateMessage 在转义的 ASCII 字符上失败

WCF CreateMessage fails on escaped ASCII characters

提问人:Andy W 提问时间:8/11/2023 更新时间:8/11/2023 访问量:30

问:

我正在将 WCF 客户端应用程序从 DotNet Framework 迁移到 DotNet (Core) 7。我使用的对象使用 ASCII 字符 0x07 作为分隔符进行序列化,在 DotNet 框架下,该分隔符将转义为 

var request = new Request(...);

Message wcfMessage = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "MyServiceAction", request);

var wcfMessageXml = wcfMessage.ToString();

在 dotnet 框架下,这会导致类似于 <SerializedData>Field 1&#x7; 的 WCF 正文字段 2&#x7;等<SerializedData>。

但是,在 dotnet core 中使用相同的代码,我得到: System.ArgumentException : '\a',十六进制值 0x07,是一个无效字符。

我已经追踪到这样一个事实,即在最新的 dotnet 中,XmlReader、XmlWriter 和相关类将尝试取消转义文本中的任何转义序列,然后检查该字符是否为有效的 XML。如果我直接使用这些类,则可以使用 XmlReaderSetting/XmlWriterSettings.CheckCharacters = false 跳过此不良行为,但我无法弄清楚如何对 WCF Message 对象执行相同的操作。我怎样才能让它工作?

C# XML 序列化 核心WCF

评论

1赞 user2773289 8/11/2023
Message 类有一个 OnBeginWriteMessage 方法,该方法获取传递给它的 XmlDictionaryWriter,理论上,如果扩展了 Message 类,则可以重写该方法并在此编写器实例上设置 CheckCharacters。
0赞 Jiayao 8/11/2023
XmlDictionaryWriter 类派生自 XmlWriter,可以使用 添加。或者你可以试试。XmlWriterSettings xmlWriterSettings = new XmlWriterSettings { Encoding = Encoding.UTF8, CheckCharacters = false };Regex.Replace

答: 暂无答案