HttpContext.Current.User.Identity.IsAuthenticated 的 Webmethods 在 Azure 上不活动后停止工作
Webmethods with HttpContext.Current.User.Identity.IsAuthenticated stop working after inactivity on Azure
我正在使用使用 Ajax(json)/Webmethod 函数的页面测试 Azure 服务器。
其中一些函数在 运行 编码之前检查 HttpContext.Current.User.Identity.IsAuthenticated
。不幸的是,如果用户登录并且页面没有向服务器发出完整的回发请求,只有那些检查 HttpContext.Current.User.Identity.IsAuthenticated
的 webmethods 函数会在几分钟后完全停止 运行ning 而不会给出任何错误.他们甚至没有 运行 else
代码块(见下文)。
我已经在本地服务器上测试了这些页面,一切正常,即使在长时间不活动之后也是如此。这是一个 web 方法的例子
[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();
}
我调用网络方法如下:
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 停止 运行ning 并且我刷新页面时,用户仍然登录并且 webmethods 再次启动 运行ning 但只有几分钟并且然后再次发生相同的行为。
怎么了?
问题是由会话变量引起的,而不是由身份验证引起的。事实上,Azure 中的 ASP.NET 应用程序不会使用默认的 "inProc" 方法维护会话状态。 Azure 使用其他方法,其中一些方法很昂贵:Table 存储、SQL Azure 或 Windows Azure 缓存。
我正在使用使用 Ajax(json)/Webmethod 函数的页面测试 Azure 服务器。
其中一些函数在 运行 编码之前检查 HttpContext.Current.User.Identity.IsAuthenticated
。不幸的是,如果用户登录并且页面没有向服务器发出完整的回发请求,只有那些检查 HttpContext.Current.User.Identity.IsAuthenticated
的 webmethods 函数会在几分钟后完全停止 运行ning 而不会给出任何错误.他们甚至没有 运行 else
代码块(见下文)。
我已经在本地服务器上测试了这些页面,一切正常,即使在长时间不活动之后也是如此。这是一个 web 方法的例子
[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();
}
我调用网络方法如下:
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 停止 运行ning 并且我刷新页面时,用户仍然登录并且 webmethods 再次启动 运行ning 但只有几分钟并且然后再次发生相同的行为。
怎么了?
问题是由会话变量引起的,而不是由身份验证引起的。事实上,Azure 中的 ASP.NET 应用程序不会使用默认的 "inProc" 方法维护会话状态。 Azure 使用其他方法,其中一些方法很昂贵:Table 存储、SQL Azure 或 Windows Azure 缓存。