使用RequestInterceptor可以从请求中提取HTTP头并对它们进行一些处理。还可以更新响应。但是有没有办法在请求本身更新和/或插入HTTP头,以便后续的处理器(例如拦截器,授权管理器)?
答案 0 :(得分:1)
WCF有一个很多的扩展点来做这样的事情。你可能会追求的是一个实现IDispatchMessageInspector
的自定义行为。
创建一个如下所示的类:
public class MyCustomBehavior : IDispatchMessageInspector, IEndpointBehavior
{
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
//here you can work with request.Headers.
return null;
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(this);
}
//there are a bunch of other methods needed
//but you can leave their implementations empty.
//...
}
然后,您可以在打开服务之前以编程方式将自定义行为添加到服务端点:
host.Description.Endpoints[0].Behaviors.Add(new WcfService2.MyCustomBehavior());
Paolo Pialorsi有一个good tutorial来处理写信息检查员。
答案 1 :(得分:1)
您是否看过http://wcf.codeplex.com新的HTTP堆栈有一个流水线模型,允许您执行此类各种操作。