HttpContext против OperationContext в DataService с заголовками HTTP

у меня есть служба данных WCF (v5.2) это переопределяет OnStartProcessingRequest(ProcessRequestArgs args). Я хочу добавить некоторые заголовки в ответ (в этом методе, который я предполагаю, является правильным местом?). Я впервые попробовал это:

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

это не сработало. Затем я попробовал это:

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

это не сработало. Я попытался добавить новый OperationContextScope на эту присоску. Все равно не получилось. Наконец я попробовал:--8-->

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

этот вариант сработал! (Под "работой" я имею в виду, что он действительно появился в ответе к клиенту. Почему не сработали первые два варианта?

прочитав дальше в Интернете, я обнаружил, что

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

тоже работает. Почему у нас есть четыре текущих контекста внутри этого метода? Как человеку узнать, какой из них использовать (во время выполнения)? Какие из них действительны в my [WebGet] методами? Какие из них действительны в my [QueryInterceptor] методами? Где гарантировано право заголовков запроса? (Я использовал args.OperationContext для этого на данный момент.)

1 ответов


Не знаю о ProcessRequestArgs.OperationContext.ResponseHeaders, но я думаю, что могу объяснить, почему OperationContext.Текущий.OutgoingMessageHeaders не работали: "заголовки" есть заголовки SOAP (предположительно игнорируются для не-SOAP-сервисов), а не заголовки HTTP. В двух других случаях (HttpContext.Текущий.Ответ.AddHeader andWebOperationContext.Текущий.OutgoingResponse.Заголовки) обратите внимание на "Http" и "Web" в именах, чтобы указать, что вы делаете что-то конкретное HTTP, т. е. добавление заголовок http.

кстати:

  • OperationContext-обычный контекст операции WCF
  • weboperationcontext - расширения REST/HTTP для контекста операции WCF
  • HttpContext-совместимость с ASP.NET модель хостинга, работает только при использовании ASP.NET режим compat (не при самостоятельном размещении и т. д.), см.http://blogs.msdn.com/b/wenlong/archive/2006/01/23/516041.aspx