Должен ли первый звонок в службу WCF занимать необычайно много времени? - PullRequest
0 голосов
/ 29 сентября 2010

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

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

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

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

Ответы [ 3 ]

1 голос
/ 29 сентября 2010

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

1 голос
/ 29 сентября 2010

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

1 голос
/ 29 сентября 2010

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

  • JIT скомпилирует службу
  • Кэшируйте запрос / данные на сервере базы данных

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

...