2008-11-13 4 views
2

Гипотетическая ситуация: допустим, у меня есть сторонняя сборка .net, используемая в веб-системе ASP.Net, и я работаю над тем, что только что вызывает сбои время от времени. Когда это происходит, все вызовы на него вызывают исключения до перезагрузки системы. Это, очевидно, немного малооптимально.Есть ли способ программно «перезагрузить» сборку .net?

Есть ли способ перезагрузить только эту сборку из обработчика исключений?

(добавление: конечно, правильный ответ заключается в том, чтобы заставить поставщика исправить свою ошибку. Однако данный продавец несколько ... «неохотно» отвечает на наши электронные письма. Таким образом, эта перезагрузка идеи сборки появилось сегодня утром как кусок ленты с магнитной лентой MacGyver, и тогда мы поняли, что никто из нас не знал, как это сделать.)

+0

Несомненно, этот поставщик не является единственным поставщиком, который поставляет этот компонент. Может быть, вы могли бы найти еще один продукт с более высоким качеством? – 2008-11-13 23:27:30

ответ

7

Вызов HttpRuntime.UnloadAppDomain() заставит приложение завершить работу и перезапустить при поступлении следующего веб-запроса. Это приводит к тому, что все перезагружается с нуля и устраняет поврежденные данные сборки.

Предоставлено, это убьет любые активные сеансы, но если приложение по существу разбито, это, вероятно, приемлемо.

2

Гипотетически ... вернитесь к стороннему поставщику и попросите их исправить их ошибка.

+0

Это, конечно, правильный ответ. Это наша попытка похлопать канальную ленту с проблемой, в то время как мы пытаемся убедить продавца, что это действительно их проблема. – 2008-11-13 19:04:23

+0

Вы считали, что не можете использовать стороннюю сборку правильно? Возможно, после использования вы не выпускаете ресурс, память или sql-соединение ... Я бы, серьезно, сначала проверил там, прежде чем делать что-то решительное. – BoltBait 2008-11-13 19:22:38

+0

Короткий ответ: да, мы рассматривали это совсем немного. Это COM-библиотека старого SLOL с (бедной) оберткой .net, сшитой, и эта вещь теряет память повсюду. Мы уверены, что на данный момент мы решили каждую проблему с ресурсами, и она работает * лучше *, просто не * правильно. * – 2008-11-13 19:39:14

4

вы можете переработать приложение бассейн, но это будет удар от всех текущих пользователей и теряют данные сеанса - который может не иметь значения, если сайт обливали уже плохим DLL в любом случае

+0

Это лучше, чем программное изменение web.config, на мой взгляд. – 2008-11-13 21:06:13

4

OK, реальный ответ .. Когда файл Web.Config изменяется, приложение перекомпилируется, и пул приложений будет сброшен.

Итак, (и я ненавижу сказать это) программным образом измените ваш файл web.config.

BTW, я не рекомендую это делать, поэтому вы можете сэкономить свое голосу за кого-то другого.

0

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

0

Помимо изменения файла web.config вы можете создать произвольный файл в папке bin. Это приведет к перезагрузке вашего приложения.

Смежные вопросы