在WCF服务中,HttpContext.Current不应该为null吗?

时间:2010-01-16 07:00:44

标签: wcf

我在WCF服务中认为HttpContext.Current is supposed to be null(即使启用了aspNetCompatibilityEnabled)。

  

MSDN:HttpContext:从内部访问时,Current始终为null   WCF服务。   来自http://msdn.microsoft.com/en-us/library/aa702682.aspx

我在web.config中有这个:

 <serviceHostingEnvironment aspNetCompatibilityEnabled="true">

但是这个:

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

返回一个有效的上下文(并证明我在.svc文件中)

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

我基本上需要一种方法来判断我是在SVC还是ASMX。我该怎么做?

1 个答案:

答案 0 :(得分:13)

不,当启用ASP.NET兼容性时,这就是重点 - WCF服务在ASP.NET管道的上下文中执行,并且您可以完全访问ASP.NET服务,例如Cache,Session状态,表单身份验证等

如果您需要告知当前请求是针对WCF服务还是ASMX服务,您可以:

请注意,在所有情况下,如果未启用ASP.NET兼容性,则不会有HttpContext.Current,在这种情况下,您可以确定您未在ASMX Web服务的范围内运行。

摘自您链接的页面:在ASP.NET兼容模式下托管WCF服务

  

与默认的并排不同   配置,WCF托管的地方   基础设施拦截WCF消息   并将它们从HTTP中路由出去   管道,运行的WCF服务   ASP.NET兼容模式参与   完全在ASP.NET HTTP请求中   生命周期。在兼容模式下,WCF   服务使用HTTP管道   一个IHttpHandler实现,   类似于ASPX的请求方式   页面和ASMX Web服务是   处理。因此,WCF的行为   与ASMX相同   以下ASP.NET功能:

     

HttpContext:运行的WCF服务   ASP.NET兼容模式可以访问   当前及其相关状态。