【发布时间】:2019-02-23 02:38:47
【问题描述】:
我在 .net 核心应用程序中有一个 WCF 连接服务。我正在使用根据 wsdl 定义自动生成的代码。
目前在请求 xml 的顶部包含这一行:
<?xml version="1.0" encoding="utf-16"?>
在发送请求时,我找不到将这种编码更改为 UTF-8 的简单方法。
由于我可以找到请求/客户端对象的配置选项,因此我尝试在 IClientMessageInspector.BeforeSendRequest 处使用以下代码更改消息
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
// Load a new xml document from current request
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(request.ToString());
((XmlDeclaration)xmlDocument.FirstChild).Encoding = Encoding.UTF8.HeaderName;
// Create streams to copy
var memoryStream = new MemoryStream();
var xmlWriter = XmlWriter.Create(memoryStream);
xmlDocument.Save(xmlWriter);
xmlWriter.Flush();
xmlWriter.Close();
memoryStream.Position = 0;
var xmlReader = XmlReader.Create(memoryStream);
// Create a new message
var newMessage = Message.CreateMessage(request.Version, null, xmlReader);
newMessage.Headers.CopyHeadersFrom(request);
newMessage.Properties.CopyProperties(request.Properties);
return null;
}
但是 newMessage 对象仍然使用 utf-16 编写 xml 声明。从那以后,我可以在监视窗口中调试时看到它。
任何关于如何完成这个(应该是)简单改变的想法都会非常感激。
【问题讨论】:
-
<basicHttpBindiung> 的默认文本编码是 UTF8。你用的是什么绑定?如果要更改编码,请在绑定级别进行,不要尝试修改序列化程序的工作方式。
-
无论如何,
BeforeSendRequest是用来检查和修改消息,而不是序列化它。序列化有它自己的重载。如果您想与符合标准的 SOAP 服务进行通信,则不需要使用它们 -
UTF8 也是wsHttpBinding 的默认编码。
-
你有没有找到解决这个问题的办法?我有同样的问题,我似乎无法找到解决方案。这似乎应该很容易。