C# HttpContext.Current.User.Identity.IsAuthenticated的Webmethods在Azure上不活动后停止工作

C# HttpContext.Current.User.Identity.IsAuthenticated的Webmethods在Azure上不活动后停止工作,c#,asp.net,azure,session-variables,webmethod,C#,Asp.net,Azure,Session Variables,Webmethod,我正在用使用Ajax(json)/Webmethod函数的页面测试Azure服务器 其中一些函数在运行代码之前检查HttpContext.Current.User.Identity.IsAuthenticated。不幸的是,如果用户登录并且页面没有向服务器发出完整的回发请求,那么只有那些检查HttpContext.Current.user.Identity.IsAuthenticated的webmethods函数才会在几分钟后完全停止运行,而不会给出任何错误。它们甚至不运行else代码块(见下文

我正在用使用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再次开始运行,但只运行了几分钟,然后同样的行为再次发生


出什么问题了?

问题是由会话变量而不是自动验证引起的。事实上,Azure中的ASP.NET应用程序不会使用默认的“inProc”方法维护会话状态。Azure使用其他方法,其中一些方法成本高昂:表存储、SQL Azure、,或Windows Azure缓存。

是否有任何特殊原因将用户身份验证放在方法上而不是放在Global.asax或某个基类上?我正在检查用户是否经过身份验证,以便在这些WebMethods中相应地创建字符串停止工作是什么意思?您的意思是当身份验证停止工作时,它总是输入
else
逻辑吗?不,它甚至不输入else逻辑。。。。当我点击一个触发函数的按钮时,什么也没发生。你怎么调用这个方法?您正在使用jQueryAjax吗?你能给它写些代码吗?顺便问一下,您使用什么身份验证?您是否将其存储在会话中?