如何与启用了Ajax的Web服务共享我的asp.net标识

时间:2010-10-12 13:52:29

标签: asp.net ajax wcf

我有一个带有表单模式身份验证的Asp.net应用程序

<authentication mode="Forms">
  <forms loginUrl="Login.aspx" />
</authentication>

我还创建了一个支持Ajax的Web服务来支持页面中的“投票”功能..

  <system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="VoteServiceAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
<services>
  <service name="VoteService">
    <endpoint address="" behaviorConfiguration="VoteServiceAspNetAjaxBehavior"
      binding="webHttpBinding" contract="VoteService" />
  </service>
</services>

在服务实现中,我需要获取asp身份以确定谁在投票......

[OperationContract]
public int VoteForComment(Guid commentId)
{
    string UserName = ServiceSecurityContext.Current.PrimaryIdentity.Name;
    //...
}

但即使登录到asp应用程序后,ServiceSecurityContext.Current也为null。

是否可以配置Web服务以便它可以共享asp身份? 或者,是否有可能以另一种方式找出当前用户?


编辑结果非常简单,aspNetCompatabilityEnabled =“true”表示Web服务可以访问Asp.Net中可用的所有常规状态,我只需要使用System.Web命名空间.... 的 System.Web.HttpContext.Current.User.Identity.Name

1 个答案:

答案 0 :(得分:2)

我最好的选择是在web.config中使用模拟。

<identity impersonate="true"/>
<authentication mode="Forms" />

这将为您提供用户在httpContext和当前线程中提供的名称。

WindowsPrincipal winPrincipal =(WindowsPrincipal)Thread.CurrentPrincipal();

希望这会有所帮助

Rauts