9 Stimmen

Sollte HttpContext.Current in einem WCF-Dienst nicht null sein?

Ich dachte HttpContext.Current soll null sein in einem WCF-Dienst (auch wenn aspNetCompatibilityEnabled aktiviert ist).

MSDN: HttpContext: Current ist immer null, wenn der Zugriff aus einem einem WCF-Dienst zugegriffen wird. von http://msdn.microsoft.com/en-us/library/aa702682.aspx

Ich habe dies in meiner web.config:

 <serviceHostingEnvironment aspNetCompatibilityEnabled="true">

Aber das :

 HttpContext.Current + " has file path of " + HttpContext.Current.Request.FilePath

liefert einen gültigen Kontext (und den Beweis, dass ich mich in einer .svc-Datei befinde)

 "System.Web.HttpContext has file path of /rrmvc/MVCServices/OrderPipelineService.svc"

Ich brauche eine Möglichkeit zu erkennen, ob ich mich in SVC oder ASMX befinde. Wie sollte ich das tun?

13voto

Josh Punkte 66190

Nein, wenn die ASP.NET-Kompatibilität aktiviert ist, geht es darum, dass der WCF-Dienst im Kontext der ASP.NET-Pipeline ausgeführt wird und Sie vollen Zugriff auf die ASP.NET-Dienste wie Cache, Session State, Forms Authentication usw. haben.

Wenn Sie wissen möchten, ob die aktuelle Anfrage an einen WCF-Dienst oder einen ASMX-Dienst gerichtet ist, können Sie dies tun:

  • Überprüfen Sie das Ende der Zeichenfolge, die Sie bereits in Ihr Experiment eingefügt haben
  • Prüfen Sie die HttpContext.Current.Handler

Beachten Sie in allen Fällen haben Sie keine HttpContext.Current, wenn ASP.NET-Kompatibilität nicht aktiviert ist, in diesem Fall können Sie sicher sein, dass Sie nicht in den Anwendungsbereich eines ASMX Web Service ausgeführt werden.

Auszug aus der von Ihnen verlinkten Seite: Hosting von WCF-Diensten im ASP.NET-Kompatibilitätsmodus

Anders als bei der standardmäßigen Seite-an-Seite Konfiguration, bei der die WCF-Hosting Infrastruktur WCF-Nachrichten abfängt abfängt und sie aus der HTTP Pipeline weiterleitet, nehmen WCF-Dienste, die im ASP.NET-Kompatibilitätsmodus ausgeführt werden vollständig am ASP.NET-HTTP-Anfrage Lebenszyklus teil. Im Kompatibilitätsmodus verwenden WCF Dienste die HTTP-Pipeline über eine eine IHttpHandler-Implementierung, ähnlich der Art und Weise, wie Anforderungen für ASPX Seiten und ASMX-Webdienste behandelt werden. Infolgedessen verhält sich WCF identisch mit ASMX in Bezug auf die folgenden ASP.NET-Funktionen:

HttpContext: WCF-Dienste, die im ASP.NET-Kompatibilitätsmodus laufen, können auf Current und seinen zugehörigen Status zugreifen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X