2015-01-14 4 views
2

Я создал простую службу WCF, которая размещена в службе Windows. Служба WCF автоматически запускается при запуске службы Windows, но когда я впервые подключаюсь к службе WCF от клиента, она занимает пару секунд (как и любая другая служба WCF).Пробуждение службы WCF, выполняющейся внутри службы windows

Я знаю, как избежать этой задержки, когда служба размещена в IIS, но не тогда, когда она размещена внутри всего остального.

Чтобы быть точным:

Есть ли способ пробуждения службы WCF, размещаемое в рамках службы окна без клиента reqest делается для этого? Возможно, из кода службы Windows?

+0

Задержка, скорее всего, на стороне клиента, а не на стороне обслуживания. Это займет немного больше времени при создании прокси-сервера. – Tim

+0

Я протестировал это, и тесты докажут обратное ... Когда я запускаю службу и клиентское приложение, делаю запрос, для службы WCF требуется 3-4 секунды. Если я выключу клиента, запустите другой экземпляр, первый вызов из этого нового экземпляра будет таким же быстрым, как и любой другой. С другой стороны, если я перезапущу службу и сделаю другой запрос с клиентом, то потребуется примерно 3-4 секунды для ответа. Значение задержки должно быть на стороне обслуживания WCF. –

ответ

3

С хостингом IIS задержка происходит не потому, что служба WCF должна «просыпаться». Причина этого в хостинге IIS заключается в том, что IIS выгрузит пул приложений из памяти после периода бездействия (или из-за какого-либо другого внутреннего состояния). Это не относится к хостингу Windows.

Задержка, с которой вы столкнулись, вероятно, потому что, когда ваш клиент вызывает услугу в первый раз, она должна развернуть канал wcf для совершения вызова. Последующие вызовы могут быть сделаны с использованием того же канала, чтобы не было времени выполнения.

Для предотвращения такого поведения вы должны постоянно держать канал открытым. Существует несколько способов сделать это, но проще всего использовать сеансы. Для получения дополнительной информации см. Отличный номер answer Эрика Функенбуша. Тем не менее, вы должны рассмотреть, если вам это абсолютно необходимо, поскольку сеансы являются накладными расходами и недостаточно масштабируются.

+0

Я не уверен, что вы говорите, что проблема на стороне службы или на стороне клиента, но я немного ее протестировал и ... Когда я запускаю службу и клиентское приложение, делаю запрос, он принимает 3-4 секунды для ответа службы WCF. Если я выключу клиента, запустите другой экземпляр, первый вызов из этого нового экземпляра будет таким же быстрым, как и любой другой. С другой стороны, если я перезапущу службу и сделаю другой запрос с клиентом, то потребуется примерно 3-4 секунды для ответа. Значение задержки должно быть на стороне обслуживания WCF. –

+0

Это странно. Является ли служба настроенной как одноэлементная? Он загружается в большом количестве данных как часть его работы? –

+0

+1 спасибо за объяснение причины такого поведения, но какова наилучшая практика для решения такой проблемы, вызывать ее из запланированной задачи сервера каждое утро? – jonathana

Смежные вопросы