Всем привет.
Вставляю поддержку gzip compression для WCF сервесов. Исходник (
http://msdn.microsoft.com/en-us/library/ms751458.aspx). Все получается замечательно, но есть одна деталь, которую хотелось бы сделать гибко — комрессировать/декомрессировать реквест/респонс не безусловно, а в зависимости от Content-Encoding хедера.
Для _исходящих_ сообщений это не проблема — с помощью behaviors можно вставить и дополнительный хеадер и передать информацию в messageencoder о том, что нужно комрессировать исходящий месаж. Проблема с входящими сообщениями — как получить значение Content-Encoding хеадера _входящего_ сообщения? По-видимому, сам WCF уже "знает" все хеадеры, по крайней мере Content-Length и Content-Type, последний он даже передает в MessageEncoder.ReadMessage метод.
Есть ли у кого какие идеи?
Best regards,
Aleksey Chernoraenko.
Здравствуйте, Tom, Вы писали:
B>>Есть ли у кого какие идеи?
Tom>OperationContextю.Current.IncomingMessageHeaders?
Этот вариан не подойдет. OperationContext.Current не проинициализирован еще на момент конструирования Message.
Возможный (и наверно единственный) способ это сделать это перегрузить Message. То есть реализовать некий проси для мессажа, который будет откладывать построение реального, низлежащего мессажа до тех пор пока кто-то не запросит body. К тому моменту headers уже будут доступны. Я описал это более подробнее на stackoverflow (
http://stackoverflow.com/questions/1993062/access-to-request-http-headers-in-custom-wcf-messageencoder).
Best regards,
Aleksey Chernoraenko