WCF требуется время для продолжения вызовов после того, как он не вызывался в течение определенного периода времени

#c# #.net #wcf #nhibernate

#c# #.net #wcf #nhibernate

Вопрос:

Я разработал WCF REST Api, который использует NHibernate в качестве уровня сохранения. В настоящее время я использую службу для каждого сеанса, но прочитал, что службы для каждого вызова — это способ продолжить то, что я делаю.

Есть 2 вещи (вероятно, очень связанные) Мне не нравится, и я хочу удалить об этом.

  1. При первом вызове api для ответа требуется около 20 секунд, что может означать, что он загружает библиотеки и создает экземпляры классов. Могу ли я сделать это до выполнения любого вызова? У меня уже есть статический конструктор в реализующем классе ServiceContract, но это не уменьшает время его загрузки.

  2. При последующих вызовах, если я прекращаю вызов службы примерно на 10 минут, время вызова снова увеличивается с 1 секунды до более чем 20 секунд. Это моя самая большая проблема, поскольку у клиентов должен быть тайм-аут в 30 секунд, что для пользователей может показаться сбоем приложения.

Как я могу это улучшить? Есть ли у вас какие-либо советы по повышению производительности этих служб?

Комментарии:

1. Вы проверили свойство перезагрузки пула приложений в IIS?

2. Размещена ли служба в IIS? Если да, то как настроен IIS в отношении утилизации пула приложений?

Ответ №1:

Похоже, это явный случай утилизации пула приложений IIS, поэтому разумно предположить, что вы размещаете эту службу WCF в IIS.

Несколько вариантов:

  1. Разместите службу вне IIS (WCF может быть размещен как отдельная служба Windows)
  2. Отрегулируйте частоту повторного использования пула приложений

Ответ №2:

Попробуйте зарегистрировать ваши Application_Start () и Application_End (), чтобы показать время запуска и остановки вашего приложения. Это может дать вам представление, является ли это вашей проблемой.

Также это может быть что-то типа Session_Start / End.

Если вы думаете, что ваш сайт станет более загруженным, то постоянная остановка и запуск вашего приложения не будут такой проблемой.