Как настроить службу WCF для работы с контекстом экземпляра PerCall? - PullRequest
2 голосов
/ 21 декабря 2011

Вот справочная информация.У меня есть служба WCF, настроенная так:

   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

Теперь мне нужна помощь, чтобы понять, как именно работает этот контекстный режим.

Вот проблема, с которой я сталкиваюсь.В качестве аргумента, скажем, у меня есть вызов, который занимает 10 секунд, чтобы выполнить и вернуться с сервера.Если я сделаю два вызова одновременно (используя Ajax-запрос), первый запрос вернется через 10 секунд.Но второй запрос вернется через 20 секунд.

Я ожидал, что этот контекстный режим будет обрабатывать оба запроса независимо друг от друга и возвращать оба запроса одновременно.Правильно ли настроен мой сервис?

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

В PerCall каждому вызову назначается отдельный экземпляр ( для предельной масштабируемости ). Каждый вызов метода приводит к созданию нового объекта сервера ( отдельный поток ). После обработки запроса (метод возвращает ) новый экземпляр освобождается.

Если бы вы настроили метод для использования ConcurrencyMode.Single, вы бы увидели это поведение блокировки.

Вам следует рассмотреть возможность проверки конфигурации serviceThrottling, чтобы убедиться, что ваше приложение настроено правильно.

<serviceBehaviors>
    <behavior name="throttleBehavior">
        <serviceThrottling maxConcurrentCalls="15" maxConcurrentInstances="10"/>
    </behavior>
</serviceBehaviors>
0 голосов
/ 19 января 2013

Следующая конфигурация

[ServiceBehavior (InstanceContextMode = InstanceContextMode.PerCall)]

не всегда может создавать контексты обслуживания сразу для каждого вызова. Если используемая привязка включена в сеанс, а служба реализует IDispose, то вызов клиента будет поставлен в очередь, пока уже существует экземпляр службы для другого клиента. Итак, проверьте обязательные детали в вашем случае.

...