Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Isn't HttpContext.Current supposed to be null in a WCF service?

Tags:

wcf

I thought HttpContext.Current is supposed to be null in a WCF service (even if aspNetCompatibilityEnabled is enabled).

MSDN: HttpContext: Current is always null when accessed from within a WCF service. from http://msdn.microsoft.com/en-us/library/aa702682.aspx

I have this in my web.config:

 <serviceHostingEnvironment aspNetCompatibilityEnabled="true">

But this :

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

returns a valid context (and proof that I'm in a .svc file)

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

I basically need a way to tell if I'm in SVC or ASMX. How should I do that?

like image 939
Simon_Weaver Avatar asked Jan 16 '10 07:01

Simon_Weaver


1 Answers

No, when ASP.NET compatibility is enabled, that is the whole point - that the WCF service is executed in the context of the ASP.NET pipeline and you have full access to the ASP.NET services such as Cache, Session State, Forms Authentication, etc.

If you need to tell if the current request is to a WCF service or a ASMX service you could:

  • Check the end of the string you've already dumped in your experiment
  • Check the HttpContext.Current.Handler

Note in all cases you won't have a HttpContext.Current when ASP.NET compatibility is not enabled in which case you can be certain you're not running in the scope of a ASMX web service.

Excerpt from the page you linked: Hosting WCF Services in ASP.NET Compatibility Mode

Unlike the default side-by-side configuration, where the WCF hosting infrastructure intercepts WCF messages and routes them out of the HTTP pipeline, WCF services running in ASP.NET Compatibility Mode participate fully in the ASP.NET HTTP request lifecycle. In compatibility mode, WCF services use the HTTP pipeline through an IHttpHandler implementation, similar to the way requests for ASPX pages and ASMX Web services are handled. As a result, WCF behaves identically to ASMX with respect to the following ASP.NET features:

HttpContext: WCF services running in ASP.NET Compatibility Mode can access Current and its associated state.

like image 186
Josh Avatar answered Sep 28 '22 01:09

Josh