2010-01-25 3 views
7

Я думаю о самообслуживании моей службы WCF вместо использования IIS. Большой вопрос для меня заключается в том, нужно ли создавать несколько сервисных хостов, как IIS, или одного достаточно.Каковы преимущества для нескольких сервисов? Поддерживает ли один ServiceHost несколько одновременных соединений на одной конечной точке?

Умножает ли прислуга какие-либо преимущества, кроме соображений безопасности, а не для изоляции?

Может ли один сервисный хост одновременно обслуживать несколько соединений на одной конечной точке?

ответ

11

На самом деле нет никакой пользы или выбора - один 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 на эту тему.

+0

Нет, меня интересует ситуация, когда у меня есть одна логическая служба с одной конечной точкой, но мне нужно несколько одновременных подключений к службе от нескольких клиентов (хотя, используя один тип конечной точки). – flashnik

+0

@flashnik: это определенно не проблема.По умолчанию 10-16 одновременных вызовов возможны на службе, независимо от того, на какой конечной точке они входят на –

+0

Не могли бы вы объяснить, как я могу изменить эту сумму? – flashnik

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

  • Нет связанных вопросов^_^