2012-12-22 20 views
6

我有一個WCF DataService的(V5.2),它覆蓋OnStartProcessingRequest(ProcessRequestArgs args)。我想爲響應添加一些標題(在這個我認爲是正確的地方?)。我第一次嘗試這個:的HttpContext對的OperationContext中的DataService與HTTP頭

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

這沒有奏效。然後我試了這個:

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

這沒有奏效。我試圖在該吸盤上添加一個新的OperationContextScope。它仍然失敗。最後我試了這個:

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

該選項的工作! (通過「工作」我的意思是它實際上出現在對客戶的迴應中。)爲什麼前兩個選項沒有工作?

在網絡上進一步看完後我發現,

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

也適用。爲什麼我們在這個方法裏面有四個當前的背景?一個人如何知道使用哪一個(在運行時)?哪些在我的[WebGet]方法中有效?哪些在我的[QueryInterceptor]方法中有效?哪個上下文保證有正確的請求頭文件? (我一直在使用args.OperationContext。)

回答

8

不知道ProcessRequestArgs.OperationContext.ResponseHeaders,但我想我可以解釋爲什麼OperationContext.Current.OutgoingMessageHeaders不工作:「標題」有SOAP頭(大概在非SOAP服務中被忽略),而不是HTTP頭。在另外兩種情況下(HttpContext.Current.Response.AddHeader和WebOperationContext.Current.OutgoingResponse.Headers)會在名稱中註明「Http」和「Web」,以表明您正在執行HTTP特定的操作,即添加HTTP標頭。

順便說一句: