Events 如何处理Global.asax中接收到的事件sessionsecuritytoken?

Events 如何处理Global.asax中接收到的事件sessionsecuritytoken?,events,global-asax,wif,windows-identity,Events,Global Asax,Wif,Windows Identity,我试图在WIF中设置滑动会话,需要处理 我肯定我在做些傻事。。。但是VS2010不断地告诉我,在下图中没有适用的变量或成员。谁能给我指出正确的方向吗?我到处寻找如何定义此事件处理的实际示例,但找不到一个 Global.asax protected void Application_Start() { FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived +=

我试图在WIF中设置滑动会话,需要处理

我肯定我在做些傻事。。。但是VS2010不断地告诉我,在下图中没有适用的变量或成员。谁能给我指出正确的方向吗?我到处寻找如何定义此事件处理的实际示例,但找不到一个

Global.asax

protected void Application_Start()
{

    FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived 
           += SessionAuthenticationModule_SessionSecurityTokenReceived;
     //         ^^^ There is no applicable variable or member
}



void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
{
            DateTime now = DateTime.UtcNow;
            DateTime validFrom = e.SessionToken.ValidFrom;
            DateTime validTo = e.SessionToken.ValidTo;
            if ((now < validTo) &&
            (now > validFrom.AddMinutes((validTo.Minute - validFrom.Minute) / 2))
            )
            {
                SessionAuthenticationModule sam = sender as SessionAuthenticationModule;
                e.SessionToken =  sam.CreateSessionSecurityToken(
                    e.SessionToken.ClaimsPrincipal, 
                    e.SessionToken.Context,
                    now,
                    now.AddMinutes(2), 
                    e.SessionToken.IsPersistent);
                e.ReissueCookie = true;
            }
            else
            {
                //todo: WSFederationHelper.Instance.PassiveSignOutWhenExpired(e.SessionToken, this.Request.Url);

                // this code from: http://stackoverflow.com/questions/5821351/how-to-set-sliding-expiration-in-my-mvc-app-that-uses-sts-wif-for-authenticati

                var sessionAuthenticationModule = (SessionAuthenticationModule)sender;

                sessionAuthenticationModule.DeleteSessionTokenCookie();

                e.Cancel = true;
            }
  } 
受保护的无效应用程序\u Start()
{
FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived
+=SessionAuthenticationModule_SessionSecurityTokenReceived;
//^^^没有适用的变量或成员
}
作废SessionAuthenticationModule_SessionSecurityTokenReceived(对象发送方,SessionSecurityTokenReceivedEventArgs e)
{
DateTime now=DateTime.UtcNow;
DateTime validFrom=e.SessionToken.validFrom;
DateTime validTo=e.SessionToken.validTo;
如果((现在validFrom.AddMinutes((validTo.Minute-validFrom.Minute)/2))
)
{
SessionAuthenticationModule sam=发送方作为SessionAuthenticationModule;
e、 SessionToken=sam.CreateSessionSecurityToken(
e、 SessionToken.ClaimsPrincipal,
e、 SessionToken.Context,
现在,
现在,添加分钟(2),
e、 SessionToken.IsPersistent);
e、 ReissueCookie=true;
}
其他的
{
//todo:WSFederationHelper.Instance.PassivesInOutwhenExpired(e.SessionToken,this.Request.Url);
//此代码来自:http://stackoverflow.com/questions/5821351/how-to-set-sliding-expiration-in-my-mvc-app-that-uses-sts-wif-for-authenticati
var sessionAuthenticationModule=(sessionAuthenticationModule)发送方;
sessionAuthenticationModule.DeleteSessionTokenCookie();
e、 取消=真;
}
} 

我认为您不需要订阅活动。在开始时删除子说明并仅使用

SessionAuthenticationModule\u SessionSecurityTokenReceived

ASP.Net将为您连接这些内容。(模块必须命名为“SessionAuthenticationModule”,默认情况下为)


如果您正在处理滑动会话,Vittorio的这篇博文非常好:

与其在Global.asax中定义它,不如创建一个继承SessionAuthenticationModule的新类:

public class CustomAuthenticationModule : SessionAuthenticationModule
{
   public CustomAuthenticationModule()
   {
      this.SessionSecurityTokenReceived += new EventHandler<SessionSecurityTokenReceivedEventArgs>(CustomAuthenticationModule_SessionSecurityTokenReceived); 
   }

   void CustomAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
   {
      // Your code
   }
}
公共类CustomAuthenticationModule:SessionAuthenticationModule { 公共CustomAuthenticationModule() { this.SessionSecurityTokenReceived+=新事件处理程序(CustomAuthenticationModule_SessionSecurityTokenReceived); } void CustomAuthenticationModule_SessionSecurityTokenReceived(对象发送方,SessionSecurityTokenReceivedEventArgs e) { //你的代码 } } 然后在web.config中,用新模块替换默认的SessionAuthentication模块:

<modules>
   <add name="SessionAuthenticationModule" type="CustomAuthenticationModule" preCondition="managedHandler"/>
</modules>


简单,工作起来很有魅力!我如何区分需要连接的事件和不需要连接的事件呢?谢谢,我最近一直在努力进行一些配置,这节省了我的时间(我没有一个全局页面),虽然它在global.asax中并不特别,可能应该在其他线程中,但我在别处找不到这段信息。