Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Должен ли первый вызов службы WCF занимать чрезвычайно много времени?

Автор вопроса: Mike PaterasОтветов: 3

У меня есть операция службы WCF, которая просто выполняет запрос LINQ в базе данных SQL, ища 1 из 35 записей, которые имеют соответствующий Guid (это действительно настолько просто, насколько это возможно). Когда я вызываю этот метод из простого приложения-песочницы, он сразу возвращается. Однако, когда он у меня работает в службе Windows, первый вызов метода занимает около 25 секунд (я беру временную метку до и после вызова), а второй вызов (во всех отношениях идентичный первому, сделанный сразу после первый, только для целей тестирования) возвращается сразу.

Вызов происходит внутри делегата ThreadPool.QueueUserWorkItem, при этом другие действия выполняются до и после него, и это единственная вещь во всем делегате, которая задерживается.

Есть ли смысл в задержке, или здесь что-то идет не так?

Обновление: я подтвердил, что проблема не в самом методе. Сначала я вызвал совершенно другой метод службы, у которого была такая задержка, и два вызова исходного метода сразу после того, как оба выполняются мгновенно. Так что на самом деле проблема заключается в том, какой бы ни был первый вызов сервера.

  • Из описания задержка не имеет смысла. Это может быть проблема с базой данных. Вы пытались запустить запрос непосредственно в БД? Noel Abrahams 29.09.2010
  • Не точный запрос, но эквивалентный, да. Я почти уверен, что это не на стороне базы данных, потому что я могу вызвать ту же операцию из небольшого тестового приложения, и она сразу же вернется. Mike Pateras 29.09.2010

wcfwindows-servicesthreadpool

Ответы

Ответ 1 · рейтинг 1 · Shiraz Bhaiji

В вашем случае первый вызов сделает 2 вещи:

  • JIT-компиляция сервиса
  • Кэшировать запрос/данные на сервере базы данных

Это может объяснить разницу. В некоторых системах первый вызов может истечь по тайм-ауту, а второй занимает всего одну или две секунды.

Ответ 2 · рейтинг 1 · Mitchel Sellers

Одна вещь, которую вы, возможно, захотите проверить, это посмотреть, есть ли у вашего рабочего процесса ASP.NET, на котором размещена служба, "тайм-аут простоя", мне кажется, что это первоначальный запуск ASP.net, который может быть причиной вашей проблемы.

Ответ 3 · рейтинг 1 · Noel Abrahams

Пробовали ли вы включить трассировку WCF? Ищите задержки в границах активности в Действие процесса.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы