#exception #asp-classic #scriptengine
#исключение #asp-classic #scriptengine
Вопрос:
Я кодировал приложение на классическом ASP, которое обращается к двум базам данных Access. У меня была страница, над которой я работал, которая выдавала исключение, что является нормальным во время разработки и не вызывает длительных проблем. Однако на этот раз после исключения любая попытка открыть любую из баз данных приведет к замораживанию сеанса с бесконечным таймаутом скрипта. Если я удалю файл cookie сеанса, я смогу снова получить доступ к страницам ASP, пока не попытаюсь снова открыть базу данных.
База данных, которая была открыта на момент возникновения исключения, остается открытой. Существует файл блокировки LDB, и я не могу переименовать или удалить файл LDB или MDB, хотя я могу загрузить файл MDB с FTP. База данных 2nd Access не открыта, но любая попытка прочитать это также приостанавливает сеанс.
Доступ к HTML-страницам в порядке.
Сайт размещен на Hostway, и они не заинтересованы («Проблема с кодированием = ваша проблема», даже если это оставляет мой сайт мертвым в воде, я подозреваю, до следующей перезагрузки, когда бы это ни было).
Вот дамп с соответствующей страницы ASP, которая вызвала исключение:
Active Server Pages error 'ASP 0115'
Unexpected error
/translatestats.asp
A trappable error (C0000005) occurred in an external object. The script cannot continue running.
Active Server Pages error 'ASP 0240'
Script Engine Exception
/translatestats.asp
A ScriptEngine threw exception 'C0000005' in 'IActiveScript::Close()' from 'CActiveScriptEngine::FinalRelease()'.
Есть ли какой-либо способ удаленно отключить сайт / принудительно закрыть базу данных?
Ответ №1:
Процесс, на котором размещен ваш сайт, перешел в неизвестное состояние. Исключение C0000005 является нарушением доступа.
Единственный способ исправить эту ситуацию — завершить процесс, который на языке IIS означает перезапуск пула приложений, в котором выполняется ваше приложение.
Комментарии:
1. @user89691: я не знаю, я мог бы отправить его на один из моих серверов «с полпути по всему миру», так что география не проблема. Проблема заключается в уровне контроля, который готов предоставить вам ваш хостер. Что больше беспокоит, так это то, что либо вам удалось обнаружить странную ошибку в некоторых очень хорошо установленных компонентах, либо у вашего хост-сервера возникли некоторые проблемы с установкой этих компонентов. Если они остаются безразличными, возможно, вам придется перенести свой бизнес в другое место.
2. Я погуглил содержимое дампа, и кажется, что я каким-то образом отключаю механизм сценариев, вероятно, из-за необработанного исключения. Моим следующим шагом будет попытка запустить код локально в IIS.
3. @user89691: Именно так. Сначала вам действительно следует протестировать весь свой код на локальном IIS. Оставьте свой действующий сайт как рабочий.
4. Запуск IIS локально также оказывается кошмаром. Могу ли я обновить IIS5 до 6 (чтобы соответствовать тому, что запущено на сервере hostway) на WinXPSP3?
5. @user89691: Для работы с классическим ASP различия между IIS 5.1 и IIS 6 незначительны. Я никогда не находил чего-либо, что не удалось выполнить на IIS6, что работало бы на IIS 5.1. И да, версия IIS привязана к версии операционной системы. Можно немного подробнее рассказать о «кошмаре», обычно это довольно прямолинейно.
Ответ №2:
IIS6, по крайней мере, перезапускает пулы приложений каждые 26 часов.
(https://serverfault.com/questions/108898/restart-iis-app-pool-automatically)
попробуйте это для какого-нибудь сценария перезапуска
http://forums.iis.net/t/955382.aspx
Комментарии:
1. Конечно же, сайт вернулся к жизни через 2 часа после того, как я отключил его во второй раз. Теперь я хотел бы получить фрагмент классического ASP, который я мог бы вызвать, чтобы в следующий раз пнуть его по голове… 27 часов между правками — это слишком долго. КСТАТИ, ссылка на скрипт выше ( tonybunce.com/RecycleAppPool.zip ) является нерабочей ссылкой.
2. Я собирался помочь вам найти какой-нибудь скрипт, который поможет вам с этим, но на самом деле лучший способ — исправить ошибку, lol, пожалуйста, попробуйте некоторые из них ( forumtopics.com/busobj/viewtopic.php?t=15541 ) или предоставьте дополнительную информацию, чтобы мы могли помочь вам исправить ошибку: D
3. Спасибо, Рэнди. Проблема во всех решениях, подобных «проверить на наличие неисправной DLL», заключается в том, что у меня нет доступа к серверу (hostway), кроме как по электронной почте бесполезной команде поддержки, которой не интересно, есть ли хотя бы намек на сторонний код. Бьюсь об заклад, я намерен найти ошибку, но в настоящее время каждый раз, когда это происходит, мне приходится уходить на день и делать что-то другое.
4. Обновить. Я наконец-то заработал на localhost и смог запустить проблемный код локально. У меня возникла ошибка «Ошибка 16389 (запрос [Microsoft] [ODBC Microsoft Access Driver] слишком сложный.)» из-за искаженной строки SQL (у меня было «ВЫБРАТЬ COUNT (*) КАК TotalRecords» в качестве запроса — обратите внимание на отсутствие имени таблицы). Возможно, именно это привело к сбою IIS на веб-сервере (это IIS6, я использую IIS 5)
5. @user89691: Я не думаю, что вы обнаружите, что проблема заключается просто в разнице в IIS6 и IIS 5. Это довольно простая ошибка, и серверный процесс не должен блокироваться, как это было только из-за этого.