Метод нажатия кнопки Asp.net 2.0 работает некорректно в веб-саду

У нас есть веб-приложение asp.net 2.0, работающее на IIS7. Он использует веб-сады и государственный сервер 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: Уточнение - эта настройка не использует несколько серверов и не находится под балансировщиком нагрузки. Мы используем несколько пулов приложений на одном сервере.


person meh    schedule 19.10.2009    source источник
comment
Разместите код button_click ...   -  person cjk    schedule 19.10.2009


Ответы (3)


Задайте ключ компьютера: http://msdn.microsoft.com/en-us/library/ms998288.aspx

Это не единственный сценарий, который терпит неудачу, когда у вас не указан машинный ключ, т.е. если пул приложений перезапускается, сгенерированный машинный ключ меняется, и вы получаете сбои во всем, что от него зависит, например, проверка состояния просмотра является одной, другой: Проверка ASP.NET MVC MAC ViewState не удалась

person eglasius    schedule 19.10.2009
comment
Только что узнал, что у нас есть набор машинных ключей. - person meh; 19.10.2009

Вероятно, вы захотите включить закрепленные сеансы на балансировщике нагрузки.

Раньше я сталкивался с подобной ситуацией, когда страница была обработана сервером A, но обратная передача была отправлена ​​на сервер B, что привело к ошибке проверки обратной передачи.

В качестве альтернативы, вместо использования липкого сеанса, вы также можете вручную проверить настройку MachineKey быть одинаковым для всех серверов.

person Jason Whitehorn    schedule 19.10.2009
comment
На самом деле мы не запускаем несколько серверов или не работаем под балансировщиком нагрузки. Мы просто запускаем несколько пулов приложений на одном сервере - из соображений производительности. - person meh; 19.10.2009

Спасибо Фредди и Джейсону за отправку ответов.

В процессе устранения неполадок мы решили вернуться к единому пулу приложений. В любом случае это казалось довольно неортодоксальным способом структурировать вещи. Однако это тоже не устранило проблему.

После того, как несколько человек просмотрели код, мы наконец обнаружили, что у нас есть объект, хранящийся в сеансе, который содержит статические переменные. Мы устранили эту проблему, и сайт заработал, как и ожидалось.

person meh    schedule 27.10.2009