我在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。我该怎么做?
答案 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兼容模式可以访问 当前及其相关状态。