带有HttpContext.Current.User.Identity.IsAuthenticated的Webmetho

本文关键字:IsAuthenticated Webmetho Identity User HttpContext Current 带有 | 更新日期: 2023-09-27 17:49:30

我正在使用Ajax(json)/Webmethod函数的页面测试Azure服务器。

其中一些函数在运行代码之前检查HttpContext.Current.User.Identity.IsAuthenticated。不幸的是,如果用户登录并且页面没有向服务器发出完整的回发请求,那么只有那些检查HttpContext.Current.User.Identity.IsAuthenticated的webmethods函数在几分钟后完全停止运行而没有给出任何错误。他们甚至不运行else代码块(见下文)。

我已经在本地服务器上测试了这些页面,即使经过很长一段时间的不活动,一切都工作得很好。下面是一个webmethod

的例子
[WebMethod]
public static string serviceMenu(int IDservice)
{
        StringBuilder SBphotoMenu = new StringBuilder();            
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            // Do stuff
        }
        else
        {
           // Do other stuff
        }
        return SBphotoMenu.ToString();
}

我调用webmethod如下:

function serviceMenu(IDservice) {
$.ajax({
    type: "POST",
    url: "/UserControls/serviceMenu",
    data: "{ IDservice: " + IDservice }",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        // Do Stuff        
    }
})
}

此行为仅在用户登录时发生。现在,如果用户没有登录,那么即使在Azure上,所有功能也可以正常工作。

事实上,当webmethods停止运行,我刷新页面时,用户仍然登录,webmethods再次开始运行,但只持续几分钟,然后同样的行为再次发生。

怎么了?

带有HttpContext.Current.User.Identity.IsAuthenticated的Webmetho

问题是由会话变量引起的,而不是由身份验证引起的。实际上,ASP并不维护会话状态。. NET应用程序在Azure中使用默认的"inProc"方法。Azure使用其他方法,其中一些是昂贵的:表存储,SQL Azure或Windows Azure缓存。