WCF вызывает веб-сервис долго - PullRequest
0 голосов
/ 27 сентября 2010

У меня есть служба wcf (WCF_A), которая вызывает другую службу wcf (WCF_B) (в настоящее время я размещаю WCF_B на моей локальной машине с моими учетными данными - в качестве службы Windows), WCF_B внутренне выполняет вызов веб-службы (WS01) это размещено на IIS. Я создал тестовый клиент и вызываю WCF_A -> WCF_B -> WS01. Непосредственно перед выполнением вызова (WS01) я запускаю таймер и останавливаю таймер, когда возвращается вызов веб-службы и результат назначается переменной, последовательность действий такая, как показано ниже WCF_B

1)  Debug.WriteLine(“Call to webservice”)
2)  Starttimer
3)  Var result = WS01.Function(xxxx)
4)  Stop timer
5)  Debug.Writeline (timetaken)
6)  Debug.WriteLine(“Call from webservice came back”)

При первом вызове функции веб-сервиса я обнаружил, что между этапом (2) и этапом (5) это занимает очень много времени.

Первоначально я думал, что создание прокси занимает много времени, при запуске Fiddler я обнаружил, что вызов веб-службы выполнен и мгновенно возвращает ожидаемые результаты.

После этого я не уверен, что происходит, и процесс, кажется, ждет. (На шаг (5) уходит почти 2,5 минуты.

Как только вызов сделан, если я оборачиваюсь и выполняю тот же вызов с различными параметрами для веб-службы, шаг (5) выполняется в течение примерно 1,1 секунды (время взято). Я не уверен, что здесь происходит. Похоже, что на шаге (3) присваивание переменной результата занимает много времени, но не уверен, почему это происходит только в первый раз.

Я также создал тестовый клиент и напрямую вызываю WCF_B (размещенный с использованием wcf, предоставленного WCFHost), хотя вызов не занимает много времени, так как в предыдущем случае он возвращается через 9,8 с в первый раз и примерно через 1 с после этого опять вызов кажется ожидающим во время назначения.

Есть ли какие-либо указатели на определение того, что происходит?

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 28 сентября 2010

Мое первое предположение было бы, что первый вызов медленнее из-за самой инфраструктуры .NET.Ваш WCF компилируется на промежуточном языке компилятором C # ou VB.NET.Во время выполнения этот код компилируется в собственный код, который должен выполняться системой.Это называется компиляцией Just-In-Time и происходит один раз для каждого метода при первом запуске в вашем приложении.

Так что, если только вы не сможете воспроизвести поведение, описанное вами во 2-м, 3-м или N-мпозвоните в службу, я думаю, можно с уверенностью предположить, что это просто ожидаемое поведение.

  1. Вы также можете использовать профилировщик для отслеживания того, что именно занимает много времени для выполнения.
  2. Если вы ожидаете, что источником проблемы будет WCF, включите трассировку активности на клиенте WCF и посмотрите, сможете ли вы определить задержку в списке отслеживаемых операций.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...