Действие MVC GET занимает 0,1 секунды, то же действие POST занимает 30 секунд.

Учитывая два действия в контроллере ASP.NET MVC, которые возвращают одно и то же, но одно обрабатывает запросы GET, а другое — запросы POST. Действие GET всегда возвращается через 0,1 секунды, а действие POST всегда возвращается через 30 секунд. Само действие выполняется очень быстро, но по какой-то причине браузер (IE и Chrome) показывает 30-секундное ожидание в Network Profiler — что может быть причиной задержки? Есть ли способ отладить это?

    [HttpGet]
    public ActionResult MyAction()
    {
        return View("MyView");
    }

    [HttpPost]
    public ActionResult MyAction(object obj)
    {
        return View("MyView");
    }

Сетевой профиль для каждого:

http://MyDevServer.com:8080/MyController/MyAction Метод: GET Статус: 200 OK Время : 0,194 секунды

Метод http://MyDevServer.com:8080/MyController/MyAction: Статус POST: 200 OK Время : 30,39 секунды


person Will    schedule 08.08.2013    source источник
comment
Это размещено в IIS?   -  person rene    schedule 08.08.2013
comment
Если вы устанавливаете точку останова в POST-версии вашего метода действия, требуется ли некоторое время, чтобы запрос достиг метода действия, или он доходит до него быстро, но требует времени для возврата клиенту?   -  person Cloud SME    schedule 08.08.2013
comment
Вы должны искать проблему в своем коде (покажите нам свой реальный код в ActionResult) в db.connection.   -  person Andrey Gubal    schedule 08.08.2013
comment
Согласованный. Между этими двумя действиями не должно быть никакой разницы, поэтому в вашем реальном коде должно быть что-то, что вызывает проблему.   -  person Chris Pratt    schedule 08.08.2013
comment
1. на моем сервере Dev, 2. Он очень быстро достигает и перешагивает метод возврата, а затем возвращается к клиенту целую вечность. 3. Это реальный код - просто изменены имена переменных, согласен, разницы быть не должно - это сайт с движками просмотра Razor и ASP, фреймворк, который я пытаюсь добавить, это DevExpress и эти действия для одного из элементов управления. Как я могу профилировать, что происходит между возвратом действия и получением браузера? Спасибо за вашу помощь   -  person Will    schedule 08.08.2013


Ответы (1)


Несколько вещей, на которые стоит обратить внимание:

  1. У вас есть фрагмент кода, который подключается к стеку и задерживает выполнение, механизм просмотра, фильтр или провайдер? Вы сможете узнать это с помощью профилировщика, такого как EQATEC Profiler (черт возьми, он перешла к Telerik, но до конца года она по-прежнему бесплатна).

    1а. Вы позволяете MVC находить ваши представления стандартным способом? Вы добавляете в ViewLocations каким-либо образом?

  2. Что происходит на вашем сервере? Наблюдаете ли вы какие-либо всплески производительности по мере прохождения POST, указывающие на то, что происходит что-то неблагоприятное?

  3. Что происходит, когда вы удаляете объектный аргумент? Любое изменение?

  4. Вы говорите, что это это код. Используете ли вы Entity Framework в этом проекте? Это иногда может значительно увеличить производительность в зависимости от настройки.

  5. Опишите свой пул приложений в IIS. Режим? Другие настройки?

person Moby's Stunt Double    schedule 08.08.2013
comment
Я развернул в IIS, и проблем нет, поэтому проблема только в моем сервере разработки. Я нашел эту stackoverflow.com/questions/12606898/, которые предложили Content-Length, но я проверил, и это отправляется правильно - person Will; 09.08.2013