Очередь пользовательских запросов в WCF
У меня есть служба WCF, которая создает несколько файлов в расположении сервера, выполняя различные вычисления на начальном файле в зависимости от заданных параметров. Проблема заключается в том, что, когда 2 или более клиентов пытаются выполнить вычисления для одного и того же начального файла, возвращается ошибка. Причина просто в доступе для чтения / записи несколькими пользователями одновременно. Поэтому я хочу создать очередь пользовательских запросов в WCF, откуда сервер выполняет вычисления по одному и возвращает рассчитанный ответ пользователю. Проблема в том, что я не знаю, как это сделать.
Я не реализовывал никакой техники очереди запросов в WCF раньше. Кто-нибудь знает, как реализовать это в WCF Sevcices. Я не могу выполнять многопоточность, так как вычисления зависят от файлового ввода-вывода, поэтому обработка одного запроса за раз - это только одно решение в данный момент.
Любой учебник или видео-учебник будет высоко оценен.
1 ответ
Наконец я это сделал. Здесь я публикую свой солутон для других пользователей, которые могут быть новичками в очереди запросов WCF. Сначала нам нужно реализовать настройки регулирования в файле хоста WCF. Регулирование может быть сделано двумя способами (Любой способ в порядке):
- Конфиг файл
- Код
Настройки регулирования в конфигурационном файле следующие:
[поведение] [serviceBehaviors] [поведение name="throttlingBehavior"] [serviceThrottling maxConcurrentCalls="3" maxConcurrentInstances="3" maxConcurrentSessions="100"/] [/ поведение] [/serviceBehaviors] [/ поведение
Или удушение настроек в коде
using (ServiceHost host = new ServiceHost(typeof(SimpleService.SimpleService)))
{
ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior { MaxConcurrentCalls = 3, MaxConcurrentInstances = 3, MaxConcurrentSessions = 100 };
host.Description.Behaviors.Add(throttlingBehavior);
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.