Метод WCF возвращает фрагмент XML, но без заголовка XML UTF-8 - PullRequest
1 голос
/ 03 июня 2010

Мой метод не возвращает заголовок, только корневой элемент xml.

internal Message CreateReturnMessage(string output, string contentType)
            {
                // create dictionaryReader for the Message
                byte[] resultBytes = Encoding.UTF8.GetBytes(output);
                XmlDictionaryReader xdr = XmlDictionaryReader.CreateTextReader(resultBytes, 0, resultBytes.Length, Encoding.UTF8, XmlDictionaryReaderQuotas.Max, null);

                if (WebOperationContext.Current != null)
                    WebOperationContext.Current.OutgoingResponse.ContentType = contentType;

                // create Message
                return Message.CreateMessage(MessageVersion.None, "", xdr);
            }

Тем не менее, вывод, который я получаю:

<Test>
   <Message>Hello World!</Message> 
</Test>

Я бы хотел, чтобы вывод отображался как:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Test>
   <Message>Hello World!</Message> 
</Test>

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Посмотрите на этот URL http://blogs.msdn.com/b/wifry/archive/2007/05/15/wcf-bodywriter-and-raw-xml-problems.aspx Передайте строку xml пользовательскому bodywriter, и он выведет объявление xml

0 голосов
/ 03 июня 2010

при условии, что output параметр входит как ...

<Test>
   <Message>Hello World!</Message> 
</Test>

Что вы ожидаете случиться? Вы пишете не XML, а просто читаете строку output через считыватель. Класс читателя ничего не добавит к вашему фрагменту, это читатель, а не писатель.

Вместо этого вы могли бы сделать что-то вроде этого ... Он проанализирует ваш вывод как xml, а затем вы можете добавить объявление перед передачей его в сообщение.

var output = "<Test><Message>Hello World!</Message></Test>";
var xd = XDocument.Parse(output);
xd.Declaration = new XDeclaration("1.0", "utf-8", "yes");
return Message.CreateMessage(version, messageFault, xd.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...