具有HTTP头的DataService中的HttpContext与OperationContext

时间:2012-12-22 06:07:32

标签: c# http-headers wcf-data-services

我有一个覆盖OnStartProcessingRequest(ProcessRequestArgs args)的WCF DataService(v5.2)。我想在响应中添加一些标题(在这种方法中我假设它是正确的位置?)。我第一次尝试这个:

args.OperationContext.ResponseHeaders.Add(...)

那不起作用。然后我尝试了这个:

OperationContext.Current.OutgoingMessageHeaders.Add(...)

那不起作用。我尝试在那个吸盘上添加一个新的OperationContextScope。它仍然失败了。最后我尝试了这个:

HttpContext.Current.Response.AddHeader(...);

该选项有效! (通过“工作”我的意思是它实际上出现在对客户的回复中。)为什么前两个选项不起作用?

在网上进一步阅读后,我发现了

WebOperationContext.Current.OutgoingResponse.Headers.Add(...)

也有效。为什么我们在这个方法中有四个当前的上下文?一个人如何知道使用哪一个(在运行时)?哪些在我的[WebGet]方法中有效?哪些在我的[QueryInterceptor]方法中有效?哪个上下文保证有正确的请求标头? (我现在一直在使用args.OperationContext。)

1 个答案:

答案 0 :(得分:8)

不了解ProcessRequestArgs.OperationContext.ResponseHeaders,但我想我可以解释为什么OperationContext.Current.OutgoingMessageHeaders不起作用:“标题”有SOAP标题(可能忽略非SOAP服务),而不是HTTP标头。在另外两种情况下(HttpContext.Current.Response.AddHeader和WebOperationContext.Current.OutgoingResponse.Headers)注意名称中的“Http”和“Web”,表示您正在执行特定于HTTP的操作,即添加HTTP标头。

顺便说一下: