从WCF Web服务访问HttpContext.Current

Mac*_*ver 29 service wcf httpcontext

我刚开始在ASP.NET AJAX中使用WCF服务.我从Javascript实例化我的WCF服务,然后将字符串变量作为参数传递给我的WCF服务方法(带有OperationContract签名).然后我返回一个.NET对象(使用DataContract定义),该对象绑定到我的自定义Javascript类.我根据登录到我的网络会话的用户进行身份验证时遇到问题.但是,WCF Web服务是一个完全不同的服务,没有HttpContext.Current对象的上下文.访问该对象的最安全的方法是什么?

mth*_*rba 51

您可以HttpContext.Current通过启用AspNetCompatibility 来访问,最好通过配置:

<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  </system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这反过来允许您访问当前用户:HttpContext.Current.User- 这是你所追求的,对吧?

您甚至可以通过使用附加属性修饰服务类来强制执行A​​spNetCompatibility:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
Run Code Online (Sandbox Code Playgroud)

(在System.ServiceModel.Activation命名空间中.)如果该属性到位,除非启用AspNetCompatibility,否则您的服务将无法启动!


fae*_*ter 26

默认情况下,您没有HttpContext,但您在OperationContext(始终存在)或WebOperationContext(仅适用于某些绑定)中存在许多相同的对象.

您可以使用静态.Current属性访问OperationContext或WebOperationContext,如下所示: WebOperationContext.Current

  • +1这应该是接受的答案.我们正在处理可以在Windows服务中托管或自托管的WCF.AspNetCompatilibity只是一个老习惯. (4认同)