Я создаю веб-сервис REST, который возвращает XML-документы путем сериализации объектов .NET с использованием DataContractSerializer. Работает очень хорошо, возвращая документы вроде:
<?xml version="1.0" encoding="utf8" ?>
<patient xmlns="http://stackoverflow.com/example">
.....
</patient>
используя такой код:
Message MyRestMethod()
{
Patient patientObject = new Patient() {Name="Mickey Mouse"};
Message message = WebOperationContext.Current.CreateXmlResponse<Patient>(patientObject);
return message;
}
Однако иногда веб-сервис используется веб-браузером, и поэтому было бы намного приятнее, если бы он возвращал документы, подобные этому:
<?xml version="1.0" encoding="utf8" ?>
<?xml-stylesheet type="text/xsl" href="/stylesheet/format.xsl" ?>
<patient xmlns="http://stackoverflow.com/example">
.....
</patient>
Я сделал несколько существенных раскопок и могу почти сделать это, извлекая мое собственное сообщение и перебирая OnWriteBodyContents (), чтобы получить доступ к XmlDictionaryWriter. В этот момент я обнаружил, что WriteProcessingInstruction (имя, текст) не может писать инструкции таблицы XML.
Что еще более важно, клиентский код WCF, получающий инструкцию обработки таблицы стилей xml, также бомбардирует, поэтому даже если вы «взломаете» поток на уровне символов, чтобы добавить его, его не нужно будет отправлять клиентам WCF ...
Если у кого-нибудь есть лучшее предложение, пожалуйста, дайте мне знать ...