Каковы преимущества для нескольких сервис-хостов? Поддерживает ли один ServiceHost несколько одновременных подключений на одной конечной точке? - PullRequest
7 голосов
/ 25 января 2010

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

Дают ли muptiple servicehosts какую-либо выгоду, кроме соображений безопасности, для изоляции?

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

1 Ответ

11 голосов
/ 25 января 2010

На самом деле нет никакой выгоды или выбора - один 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-message] Максимальное количество сообщений, которые можно активно обрабатывать.

  • MaxConcurrentInstances (по умолчанию = 26) Максимальное количество объектов InstanceContext в службе, которые могут выполняться одновременно. Для услуги на сеанс это равно максимальному количеству сеансов, для услуги на сеанс - это максимальное количество одновременных вызовов, а для синглетов - бессмысленно.

  • MaxConcurrentSessions (по умолчанию = 10) [на канал] Максимальное количество сеансов, которое может принять служба за один раз. Входит только в игру с привязками на основе сеанса (wsHttp или netTcp)

Обязательно посмотрите Отличный пост Дана Ригсби в блоге на эту тему.

...