我认为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及其关联状态.