【问题标题】:Asp.net 2.0 Button click method works inconsistently in a web gardenAsp.net 2.0 按钮单击方法在网络花园中工作不一致
【发布时间】:2009-10-19 16:01:34
【问题描述】:

我们有一个在 IIS7 上运行的 asp.net 2.0 Web 应用程序。它使用网络花园和 asp.net 状态服务器。

在页面上,有很多用户控件。在其中一个用户控件上,我们添加了对 button_click 事件的日志记录,该事件在该方法运行时会在日志中写入一行。当我们单击按钮时,它只会定期显示日志条目——表明单击按钮时事件并不总是触发。我们添加了日志记录,因为我们怀疑当我们单击按钮时按钮单击方法并不总是在运行。我们看到的证据似乎证实了我们的怀疑。

当我们移除网络花园并将网站放回单个应用程序池时,应用程序恢复正常 - 每次都会触发按钮事件。当我们在本地开发者机器上运行应用程序时,它也能正常工作。

有没有其他人看到过这样的行为?对于我们可以采取哪些措施来缩小问题范围,有什么建议吗?

编辑:这是所要求的事件来源:

protected void btnSearch_Click(object sender, EventArgs e)
    {
        Log.Error("Searching...");

        SearchArgs args = CtrlToSearchArgs();
        SessionManager.SearchQueryString = Request.QueryString;

        string url = NavigationManager.BuildSearchUrl(args, null, "*** page url removed here ***");

        if (args.PageSize.HasValue)
        {
            SessionManager.SetInSession(SessionManager.Key.SEARCH_PAGESIZE, args.PageSize.Value.ToString());
        }
        else
        {
            SessionManager.SetInSession(SessionManager.Key.SEARCH_PAGESIZE, "10");
        }

        SessionManager.SearchPanelData = url;

        //Set the new args into the session
        SessionManager.SearchControlArgs = args;

        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Redirect(url);
    }

编辑#2:澄清 - 此设置未使用多个服务器,并且不在负载平衡器下。我们在单个服务器上使用多个 AppPool。

【问题讨论】:

  • 发布 button_click 代码...

标签: asp.net iis-7 web-garden session-state-server


【解决方案1】:

设置您的机器密钥:http://msdn.microsoft.com/en-us/library/ms998288.aspx

当您没有指定机器密钥时,这不是唯一失败的情况,即如果重新启动应用程序池,生成的机器密钥更改并且您在任何依赖它的情况下都会失败,即视图状态验证是一个,另一个:ASP.NET MVC Validation of ViewState MAC failed

【讨论】:

  • 刚刚发现我们确实设置了机器密钥。
【解决方案2】:

您可能希望在负载均衡器上启用粘性会话。

过去我也遇到过类似的情况,页面由服务器 A 渲染,但是回发到服务器 B 导致无法验证回发。

或者,您可能还想手动查看setting your MachineKey,而不是使用粘性会话,以使所有服务器都相同。

【讨论】:

  • 我们实际上并没有运行多个服务器或在负载平衡器下运行。出于性能原因,我们只是在同一台服务器上运行多个 AppPool。
【解决方案3】:

感谢 Freddy 和 Jason 发布答案。

在我们的故障排除过程中,我们决定恢复为单个应用程序池。无论如何,这似乎是一种非常非正统的结构方式。但是,这也没有解决问题。

在转了一圈又让几个人检查代码之后,我们终于发现我们有一个存储在 session 中的对象,其中包含静态变量。我们解决了这个问题,网站开始按预期运行。

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 2010-10-11
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多