6

をオーバーライドするWCFDataService(v5.2)がありますOnStartProcessingRequest(ProcessRequestArgs args)。応答にいくつかのヘッダーを追加したいと思います(このメソッドでは、適切な場所であると思いますか?)。私は最初にこれを試しました:

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

それはうまくいきませんでした。次に、これを試しました。

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

それはうまくいきませんでした。その吸盤に新しいOperationContextScopeを追加してみました。それでも失敗しました。ついに私はこれを試しました:

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

そのオプションはうまくいきました!(「作業」とは、クライアントへの応答に実際に表示されたことを意味します。)最初の2つのオプションが機能しなかったのはなぜですか?

ウェブでさらに読んだ後、私はそれを発見しました

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

また動作します。一体なぜこのメソッド内に4つの現在のコンテキストがあるのですか?(実行時に)どちらを使用するかをどのように知るのですか?[WebGet]私の方法で有効なものはどれですか?[QueryInterceptor]私の方法で有効なものはどれですか?どのコンテキストが正しいリクエストヘッダーを持つことが保証されていますか?(現在、そのためにargs.OperationContextを使用しています。)

4

1 に答える 1

8

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

ところで:

于 2012-12-22T07:14:07.293 に答える