Сервисный узел WCF с несколькими режимами параллелизма? - PullRequest
0 голосов
/ 20 сентября 2019

Можно ли создать WCF ServiceHost с несколькими режимами параллелизма?

У меня есть узел службы с несколькими объектами OperationContracts.Я хочу, чтобы некоторые из них работали параллельно, а некоторые - в одном режиме.

Пример:

    [OperationContract]
    Response Foo(Transaction t);
    [OperationContract]
    Response Bar(Transaction t);
    [OperationContract]
    Response FortyTwo(Transaction t);

Я хочу звонить на Foo и Bar для обработки в параллель и FortyTwo для обработки в последовательности.Таким образом, если несколько параллельных вызовов поступают в Foo и Bar, они запускают новые экземпляры, которые их обрабатывают.Если несколько вызовов поступают на FortyTwo , я хочу, чтобы они обрабатывались последовательно.

Я могу управлять этим с помощью атрибутов ServiceBehaviorAttributes, как это

            var sba = _serviceHost.Description.Behaviors.Find<ServiceBehaviorAttribute>();
            if (sba == null)
            {
                sba = new ServiceBehaviorAttribute();
                _serviceHost.Description.Behaviors.Add(sba);
            }
            sba.MaxItemsInObjectGraph = int.MaxValue;
            sba.InstanceContextMode = InstanceContextMode.PerCall;

            sba.ConcurrencyMode = ConcurrencyMode.Multiple;

Но это длявесь сервисхост.Есть ли способ установить режим параллелизма для каждого OperationContract?Я выглядел удушливым, но я не уверен, что что-то пропустил, но я не мог понять, как я мог бы использовать это для своих нужд.

Я создаю свой сервисХост, как этот, если это имеет значение.

            WSHttpBinding binding = new WSHttpBinding();
            _serviceHost.AddServiceEndpoint(typeof(IService), binding, "");
            _serviceHost.Open();
...