Иногда я получаю исключение в своей продуктивной среде:
- Информация о процессе
- Идентификатор процесса: 3832
- Имя процесса: w3wp.exe
- Имя учетной записи: УСЛУГИ NT AUTHORITY\NETWORK
- Информация об исключении
- Тип исключительной ситуации: Система. Сеть. HttpException
- Сообщение об исключении: Сервер не может установить состояние после того, как HTTP-заголовки были отправлены.
- Запросите информацию
- URL запроса: http://www.myulr.pl/logon
- Путь запроса: / вход в систему
- Пользовательский адрес узла: 10.11.9.1
- Пользователь: user001
- Аутентифицируется: Верный
- Тип аутентификации: формы
- Имя учетной записи потока: УСЛУГИ NT AUTHORITY\NETWORK
- Информация о потоке
- Идентификатор потока: 10
- Имя учетной записи потока: УСЛУГИ NT AUTHORITY\NETWORK
- Является олицетворением: Ложь
Stack trace: at System.Web.HttpResponse.set_StatusCode(Int32 value) at
System.Web.HttpResponseWrapper.set_StatusCode(Int32 value) at
System.Web.Mvc.HandleErrorAttribute.OnException(ExceptionContext filterContext) at
System.Web.Mvc.ControllerActionInvoker.InvokeExceptionFilters(ControllerContext controllerContext, IList(1) filters, Exception exception) at
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) at System.Web.Mvc.Controller.ExecuteCore() at
System.Web.Mvc.MvcHandler.<>c__DisplayClass8.b__4() at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.b__0() at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8(1).b__7(IAsyncResult _) at
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult(1).End() at
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) at
System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& ompletedSynchronously)
Я не сделал заметил эту ошибку на моей тестовой среде, что я должен проверить?
Я использую ASP.NET MVC 2 (Предвыпускная версия 2)
Я в целом согласен с Vagrant по поводу причины:
Если я не согласен с Vagrant, это средство «не вызывать ошибок в привязке» - вы все равно можете столкнуться с ошибками времени выполнения в привязке View, например. исключения нулевой ссылки.
Лучшее решение для этого - убедиться, что Response.BufferOutput = true;
до того, как какие-либо байты будут отправлены в поток ответа. например в действии вашего контроллера или On_Begin_Request в приложении. Это позволяет передавать серверы, устанавливать файлы cookie / заголовки и т. Д. Вплоть до естественного завершения ответа или вызова end / flush.
Конечно, также проверьте, не сбрасывается ли буфер / не устанавливается ли значение false и в дальнейшем в стеке.
Ссылка MSDN: HttpResponse.BufferOutput
Я помню часть этого исключения: "Cannot modify header information - headers already sent by", возникающего в PHP. Оно возникало, когда заголовки уже были отправлены на этапе перенаправления и генерировался любой другой вывод, например:
echo "hello"; header("Location:http://stackoverflow.com");
Извините и поправьте меня, если я не прав, но я все еще изучаю технологии MS и пытался помочь.
HTTP-сервер не отправляет заголовок ответа обратно клиенту, пока вы не укажете ошибку или не начнете отправлять данные. Если вы начнете отправлять данные обратно клиенту, то сервер должен сначала отправить заголовок ответа (который содержит код состояния). Очевидно, что после отправки заголовка вы больше не можете помещать код статуса в заголовок.
Вот обычная проблема. Вы запускаете страницу и отправляете несколько начальных тегов (например,
). Затем сервер отправляет эти теги клиенту после первой отправки заголовка ответа HTTP с предполагаемым статусом УСПЕХ. Теперь вы начинаете работать над основной частью страницы и обнаруживаете проблему. Вы не можете отправить ошибку на этом этапе, потому что заголовок ответа, который будет содержать статус ошибки, уже отправлен.
Решение заключается в следующем: Прежде чем создавать какой-либо контент, проверьте, нет ли ошибок. Только тогда, когда вы убедились, что проблем не будет, вы можете начать отправлять контент, например тег.
В вашем случае кажется, что у вас есть страница входа в систему, которая обрабатывает POST-запрос из формы. Вы, вероятно, выбросите начальный HTML-код, а затем проверьте, действительны ли имя пользователя и пароль. Вместо этого вы должны сначала аутентифицировать пользователя / пароль, прежде чем генерировать любой HTML.