WCF Изменить кодировку сообщений с Utf-16 на Utf-8 - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть служба, связанная с WCF, в основном приложении .net.Я использую код, который автоматически генерируется с использованием определения 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 по-прежнему записывает объявление xml, используя utf-16.Я вижу это во время отладки в окне наблюдения, поскольку.

Любая идея о том, как выполнить это (должно быть) простое изменение, будет очень цениться.

1 Ответ

0 голосов
/ 25 февраля 2019

Какую привязку вы используете для создания канала связи?Элемент textmessageencoding, содержащийся в CustomBinding, обычно содержит свойство 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
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...