2012-12-22 7 views
6

Ich habe einen WCF DataService (v5.2), der OnStartProcessingRequest(ProcessRequestArgs args) überschreibt. Ich möchte einige Header zur Antwort hinzufügen (in dieser Methode, die ich vermute, ist der richtige Ort?). Ich habe das zuerst versucht:HttpContext im Vergleich zu OperationContext in DataService mit HTTP-Headern

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

Das hat nicht funktioniert. Ich habe dann folgendes versucht:

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

Das hat nicht funktioniert. Ich habe versucht, ein neues OperationContextScope auf diesem Sucker hinzuzufügen. Es ist immer noch fehlgeschlagen. Zuletzt versuchte ich das:

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

Diese Option funktionierte! (Mit "Arbeit" meine ich, dass es tatsächlich in der Antwort auf den Kunden aufgetaucht ist.) Warum haben die ersten beiden Optionen nicht funktioniert?

Nach weiteren im Web zu lesen entdeckte ich, dass

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

funktioniert auch. Warum haben wir vier aktuelle Kontexte innerhalb dieser Methode? Wie kann eine Person wissen, welche (zur Laufzeit) zu verwenden ist? Welche sind in meiner [WebGet] Methoden gültig? Welche sind in meiner [QueryInterceptor] Methoden gültig? Welcher Kontext hat garantiert die richtigen Anforderungsheader? (Ich habe args.OperationContext dafür verwendet.)

Antwort

8

Ich weiß nichts über ProcessRequestArgs.OperationContext.ResponseHeaders, aber ich denke, ich kann erklären, warum OperationContext.Current.OutgoingMessageHeaders nicht funktioniert hat: die "headers" Es gibt SOAP-Header (vermutlich für Nicht-SOAP-Dienste ignoriert), nicht HTTP-Header. In den anderen zwei Fällen (HttpContext.Current.Response.AddHeader undWebOperationContext.Current.OutgoingResponse.Headers) bemerken Sie die "Http" und "Web" in den Namen, um anzuzeigen, dass Sie etwas HTTP-spezifisch tun, d. H. HTTP-Header hinzufügen.

By the way:

  • Operation - regelmäßiger WCF Operation Kontext
  • WebOperationContext - REST/HTTP-Erweiterungen für WCF Operation Kontext
  • Httpcontext - Kompatibilität mit ASP.NET Modell-Hosting, funktioniert nur bei Verwendung von ASP.NET Compat-Modus (nicht wenn selbst gehostet, usw.), siehe http://blogs.msdn.com/b/wenlong/archive/2006/01/23/516041.aspx
Verwandte Themen