Я хотел бы понять свойство ServiceBehavior.ConcurrencyMode
.
Рассмотрим следующий код на стороне обслуживания:
[ServiceContract]
public interface IMySercice {
[OperationContract]
int mycall(int a);
}
/*** HERE I WILL GENERATE Two variants of this code ***/
[ServiceBehaviour(InstanceContext = InstanceContextMode.Single)]
public class MyService : IMyService {
// Constructors...
// implementations of interface
public int mycall(int a) { ... }
}
class Program {
static void Main(string[] args) {
MyServiceMyS = new MyService(...); /* Creating service instance */
Uri MyUri = new Uri("http://services.mycompany.com/services/"); /* Base address for my hosted service */
using (ServiceHost host = new ServiceHost(MyS)) { /* Defining service host, configuration file contains info regarding endpoints, not shown here for clarity */
host.Start();
host.Stop();
}
}
}
Теперь рассмотрим, что я хотел бы вызвать эту службу, пожалуйста, примите во внимание10 машин в сети, которые могут вызвать мой сервис.В определенный момент случается, что эти 10 машин ВСЕ делают 10 одновременных запросов на int mycall(int a)
.Я хотел бы изучить следующие сценарии:
СЦЕНАРИЙ 1
...
/*** VARIANT 1 ***/
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContext = InstanceContextMode.Single)]
public class MyService : IMyService {
...
}
...
СЦЕНАРИЙ 2
...
/*** VARIANT 2 ***/
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContext = InstanceContextMode.Single)]
public class MyService : IMyService {
...
}
...
Итак, поступает 10 одновременных вызовов ... что происходит воба случая?Пожалуйста, скажите мне, прав я или нет:
В сценарии 1, однопоточном, эти 10 вызовов ставятся в очередь и выполняются по одному за раз.Метод моей службы (ТО ЖЕ ВРЕМЯ МОЕЙ СЛУЖБЫ) будет вызываться десять раз подряд.В сценарии 2 многопоточный WCF заставит 10 потоков одновременно вызывать мой метод обслуживания.
Это правда, что я сказал?Спасибо