У меня есть приложение IIS с долгоживущим синглтоном. В редких случаях этот синглтон зависает при попытке получить ресурс. Известно, что перезапуск пула приложений приведет к тому, что ресурс снова станет доступным. Предполагая, что это редкое событие может быть перехвачено самим приложением с помощью StopWatch
или аналогичного, может ли обработчик событий в самом приложении повторно использовать пул приложений? Это серьезный поступок, но он лучше, чем позволять ему зависать до следующего запланированного перезапуска IIS. Причина зависания связана с этим ресурсом и его взаимодействием с IIS, и у меня нет средств исправить это. Обратите внимание, что вызов для получения ресурса является синхронным. Если да, просьба предоставить информацию о том, как это сделать.
Ответ на комментарии. Что касается перезапуска домена приложения и повторного использования пула приложений, мои наблюдения таковы: перезапуск домена приложения - одна из причин зависания. ресурс - это неуправляемая родная dll, которая загружается не моим собственным кодом. Возможно, я найду API для выгрузки и загрузки неуправляемой неуправляемой dll. Но пока я вручную, а не программно, перезапускаю пул приложений для восстановления операций.
После повторного использования пула приложений вызывается деструктор синглтона, и в нем ресурс после вызова внешнего API Dispose () переводится в хорошее состояние, предположительно выгружается, но я еще не проверил это.
HttpRuntime.UnloadAppDomain();
- person Cory Charlton   schedule 26.08.2015