【问题标题】:Webmethods with HttpContext.Current.User.Identity.IsAuthenticated stop working after inactivity on Azure带有 HttpContext.Current.User.Identity.IsAuthenticated 的 Web 方法在 Azure 上不活动后停止工作
【发布时间】:2015-05-17 09:28:55
【问题描述】:

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

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

我已经在本地服务器上测试了这些页面,并且一切正常,即使在长时间不活动之后也是如此。这是一个网络方法的示例

[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();
}

我调用 web 方法如下:

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 再次开始运行,但仅运行了几分钟,然后再次发生相同的行为。

怎么了?

【问题讨论】:

  • 是否有任何特殊原因您将用户身份验证放在方法而不是 Global.asax 或某些基类中?
  • 我正在检查用户是否经过身份验证,以便在这些 webmethods 中相应地创建字符串
  • 那么停止工作是什么意思?你的意思是当认证停止工作时它总是进入else逻辑?
  • 不,它甚至没有进入 else 逻辑......当我点击一个触发函数的按钮时没有任何反应
  • 如何调用方法?你在使用 jquery ajax 吗?你能写一些关于你如何称呼它的代码吗?顺便说一句,您使用什么身份验证?您是否将其存储在会话中?

标签: c# asp.net azure session-variables webmethod


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多