Пользовательский кодировщик 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";
}
}