2015-08-28 3 views
0

У меня есть форма следующего следующего сходства ...Имеют ли представления MVC тайм-аут, в котором операция HttpPost не будет выполнена?

@using (Html.BeginForm()) 
{ 
    @* Model elements go here *@ 
    <input type="submit" value="Save" /> 
} 

и следующие методы для этого вида, который мы будем просто называть «Test»

public ActionResult Test() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult Test(ModelObj m) 
{ 
    try{ 
     //do save logic with ModelObj entity 
    } 
    catch(Exception ex){ 
     //Log error - send e-mail to self and display 'save failed' msg to front end user 
    } 
    return View(m); 
} 

Этого кодом функция, как ожидается, при загрузке и другие пользователи (я не могу воссоздать проблему самостоятельно) жалуются, что в более длительное время ожидания (оставляя страницу бездействующей более 10 минут), нажав «Сохранить», страница делает обратную передачу (страница мигает и перезагружается), но данные не были сохранены.

Я добавил сообщение об ошибке в try/catch, чтобы попытаться выяснить проблему, но я не получаю никаких сообщений об ошибках, и пользователи не видят сообщение об ошибке «сохранить сбой», предоставленное блоком catch.

Я могу только представить себе, что это проблема сеанса, но я исключил все свои собственные переменные сеанса на этой странице, и мне интересно, имеет ли MVC собственный тайм-аут для представления (где он просто отбрасывает все информации о модели). Если это так, есть ли способ увеличить это? Любые другие возможности, которые я должен искать?

+0

Не контролирует ли IIS это? –

+0

Похоже, что значение по умолчанию составляет 110 секунд: http://stackoverflow.com/questions/579523/how-do-set-the-request-timeout-for-one-controller-action-in-an-asp-net -mvc-app В любом случае я не думаю, что это ваша проблема. Я думаю, что возможно, что ваша логика ведет себя по-разному для разных пользователей. Вызывает также вопрос проверки? – Marko

+0

@Marko Я также подумал, что это проблема проверки (так как это использует базу данных, которую я сам не создавал). Я добавил валидацию и Model.IsValid вокруг try catch, но в итоге не смог найти ничего там. – sebe

ответ

0

Это звучит как проблема с сеансом для меня. Возможно, вы могли бы попытаться установить тайм-аут сеанса на очень маленькое значение (например, 1 минуту) и посмотреть, будет ли поведение повторяться после этого времени? Кроме того, вы можете попробовать перезапустить IIS на странице - это должно эффективно очистить сеанс. Если это окажется проблемой, вы всегда можете увеличить тайм-аут состояния сеанса.

В случае, если вы не знали, значение тайм-аута состояния сеанса может быть изменен в web.config:

<sessionState timeout="30" /> 

Или в диспетчере IIS под состояния сеанса для конкретного сайта.

+0

Просто попробовал установить это значение timeout = "1" и не смог воспроизвести проблему, как описано. В настоящее время я разрешаю ему сидеть, пока я занимаюсь другой работой в течение следующих 30 минут, чтобы понять, изменит ли это вопрос о воспроизведении ошибки для меня. :) – sebe