У нас есть приложение ASP.NET MVC 4, которое ссылается на устаревший собственный код. Проблема в том, что этот унаследованный код имеет глобальную статистику, которая создается при запуске, но поскольку нативный код ничего не знает о доменах приложений, этот код не -повторно инициализируется при перезагрузке домена приложения. Это вызывает неправильное поведение или сбои в нашем приложении, пока процесс пула приложений не будет перезапущен.
Из-за этого я хотел бы заставить пул приложений перезапускаться всякий раз, когда перезапускается домен приложения нашего приложения. Есть ли для этого настройка в IIS или код, который я могу вызвать в своем приложении, когда домен выгружается?
Немного информации о моей настройке,
Обновление
Основываясь на приведенном ниже ответе, я подключился к событию выгрузки AppDomain и использовал код, аналогичный следующему, для повторного использования пула приложений.
try
{
// Find the worker process running us and from that our AppPool
int pid = Process.GetCurrentProcess().Id;
var manager = new ServerManager();
WorkerProcess process = (from p in manager.WorkerProcesses where p.ProcessId == pid select p).FirstOrDefault();
// From the name, find the AppPool and recycle it
if ( process != null )
{
ApplicationPool pool = (from p in manager.ApplicationPools where p.Name == process.AppPoolName select p).FirstOrDefault();
if ( pool != null )
{
log.Info( "Recycling Application Pool " + pool.Name );
pool.Recycle();
}
}
}
catch ( NotImplementedException nie )
{
log.InfoException( "Server Management functions are not implemented. We are likely running under IIS Express. Shutting down server.", nie );
Environment.Exit( 0 );
}