2012-12-22 12 views
6

OnStartProcessingRequest(ProcessRequestArgs args)をオーバーライドするWCF DataService(v5.2)があります。私は応答にいくつかのヘッダーを追加したいと思います(この方法では、私は正しい場所だと思いますか?)。私はまずこれを試しました:HTTPヘッダーを持つDataServiceのHttpContextとOperationContext

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

それは動作しませんでした。私はそれを試みた:

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

それは動作しませんでした。私はその吸盤に新しいOperationContextScopeを追加しようとしました。それでも失敗しました。ようやく私はこれを試しました:

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

そのオプションが機能しました! (「仕事」とは、実際にはクライアントへの応答に現れたという意味です)なぜ最初の2つのオプションは機能しませんでしたか?

ウェブ上でさらに読んだ後、私は

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

も機能することを発見しました。なぜこのメソッドの中に4つの現在のコンテキストがありますか?どのようにして(実行時に)使用するのかを人がどのように知っていますか?私の[WebGet]メソッドで有効なものはどれですか?私の[QueryInterceptor]メソッドで有効なものはどれですか?どのコンテキストが正しいリクエストヘッダを持つことが保証されていますか? (私は今のところargs.OperationContextを使っています)

答えて

8

ProcessRequestArgs.OperationContext.ResponseHeadersについてはわかりませんが、なぜ私はOperationContext.Current.OutgoingMessageHeadersが機能しなかったのかを説明することができます: "ヘッダ" HTTPヘッダーではなくSOAPヘッダーがあります(非SOAPサービスではおそらく無視されます)。他の2つのケース(HttpContext.Current.Response.AddHeader andWebOperationContext.Current.OutgoingResponse.Headers)では、名前に「Http」と「Web」が表示され、HTTP固有の処理、つまりHTTPヘッダーの追加を行っていることを示します。ところで

  • のOperationContext - 定期的なWCFの操作コンテキスト
  • WebOperationContext - REST/HTTPの拡張WCF操作コンテキストの
  • のHttpContext - ASP.NETホスティングモデルとの互換性、使用している場合のみ動作しますASP.NET互換モード(セルフホスト時など)、http://blogs.msdn.com/b/wenlong/archive/2006/01/23/516041.aspx
関連する問題