Ответ потока WCF, возвращающий символы мусора - PullRequest
1 голос
/ 04 августа 2020

Привет, ребята, у меня есть веб-сервис , возвращающий XML ответ в виде потока , это строка, которую позже я конвертирую в поток памяти, прежде чем возвращать ее в качестве ответа. Проблема в том, что в строке есть некоторые китайские символы, которые отлично работают, если мой тип возвращаемого сервиса - обычная строка, но они показывают символы мусора , если я конвертирую их в поток, а затем выбираю поток в качестве возвращаемого типа.

Stream strmResponse = new MemoryStream(Encoding.UTF8.GetBytes(xmlstringResponse));

приведенный выше код преобразует все китайские символы в символы мусора, и я получаю такой ответ. изменение кодировки в ASCII просто заменит китайские символы на "??"

<data contentType="application/octet-stream" contentLength="1808"><![CDATA[<MESSAGE_BODY><RESPONSE><RESULT>�功</RESULT></RESPONSE></MESSAGE_BODY>]]></data>

, однако правильным китайским языком будет "成功" , что означает успех. Ниже приведена подпись моего метода

[WebInvoke(Method = "POST", UriTemplate = "SendDCFileResponse", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
Stream SendDCFileResponse(Stream xmlParam);

изменение типа возвращаемого значения на «строка» заставит все работать , но использование потока - это требование для меня. Я проверил свою привязку, и это basicHttpBinding, что означает, что он поддерживает UTF8 по умолчанию, но я явно указал UTF-8 в качестве типа содержимого, но мне не повезло. Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 05 августа 2020

Я попробовал привязку webhttpbinding и basichttpbinding, но не столкнулся с указанной вами проблемой:

webhttpbinding

[WebInvoke(Method = "POST", UriTemplate = "SendDCFileResponse", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
        [OperationContract]
        Stream SendDCFileResponse(Stream xmlParam);

 public Stream SendDCFileResponse(Stream xmlParam)
        {
            string xmlstringResponse = " < data contentType = \"application/octet-stream\" contentLength = \"1808\" >< ![CDATA[< MESSAGE_BODY >< RESPONSE >< RESULT >成功</ RESULT ></ RESPONSE ></ MESSAGE_BODY >]] ></ data >";
            Stream strmResponse = new MemoryStream(Encoding.UTF8.GetBytes(xmlstringResponse));
            return strmResponse;
        }

enter image description here

basichttpbinding

[OperationContract]
Stream SendDCFileResponse(Stream xmlParam);

 public Stream SendDCFileResponse(Stream xmlParam)
        {
            string xmlstringResponse =" < data contentType = \"application/octet-stream\" contentLength = \"1808\" >< ![CDATA[< MESSAGE_BODY >< RESPONSE >< RESULT >成功</ RESULT ></ RESPONSE ></ MESSAGE_BODY >]] ></ data >";
            Stream strmResponse = new MemoryStream(Encoding.UTF8.GetBytes(xmlstringResponse));
            return strmResponse;
        }

введите описание изображения здесь

Если проблема не исчезнет, ​​дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...