CustomMessageEncoder からヘッダーに直接アクセスできるとは思えません。できることは、更新された .NET 4.5 WCF BinaryMessageEncoderBindingElementを活用することです。これにより、圧縮タイプ (Gzip など) を指定できるようになり、解凍を試みる前にメッセージ本文が圧縮されているかどうかを自動的に検出できるようになりました。詳細については、Windows Communication Foundation 4.5 の新機能を参照してください。
ヘッダーにアクセスしたい場合は、 IDispatchMessageInspectorの実装でHttpRequestMessagePropertyを利用する方法を試すことができます。
簡単な例:
public class MyDispatchMessageInspector : IDispatchMessageInspector
{
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
object obj;
if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out obj))
{
var httpRequestMessageProperty = obj as HttpRequestMessageProperty;
if (httpRequestMessageProperty != null
&& !string.IsNullOrEmpty(httpRequestMessageProperty.Headers["content-encoding"]))
{
...
}
}
return null;
}
...
}
別のオプションはOperationContext
、次を使用してアクセスすることです。
int index = System.ServiceModel.OperationContext.Current.IncomingMessageHeaders.FindHeader("content-encoding", "");
string contentEncodeHeaderValue = System.ServiceModel.OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(index);