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

Sim*_*ver 9 wcf

我认为HttpContext.Current在WCF服务中应该为null(即使启用了aspNetCompatibilityEnabled).

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

我在web.config中有这个:

 <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
Run Code Online (Sandbox Code Playgroud)

但是这个 :

 HttpContext.Current + " has file path of " + HttpContext.Current.Request.FilePath
Run Code Online (Sandbox Code Playgroud)

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

 "System.Web.HttpContext has file path of /rrmvc/MVCServices/OrderPipelineService.svc"
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*osh 13

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

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

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

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

与默认的并行配置不同,WCF托管基础架构拦截WCF消息并将其路由出HTTP管道,在ASP.NET兼容模式下运行的WCF服务完全参与ASP.NET HTTP请求生命周期.在兼容模式下,WCF服务通过IHttpHandler实现使用HTTP管道,类似于处理ASPX页面和ASMX Web服务请求的方式.因此,对于以下ASP.NET功能,WCF与ASMX的行为完全相同:

HttpContext:在ASP.NET兼容模式下运行的WCF服务可以访问Current及其关联状态.