从WCF Web服务访问HttpContext.Current
我刚开始在ASP.NET AJAX中使用WCF服务。 我从Javascript实例化我的WCF服务,然后将字符串变量作为参数传递给我的WCF服务方法(带有OperationContract签名)。 然后,我返回一个.NET对象(用DataContract定义),它绑定到我的自定义Javascript类。 基于登录到我的Web会话的用户,我遇到了身份验证问题。 但是,WCF Web服务是一种完全不同的服务,对于HttpContext.Current对象没有上下文。 什么是最安全的方式来访问该对象?
您可以通过启用AspNetCompatibility访问HttpContext.Current
,最好通过配置:
<configuration>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
</configuration>
这反过来又允许你访问当前用户: HttpContext.Current.User
- 这就是你想要的,对吧?
您甚至可以通过使用其他属性装饰您的服务类来强制执行AspNetCompatibility:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
(在System.ServiceModel.Activation
命名空间中。)如果该属性就位,则除非启用AspNetCompatibility,否则您的服务将无法启动!
默认情况下,您没有HttpContext,但OperationContext(始终存在)或WebOperationContext(仅适用于某些绑定)中存在许多相同的对象。
您可以通过使用静态.Current
属性访问OperationContext或WebOperationContext,如下所示: WebOperationContext.Current
如果您不想更改Web.config或者无法更改它:
private string GetClientIPAddress()
{
var props = OperationContext.Current.IncomingMessageProperties;
var endpointProperty = props[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
if (endpointProperty != null)
{
if (endpointProperty.Address == "::1" || String.IsNullOrEmpty(endpointProperty.Address))
return "127.0.0.1";
return endpointProperty.Address;
}
return String.Empty;
}
链接地址: http://www.djcxy.com/p/26897.html
上一篇: access HttpContext.Current from WCF Web Service
下一篇: Access HttpContext inside WCF RequestInterceptor ProcessRequest method