Я должен догадаться, что вы кодируете ответ на запрос.Если это так, вам просто нужно добавить заголовок типа контента к исходящему сообщению:
OperationContext
.Current
.OutgoingMessageHeaders
.Add ("Content-Type", "application/pdf" );
Не уверен на 100%, но сначала вам может потребоваться очистить любой существующий исходящий заголовок Content-Type.Я не думаю, что имеет значение, что ваше сообщение закодировано в MTOM.Это теоретически прозрачно.
Также ... просто спрашиваю ... зачем разрешать буферизованное сообщение размером 64 МБ, если потоковое сообщение требует гораздо меньше памяти для передачи ... и, вероятно, будет таким же быстрым или быстрым?Вы в значительной степени гарантируете лучшую производительность в сильно загруженном сервисе.
Обновление :
Если вам повезло использовать привязку веб-API-типа (WebHttpBinding) ... вы можете довольно легко транслировать свой контент, указав тип контента.Это не так уж и отличается от того, что я положил в моем ответе выше, но, как вы ответили, эти заголовки идут не туда.
Вместо этого должно быть:
WebOperationContext
.Current
.OutgoingResponse
.ContentType = "application/pdf";
Здесь есть фантастическая статья / пример здесь , которая полностью развивает идею ... в соответствии с вашими целями.
Если вы привязаны к более старой привязке мыла, то вам, вероятно, нужно написать собственный кодировщик сообщений.Техника достаточно проста (если утомительна).Основная идея заключается в том, что вы можете взять на себя управление написанием тела сообщения способами, которые соответствуют вашим потребностям.
Сам кодировщик тривиален.Образец, который обходит это, будет утомительной частью.Пользовательский кодировщик происходит от абстрактного MessageEncoder .Важные вещи, которые нужно сделать, это переопределить свойства ContentType
, MediaType
, MessageVersion
и методы ReadMessage
и WriteMessage
.Существуют варианты методов ReadMessage
и WriteMessage
для работы с потоковыми и буферизованными сообщениями.
Уродливая часть - это шаблон, который вы должны написать для развертывания вашего кодировщика.У вас есть фабрика кодировщиков и пользовательский элемент привязки.Не ужасно, но шумно.В примере пакета кода здесь ... есть пара примеров целого шарика воска (включая заводскую опору и поддержку связующего элемента), что может сэкономить вам некоторое время.