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

WCF将消息编码从Utf-16更改为Utf-8,wcf,utf-8,.net-core,Wcf,Utf 8,.net Core,我在.net核心应用程序中有一个WCF连接服务。我正在使用wsdl定义中自动生成的代码 当前位于请求顶部的xml包含以下行: 在发送请求时,我找不到简单的方法将此编码更改为UTF-8 由于我可以在请求/客户端对象中找到一个配置选项a,因此我尝试在IClientMessageInspector.BeforeSendRequest public object BeforeSendRequest(ref Message request, IClientChannel channel)

我在.net核心应用程序中有一个WCF连接服务。我正在使用wsdl定义中自动生成的代码

当前位于请求顶部的xml包含以下行:

在发送请求时,我找不到简单的方法将此编码更改为UTF-8

由于我可以在请求/客户端对象中找到一个配置选项a,因此我尝试在
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声明。我可以在监视窗口调试时看到它


任何关于如何实现这一(应该是)简单更改的想法都将受到高度重视。

您使用哪种绑定来创建通信通道?CustomBinding中包含的textmessageencoding元素通常包含TextEncoding属性。

WriteEncoding属性指定用于在绑定上发送消息的字符集编码。有效值为

  • Unicode双端编码:Unicode双端编码
  • UTF16TENSTENCODING:Unicode编码
  • Utf8TextEncoding:8位编码
默认值为Utf8TextEncoding。此属性属于编码类型。 对于特定绑定,它也包含textEncoding属性。


如果有什么我可以帮忙的,请随时告诉我。

的默认文本编码是UTF8。你用了什么装订?如果要更改编码,请在绑定级别进行更改,不要尝试修改序列化程序的工作方式。在任何情况下,
BeforeSendRequest
用于检查和修改消息,而不是序列化消息。序列化有自己的重载。您不需要使用它们,因为您希望与符合STANTAS标准的SOAP服务通信。默认编码也是SUTF8。您是否找到解决此问题的方法?我也有同样的问题,我似乎找不到解决办法。这看起来应该很容易。