На самом деле нет никакой пользы или выбора - один ServiceHost
(экземпляр этого класса) может размещать ровно одну услугу, и для каждой службы вам нужен отдельный хост службы. Это отображение 1: 1 - всегда, без выбора.
Но, конечно, ваше сервисное или консольное приложение Windows NT может иметь одновременно несколько объектов ServiceHost
. Это может быть полезно, если у вас есть набор сервисов, которые логически принадлежат друг другу и не могут существовать без друг друга, - где нет смысла запускать один из них, а другой не запускаться.
И да, хост-служба может разместить службу, которая предоставляет множество конечных точек, а несколько клиентов могут одновременно подключаться к этим отдельным конечным точкам, без проблем. Рабочая среда WCF будет разворачивать ряд рабочих потоков для обработки входящих запросов (вы можете ограничить их с помощью поведения ServiceThrottling) независимо друг от друга.
Для настройки и управления, сколько одновременных вызовов и просит у вас есть, вы должны смотреть на поведение ServiceThrottling на стороне сервера.
<behaviors>
<serviceBehaviors>
<behavior name="serviceThrottled">
<serviceThrottling
maxConcurrentCalls="16"
maxConcurrentInstances="26"
maxConcurrentSessions="10"/>
</behavior>
</serviceBehaviors>
</behaviors>
и вы должны ссылаться на эту конфигурацию поведения службы в вашем заявлении службы, конечно:
<service name="YourService" behaviorConfiguration="serviceThrottled">
.....
</service>
Эти значения по умолчанию. Объяснения следующим образом (взяты из блоге Дэна Ригсби, в укороченный):
MaxConcurrentCalls (по умолчанию = 16) [Per-сообщение] Максимальное количество сообщений, которые активно могут быть обработаны.
MaxConcurrentInstances (по умолчанию = 26) Максимальное количество объектов InstanceContext в службе, которая может выполняться за один раз. Для службы за сеанс это равно максимальному количеству сеансов, для службы за вызов, это максимальное количество одновременных вызовов, а для одиночных вызовов это бессмысленно.
MaxConcurrentSessions (по умолчанию = 10) [В канале] Максимальное количество сеансов, которые служба может принимать за один раз. Только в игру вступает с сессии на основе привязок (wsHttp или netTcp)
Определенно также проверить Dan Rigsby's excellent blog post на эту тему.
Нет, меня интересует ситуация, когда у меня есть одна логическая служба с одной конечной точкой, но мне нужно несколько одновременных подключений к службе от нескольких клиентов (хотя, используя один тип конечной точки). – flashnik
@flashnik: это определенно не проблема.По умолчанию 10-16 одновременных вызовов возможны на службе, независимо от того, на какой конечной точке они входят на –
Не могли бы вы объяснить, как я могу изменить эту сумму? – flashnik