Запросы накапливаются на сервере IIS WCF - PullRequest
0 голосов
/ 25 декабря 2018

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

 [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
 ConcurrencyMode =ConcurrencyMode.Multiple)]
public class Service1 : IService1

Мы использовали эту службу в консоли по ссылке.У нас возникла проблема, заключающаяся в том, что через некоторое время мы видим, что сообщения отправляются в рабочий процесс IIS.

Например -> Через 1 минуту он отображается как только один поток в рабочем процессе в IIS, но через некоторое времямы видим несколько запросов в IIS?

Может ли кто-нибудь помочь здесь, например, почему через некоторое время мы видим сообщения в очереди в IIS?

Ниже приведена привязка в конфигурации

<binding name="BasicHttpBinding_Common" 
        closeTimeout="00:10:00" openTimeout="00:10:00" 
        receiveTimeout="00:10:00" sendTimeout="00:10:00" 
        allowCookies="false" bypassProxyOnLocal="false" 

enter image description here

1 Ответ

0 голосов
/ 04 января 2019
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
 ConcurrencyMode =ConcurrencyMode.Multiple)]

Указывает количество экземпляров службы, доступных для обработки вызовов, содержащихся во входящих сообщениях: InstanceContextMode.Single - только один объект InstanceContext используется для всех входящих вызовов и не перерабатывается после вызовов.Если объект службы не существует, он создается.

Указывает, поддерживает ли класс службы однопоточные или многопоточные режимы работы: ConcurrencyMode.Multiple - экземпляр службы является многопоточным.Никаких гарантий синхронизации не сделано.Поскольку другие потоки могут изменить ваш сервисный объект в любое время, вы должны постоянно обрабатывать синхронизацию и согласованность состояний.Вы несете ответственность за охрану своего государства с помощью замков.Реализация сервиса должна быть поточно-ориентированной, чтобы использовать этот режим параллелизма.

Вы можете попробовать добавить UseSynchronizationContext = false к вашему ServiceBehavior.Если это не поможет, попробуйте добавить ReleaseServiceInstanceOnTransactionComplete=true или false к вашему ServiceBehavior.Я не уверен, что вы можете установить значение true, если InstanceContextMode является кратным.

Поскольку с ConcurrencyMode.Multiple Нет гарантий синхронизации, и значение по умолчанию для UseSynchronizationContext равно true, возможно, он пытается обработать все вызовы натот же поток, вызывающий очередь.

Также может быть некоторая проблема с кодом, который вы используете для вызова службы.Не видя этого, мы бы не узнали.

Может потребоваться немного времени, чтобы раскрутить поток для каждого вызова ??На вашей картинке самый длинный запрос - всего 5,5 секунд.(Я знаю, это просто для простого звонка.)

Это также может быть загадочным: https://stackoverflow.com/a/4698956/2016162

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...