У нас очень странная проблема, которую нам еще предстоит диагностировать.В нашем приложении есть ряд конкретных действий ASP.NET MVC, которые не выполняются из-за отсутствия обязательного параметра:
The parameters dictionary contains a null entry for parameter 'myVariable' of non-nullable type... etc
Каждый из них является своего рода HTTP POST, и поэтому мы ожидаем увидеть данные формы.В некоторых случаях должно быть более дюжины переменных.
Мы используем ELMAH для сбора ошибок в веб-приложении, и с помощью этого инструмента вы обычно можете видеть фактические данные формы, которые публикуются во время неудачного запроса.Однако в этих конкретных ошибках, когда должно быть несколько переменных, вся форма отсутствует!
Мы просто не можем воспроизвести это по требованию.Однако с объемом трафика в нашем приложении мы видим эти ошибки несколько десятков раз в день.Пользователи также не могут воспроизвести ошибку, и попытка выполнить то же действие в веб-браузере работает второй раз.
Мы также не уверены на 100%, где потеряны данные.Это в веб-браузере?Внутри конвейера IIS?Или это ASP.NET MVC, который его сбрасывает?Совершенно неуверенно.
Если кто-то и может помочь нам в устранении и / или диагностике этой проблемы, это будет очень полезно.
Обновление 1. Мы обнаружили, что длина содержимого указана в заголовках HTTP.имеет размер, который предполагает наличие некоторого содержимого в запросе.Однако коллекция форм по запросу пуста (согласно ELMAH).Поэтому мы добавили некоторые дополнительные средства ведения журнала для отслеживания фактической длины полученного содержимого и самого содержимого.
Обновление 2: мы обнаружили, что хотя HTTP-заголовок CONTENT_LENGTH имеет правильный размер (для аналогичных запросов), сам контент отсутствует.Поток содержит 0 байтов.
Мы также смогли сузить проблему до Internet Explorer, и, похоже, мы не можем этого добиться с другими браузерами.
Нам иногда удавалось воссоздатьпроблема, вызвав несколько перекрывающихся запросов AJAX в браузере, а затем либо обновив, либо перенаправив.Как будто Internet Explorer закрывает соединение перед полной записью потокового буфера.
Мы не смогли отследить это с помощью Fiddler.Используя Fiddler, кажется, что невозможно воссоздать конкретную ситуацию.
Обновление 3: все, что мы видели, можно объяснить следующим образом: Почему Internet Explorer не отправляет тело сообщения HTTP после вызова Ajax послепровал?