Гипотетическая ситуация: скажем, у меня есть сторонняя сборка .net, используемая в веб-системе ASP.Net, над которой я работаю, которая время от времени дает сбой. Когда он это делает, все его вызовы вызывают исключения, пока система не будет перезагружена. Это, очевидно, не совсем оптимально.
Есть ли способ перезагрузить только эту сборку из обработчика исключений?
(Приложение: конечно, правильный ответ здесь - заставить поставщика исправить их ошибку. Однако этот поставщик несколько ... "неохотно" отвечает на наши электронные письма. Итак, эта перезагрузка идея сборки возникла сегодня утром. как кусок клейкой ленты в стиле МакГайвера. А потом мы поняли, что никто из нас не знает, как это делать.)





Гипотетически ... вернитесь к своему стороннему поставщику и попросите его исправить свою ошибку.
Это, конечно, правильный ответ. Это наша попытка прикрыть проблему клейкой лентой, в то время как мы пытаемся убедить поставщика, что это действительно их проблема.
Рассматривали ли вы возможность того, что вы не можете правильно использовать стороннюю сборку? Возможно, вы не освобождаете ресурс, память или соединение sql после использования ... Серьезно, я бы сначала проверил его, прежде чем делать что-либо радикальное.
Короткий ответ: да, мы довольно долго об этом думали. Это устаревшая COM-DLL с (плохой) оберткой .net, и эта штука повсюду утекает в память. Мы почти уверены, что решили все возможные проблемы с ресурсами на данный момент, и это работает лучше, только не Правильно.
вы можете переработать пул приложений, но это приведет к отключению всех текущих пользователей и потере их информации о сеансе - что может не иметь значения, если сайт уже залит плохой dll.
На мой взгляд, это лучше, чем программное изменение web.config.
Хорошо, настоящий ответ ... Когда файл Web.Config изменяется, приложение перекомпилируется, а пул приложений сбрасывается.
Итак (и я ненавижу это говорить) программно измените файл web.config.
Кстати, я не рекомендую это делать, так что вы можете сохранить свой голос против кого-то другого.
Когда дело касается дрянных сторонних вещей, все простительно. Настоящая ошибка заключалась в том, чтобы с самого начала использовать его - как только эта ошибка была сделана, вы делаете то, что должны.
Тяжелые ситуации требуют кардинальных мер!
Это именно тот сумасшедший ответ, который я искал. +1 точно. И да, для записи, это сторонний компонент, который мы используем во время моих протестов (но, естественно, мне поручено исправить проблемы.)
Crystal Reports? - Я знаю, ты не можешь сказать.
Может случиться так, что в случае странного сбоя он по-прежнему оставляет активным процесс, который предпринимает любые последующие попытки вызвать DLL. Если это так, вы можете найти его программно и убить, что может решить проблему, требующую перезагрузки.
Вызов HttpRuntime.UnloadAppDomain () заставит приложение завершить работу и перезапустить его при поступлении следующего веб-запроса. Это приводит к перезагрузке всего с нуля и должно устранить поврежденные данные сборки.
Конечно, это убьет все активные сеансы, но если приложение все равно вылетит из строя, это, вероятно, приемлемо.
+1 так как это ВААААЙ лучше моего решения. Я не знал, что это существует. Я просто надеюсь, что мне это никогда не понадобится. :)
Помимо изменения web.config, вы можете создать произвольный файл в папке bin. Это перезапустит ваше приложение.
Конечно, этот поставщик не единственный поставщик, который поставляет компоненты такого типа. Может быть, вы могли бы найти другой продукт с лучшей поддержкой?