Могу ли я вызывать контракты с несколькими операциями, когда ConcurrencyMode равен Single - PullRequest
2 голосов
/ 15 сентября 2011

У меня есть сервис WCF с 3 контрактами на эксплуатацию. Я установил [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)] для этой услуги. Мое основное сомнение заключается в том, могу ли я звонить всем 3 службам одновременно, или только один контракт может быть вызван одновременно. Пожалуйста, любой может дать решение.

1 Ответ

0 голосов
/ 15 сентября 2011

Режим параллелизма имеет область действия для экземпляра контекстного режима. Если вы установите ConcurrencyMode на Single, вы просто скажете WCF, что каждый экземпляр службы может обрабатывать только один параллельный запрос - Single также является значением по умолчанию для ConcurrencyMode.

Если вы не сконфигурируете также InstanceContextMode на Single (= вы сделаете свой сервис синглтоном), ваш хост сервиса будет порождать новый экземпляр сервиса либо для каждого запроса (привязки без сохранения состояния, такие как BasicHttpBinding или WebHttpBinding), либо для каждый подключенный прокси-сервер (полные привязки типа NetTcpBinding, NamedPipeBinding и некоторые конфигурации WsHttpBinding). В первом случае ConcurrencyMode не имеет никакого эффекта, потому что каждый экземпляр службы используется только для обработки одного запроса = запросы от любого количества клиентов могут обрабатываться одновременно. В последующем случае ConcurrencyMode.Single сообщает, что запросы от одного клиентского прокси обрабатываются в последовательном порядке, но запросы от нескольких клиентских прокси могут обрабатываться одновременно. Каждый открытый контракт требует отдельной конечной точки, а каждая потребляемая конечная точка на клиенте требует отдельного экземпляра прокси-сервера, поэтому в этом случае прокси-сервер для каждого контракта будет иметь отдельный экземпляр службы.

В текущей конфигурации только регулирование службы контролирует, сколько одновременно работающих клиентов может потреблять вашу службу.

Как только вы установите InstanceContextMode на Single, у вас действительно будет служба, которая сможет обрабатывать только один запрос за один раз. Количество реализованных контрактов не имеет значения, потому что все контракты, представленные в конечных точках для одного сервиса, в этом случае обрабатываются одним экземпляром сервиса, который принимает только один параллельный запрос.

...