WCF将消息编码从Utf-16更改为Utf-8

问题描述 投票:0回答:1

我在.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声明。从那以后我可以在监视窗口调试时看到它。

任何关于如何实现这个(应该)简单改变的想法都将非常感激。

wcf utf-8 .net-core
1个回答
0
投票

您使用哪种绑定来创建通信渠道? CustomBinding中包含的textmessageencoding元素通常包含TextEncoding属性。 https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/wcf/textmessageencoding WriteEncoding属性指定用于在绑定上发送消息的字符集编码。有效值是

  • UnicodeFffeTextEncoding:Unicode BigEndian编码
  • Utf16TextEncoding:Unicode编码
  • Utf8TextEncoding:8位编码

默认值为Utf8TextEncoding。此属性的类型为Encoding。至于特定绑定,它也包含textEncoding属性。 https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.basichttpbinding.textencoding?view=netframework-4.0 如果有什么我可以帮忙,请随时告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.