Очередь пользовательских запросов в WCF

У меня есть служба WCF, которая создает несколько файлов в расположении сервера, выполняя различные вычисления на начальном файле в зависимости от заданных параметров. Проблема заключается в том, что, когда 2 или более клиентов пытаются выполнить вычисления для одного и того же начального файла, возвращается ошибка. Причина просто в доступе для чтения / записи несколькими пользователями одновременно. Поэтому я хочу создать очередь пользовательских запросов в WCF, откуда сервер выполняет вычисления по одному и возвращает рассчитанный ответ пользователю. Проблема в том, что я не знаю, как это сделать.

Я не реализовывал никакой техники очереди запросов в WCF раньше. Кто-нибудь знает, как реализовать это в WCF Sevcices. Я не могу выполнять многопоточность, так как вычисления зависят от файлового ввода-вывода, поэтому обработка одного запроса за раз - это только одно решение в данный момент.

Любой учебник или видео-учебник будет высоко оценен.

1 ответ

Решение

Наконец я это сделал. Здесь я публикую свой солутон для других пользователей, которые могут быть новичками в очереди запросов WCF. Сначала нам нужно реализовать настройки регулирования в файле хоста WCF. Регулирование может быть сделано двумя способами (Любой способ в порядке):

  1. Конфиг файл
  2. Код

Настройки регулирования в конфигурационном файле следующие:

[поведение] [serviceBehaviors] [поведение name="throttlingBehavior"] [serviceThrottling maxConcurrentCalls="3" maxConcurrentInstances="3" maxConcurrentSessions="100"/] [/ поведение] [/serviceBehaviors] [/ поведение

Или удушение настроек в коде

using (ServiceHost host = new ServiceHost(typeof(SimpleService.SimpleS­ervice)))
{ 
ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior { MaxConcurrentCalls = 3, MaxConcurrentInstances = 3, MaxConcurrentSessions = 100 }; 
host.Description.Behaviors.Add(throttlin­gBehavior); 
host.Open(); 
Console.WriteLine("Host started @ " + DateTime.Now.ToString()); 
Console.ReadLine();
}

При указанных выше параметрах регулирования обрабатывается не более 3 одновременных вызовов. В дополнение к свойству maxConcurrentCalls, maxConcurrentInstances и maxConcurrentSessions также могут влиять на количество одновременных вызовов.

Теперь после определения поведения регулирования нам нужно определить режим параллелизма в контракте на обслуживание следующим образом:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,ConcurrencyMode=ConcurrencyMode.Multiple)]
public class Service:IService
{...

С этими настройками мы можем легко получить очередь запросов в сервисе WCF.

Другие вопросы по тегам