#c# #.net #wcf #nhibernate
#c# #.net #wcf #nhibernate
Вопрос:
Я разработал WCF REST Api, который использует NHibernate в качестве уровня сохранения. В настоящее время я использую службу для каждого сеанса, но прочитал, что службы для каждого вызова — это способ продолжить то, что я делаю.
Есть 2 вещи (вероятно, очень связанные) Мне не нравится, и я хочу удалить об этом.
-
При первом вызове api для ответа требуется около 20 секунд, что может означать, что он загружает библиотеки и создает экземпляры классов. Могу ли я сделать это до выполнения любого вызова? У меня уже есть статический конструктор в реализующем классе ServiceContract, но это не уменьшает время его загрузки.
-
При последующих вызовах, если я прекращаю вызов службы примерно на 10 минут, время вызова снова увеличивается с 1 секунды до более чем 20 секунд. Это моя самая большая проблема, поскольку у клиентов должен быть тайм-аут в 30 секунд, что для пользователей может показаться сбоем приложения.
Как я могу это улучшить? Есть ли у вас какие-либо советы по повышению производительности этих служб?
Комментарии:
1. Вы проверили свойство перезагрузки пула приложений в IIS?
2. Размещена ли служба в IIS? Если да, то как настроен IIS в отношении утилизации пула приложений?
Ответ №1:
Похоже, это явный случай утилизации пула приложений IIS, поэтому разумно предположить, что вы размещаете эту службу WCF в IIS.
Несколько вариантов:
- Разместите службу вне IIS (WCF может быть размещен как отдельная служба Windows)
- Отрегулируйте частоту повторного использования пула приложений
Ответ №2:
Попробуйте зарегистрировать ваши Application_Start () и Application_End (), чтобы показать время запуска и остановки вашего приложения. Это может дать вам представление, является ли это вашей проблемой.
Также это может быть что-то типа Session_Start / End.
Если вы думаете, что ваш сайт станет более загруженным, то постоянная остановка и запуск вашего приложения не будут такой проблемой.