Пользовательский кодировщик WCF - Назначение типа содержимого сообщения во время выполнения

В настоящее время я создаю свой собственный кодер WCF, который будет анализировать мое сообщение. Я хочу динамически изменить тип контента, который назначается при отправке ответа, но я не могу понять, где он его ищет.

Использует ли он CustomTextEncoder.ContentType или тип содержимого innerencoder? Как я могу заставить его отправить ответ в виде "text/xml" или "application/soap+xml"?

Заранее спасибо.

РЕДАКТИРОВАТЬ - Просто чтобы уточнить, что мне нужно решение в методе WriteMessage моего пользовательского кодировщика. Я использую строковое свойство, которое содержит запрошенный тип содержимого, но он делает это неправильно.

public class MyEncoder : MessageEncoder
{
    private string _contentType = "application/soap+xml";

    public override string ContentType
    {
        get
        {
            return _contentType;
        }
    }

    public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
    {
        ...

        if (_MY_CONDITION_HERE_)
        {
            _contentType = "multipart/related";
        }
        else
            _contentType = "application/soap+xml";

        ...
     }
}

К сожалению, когда я отправляю свое сообщение, он все еще назначает значение по умолчанию для моего кодировщика...

2 ответа

Решение

Кажется, что я не могу изменить тип содержимого входящего запроса, моя проблема была решена с помощью инспектора сообщений, где я назначаю нужный тип содержимого. (Эта ссылка помогла мне)

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

Да, вы можете переопределить ContentType в вашем кодировщике, чтобы управлять тем, что отправляется. Затем вы можете выбрать, хотите ли вы делегировать внутреннему энкодеру или указать собственное значение.

public override string ContentType
{
    get
    {
        //return this.inner.ContentType;
        //return "text/xml";
    }
}
Другие вопросы по тегам