ASP.Net Post тайм-аут - PullRequest
       23

ASP.Net Post тайм-аут

8 голосов
/ 27 апреля 2011

Я застрял в выпуске asp.net за последние 2 недели.

Сценарий:

Моя страница приложения имеет 3 элемента управления. Редактор WYSIWYG (свободное текстовое поле), текстовое поле для получения названия редактируемой статьи в редакторе WYSIWYG, другое текстовое поле для ввода ключевых слов.

Порядок элементов управления на странице сверху вниз следующим образом,
во-первых, текстовое поле Имя
во-вторых, WYSIWYG редактор
последнее, текстовое поле ключевого слова

Проблема:

Когда пользователь пытается сохранить отредактированные документы, сервер IIS возвращает время ожидания (производство запускается на win 2008). Но, что интересно, информация о поле «Имя текста» и половина редактора WYSIWYG (не совсем половина, она варьируется для каждого случая) сохраняются в базе данных. но последнее поле с текстом ключевого слова не сохраняется. Во время этого веб-сервер некоторое время зависает, выгоняет пользователя, а через несколько минут возвращается к нормальной скорости. Я думаю, что пул приложений переработан. Но все отлично работает на моей среде разработки (на моем ПК работает на Win 7 64bit). Также я установил ValidateRequest = "False" в директиве страницы для среды производства и разработки.

Окружающая среда:

Среда .NET 4.0, ASP.NET
Редактор текстовых полей WYSIWYG
Общий хостинг Windows 2008
SQL Server 2008

Пробные решения (но без прорыва ):

Пробовал с другим браузером Firefox, Chrome, IE и той же ошибкой.
В директиву страницы добавлено ValidateRequest = "False", заменен редактор WYSIWYG на текстовое поле и попытка сохранить, та же проблема.
Просто попытался записать данные поста прямо из объекта page.request. По-прежнему получаются полные данные для «Текстового поля имени» наполовину для текстового поля WYSIWYG и ничего для отдыха.
Нет проблем с подключением к БД или полем таблицы. Я трижды проверил.

Возможные подозрения и вопросы:

Насколько мне известно, нет никаких ограничений на длину данных поста. но в IIS это можно переопределить? интересно, установлено ли это на моем общем хостинге.
В основном данные постов http усекаются где-то между браузером и объектом server.request. В чем причина, если это происходит?
Если http-сообщение урезано, почему целое приложение зависает (или перезапускается)?
Какие меры предосторожности необходимо предпринять при публикации HTML-контента в виде http-сообщения?

Спасибо.

Новая находка:

Проверил мой пост, используя httpfox. Размер сообщения составлял около 9958 байт. Но Firefox отправляет сначала 330 байт данных, а затем веб-страница зависает. Примерно через минуту я получаю код ошибки NS_ERROR_NET_RESET в httpfox.

Проверил мой пост, используя filder2 с IE9. Он пытается отправить первые 512 байт, а затем зависает. Возвращает «ReadResponse () не удалось: сервер не возвратил ответ на этот запрос».

Вопрос:

Скорее всего, это проблема браузера или сервера. Я думаю, что если проблема с браузером, это не произойдет для IE и Firefox.

Обновление:

Скорее всего, проблема изолирована от веб-хостинга. Протестировано путем изменения URL-адреса почтовой формы для другого домена и проверки возможности получения значений в этом домене. Да, это работает. Только это не сработало для моего домена. Интересно, что я проверил это для нормального поста HTML-страницы. это также не сработало. Так что, скорее всего, установлена ​​безопасность, чтобы предотвратить эту или неправильную настройку сервера. Уже положил билет на них и жду.

Как бы то ни было, все ваши отклики помогли мне выделить проблему.

Решено:

Да, эта проблема была на нашем веб-хостинге. До сих пор я слышал от них, что какой-то брандмауэр блокирует большой пост от http. Они сказали, что теперь наш домен находится в белом списке. Во всяком случае, теперь это работает. Но это съело 2 недели моего времени, но это был хороший учебный опыт. Спасибо, ребята, за вашу помощь. Очень ценится.

Ответы [ 3 ]

3 голосов
/ 27 апреля 2011

Я столкнулся с той же ошибкой на одной веб-странице. Это было очень запрограммировано, потому что, если бы я использовал прокси-сервер, ошибка пошла, если мне позвонили с моего компьютера напрямую, у меня было время, и я никогда не продолжал.

Сайт, на котором эта проблема появляется до сих пор, декабрь 2011 г. - http://www.auctionsniper.com/ Этот же сайт работает, если я использую его мобильную версию.

После многих проверок с вышеуказанным сайтом я обнаружил, что проблема была в очень большом состоянии просмотра! Как я нахожу это : я сохраняю html-часть своей страницы, так как она отображается, и начинаю удалять элементы из html и создавать публикацию, пока не обнаружу, что публикация продолжится, когда я урежу сообщение о состоянии представления.

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

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

Некоторые статьи:

http://msdn.microsoft.com/en-us/magazine/cc188774.aspx

Как это сделать учебник:
http://www.dotnetfunda.com/articles/article634-viewstate-patterns-in-aspnet-.aspx

как его сжать
http://www.hanselman.com/blog/ZippingCompressingViewStateInASPNET.aspx
http://www.codeproject.com/KB/viewstate/ViewStateCompression.aspx
http://www.google.com/search?hl=en&safe=off&q=asp.net+compress+viewstate&aq=f&aqi=g1g-b2&aql=f&oq=

Ps: На этой демонстрационной странице бесплатного TextBox , который вы используете, обзорное состояние огромно! и даже не содержит текста, представьте, насколько большим может быть состояние просмотра, если у вас есть текст и текст внутри. Не так бесплатно - стоимость огромного обзора.

Последующие действия

Как говорят Jeyara в комментариях ниже, в конце концов, это была ошибка, блокировка больших файлов сообщений с помощью брандмауэра на хост-сервере.

Таким образом, ошибка / тайм-аут связаны с большими данными обратной передачи, и это редкая, но существующая проблема.

2 голосов
/ 27 апреля 2011

Вы смотрели на то, что отправляется обратно?

Попробуйте что-то вроде Fiddler2 , чтобы просмотреть обратную передачу.

Возможно, что-то урезано в браузере.

Область RichText также может быть ограничена количеством символов, которые она отправит обратно.

1 голос
/ 28 апреля 2011

Попробуйте это, в вашем web.config добавьте следующее

      <httpRuntime maxRequestLength="8096"/>

где-то в теге <system.web>, поскольку длина запроса по умолчанию - 8096, ваши постданные могут быть больше, поэтому добавьте их с большим значением, чем я указал. Надеюсь, это поможет.

...