Параллельный вызов метода
От: KSergyN  
Дата: 20.08.12 10:39
Оценка:
Запускаю веб сервис:
var host = new ServiceHost(typeof(Service), new Uri("http://localhost:8732/Design_Time_Addresses/Service/"));
host.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), "http://localhost:8732/Design_Time_Addresses/Service/http");
host.Description.Endpoints.Find(new Uri("http://localhost:8732/Design_Time_Addresses/Service/http")).Behaviors.Add(new WebHttpBehavior());
host.Open();
// ...

[ServiceContract]
public interface IService {
    [OperationContract, WebGet(UriTemplate = "A")]
    string A();
    [OperationContract, WebGet(UriTemplate = "B")]
    string B();
}
// ...

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerSession, UseSynchronizationContext = false)]
public class Service : IService {
    public string A() {
        Console.WriteLine("Hello from A, " + Thread.CurrentThread.ManagedThreadId.ToString());
        Thread.Sleep(20000);
        return "";
    }

    public string B() {
        Console.WriteLine("Hello from B, " + Thread.CurrentThread.ManagedThreadId.ToString());
        Thread.Sleep(20000);
        return "";
    }
}


При параллельном вызове методов (из браузера)


первый и третий выполняются параллельно, а второй ждет окончания работы первого.

Как полечить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.