Есть ли способ программно "перезагрузить" сборку .net?

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

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

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

Конечно, этот поставщик не единственный поставщик, который поставляет компоненты такого типа. Может быть, вы могли бы найти другой продукт с лучшей поддержкой?

Erik Forbes 14.11.2008 02:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
343
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

Это, конечно, правильный ответ. Это наша попытка прикрыть проблему клейкой лентой, в то время как мы пытаемся убедить поставщика, что это действительно их проблема.

Electrons_Ahoy 13.11.2008 22:04

Рассматривали ли вы возможность того, что вы не можете правильно использовать стороннюю сборку? Возможно, вы не освобождаете ресурс, память или соединение sql после использования ... Серьезно, я бы сначала проверил его, прежде чем делать что-либо радикальное.

BoltBait 13.11.2008 22:22

Короткий ответ: да, мы довольно долго об этом думали. Это устаревшая COM-DLL с (плохой) оберткой .net, и эта штука повсюду утекает в память. Мы почти уверены, что решили все возможные проблемы с ресурсами на данный момент, и это работает лучше, только не Правильно.

Electrons_Ahoy 13.11.2008 22:39

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

На мой взгляд, это лучше, чем программное изменение web.config.

John Rudy 14.11.2008 00:06

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

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

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

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

MusiGenesis 13.11.2008 22:14

Тяжелые ситуации требуют кардинальных мер!

BoltBait 13.11.2008 22:15

Это именно тот сумасшедший ответ, который я искал. +1 точно. И да, для записи, это сторонний компонент, который мы используем во время моих протестов (но, естественно, мне поручено исправить проблемы.)

Electrons_Ahoy 13.11.2008 22:21

Crystal Reports? - Я знаю, ты не можешь сказать.

MusiGenesis 13.11.2008 22:47

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

Ответ принят как подходящий

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

Конечно, это убьет все активные сеансы, но если приложение все равно вылетит из строя, это, вероятно, приемлемо.

+1 так как это ВААААЙ лучше моего решения. Я не знал, что это существует. Я просто надеюсь, что мне это никогда не понадобится. :)

BoltBait 14.11.2008 02:24

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

Другие вопросы по теме