Якщо чесно кажучи, я намагався перетворити брудний трюк на IIS і просто, коли думав, що збираюся піти звідти, зрозумів, що мій спосіб вирішення проблем не працює. Ось що я намагався зробити:
1) У мене є додаток ASP.NET, який має клас Preloader, який успадковує IProcessHostPreloadClient і робить усі важкі ініціалізації при реалізації методу Preload (додаток складний і є частиною величезної системи, тому для встановлення підключення до всього необхідного потрібно приблизно 2 хвилини послуги та попередньо встановити деякі реєстрації Unity).
2) У мене дуже багато роботи, яку потрібно виконати при відключенні програми (скасування підписки, відключення, розпорядження, ...), і, мабуть, найкраще це зробити в методі * Application_End *, розташованому в Global.asax .
3) Все працює чудово, коли я маю активність користувача (перший запит після запуску пулу додатків, який містить вищезгаданий веб-додаток, викликає * Application_Start *, а потім * Application_End * викликається на зупинці або переробці пулу додатків), але проблеми виникають, коли немає активності користувача, і програма намагається перезапустити себе після активної роботи протягом 48 годин (налаштована вимога). Оскільки запитів не було, заявка офіційно не запускалася. На жаль, це не може бути витончено зупинено, оскільки * Application_End * не буде викликано.
4) Тепер приходить брудна частина ... Я намагався зробити запит GET з коду в кінці методу Preload , і він спрацював. Але це рішення мені здалося поганим, хоча воно спрацювало. Отже, я спробував багато чого, і останнє, що я спробував, це:
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);
... і це зробило його призначення. * Application_Start * був викликаний, (я перевірив відповідь, він містив сторінку входу, яка повинна була відображатися в початковому запиті), і програма закриття пулу Application завершилася витончено, виконавши необхідну роботу в * Application_End *.
АЛЕ
Після того, як програма була запущена (попередньо завантажена та ініційована) таким чином, ось що сталося, коли я хотів отримати доступ до програми через веб-браузер:
Помилка HTTP 500.21 - Внутрішній обробник помилок сервера "ExtensionlessUrlHandler-Integrated-4.0" має поганий модуль "ManagedPipelineHandler" у своєму списку модулів
Я не в змозі це зрозуміти. Хтось може мені сказати, чому це відбувається і як це виправити?
Якщо я цього не зрозумію, я повернусь до першого рішення (надсилання GET-запиту з коду), але ця проблема помилить мене, оскільки я навіть не маю уявлення, що не так.