Итак, я размещаю сервис WCF в приложении WinForms. У меня есть следующее
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,
InstanceContextMode = InstanceContextMode.PerCall)]
public class Test : ITest
{
public string TestIt(string input)
{
Thread.Sleep(5000);
return "test";
}
}
Я использую именованные каналы и у меня есть два экземпляра другого приложения, которые действуют как клиенты для вышеуказанной службы WCF (работающей в приложении WinForms). На основании настройки ConcurrencyMode для Multiple я подумал, что, когда Client1 вызывает тестовую службу, Client2 не должен ждать завершения первого вызова. Однако, когда Client1 вызывает TestIt, Client2 блокируется до тех пор, пока не будет завершен вызов от Client1!?!?! Разве он не должен каждый раз создавать новый экземпляр на основе вышеуказанных настроек?
Кроме того, лучший способ сохранить отзывчивым приложение WinForms, на котором размещается служба WCF, - это запустить службу WCF в отдельном потоке?
ПРИМЕЧАНИЕ. Установка [CallbackBehavior (UseSynchronizationContext = false)] в классе Test не устраняет проблему. Служба по-прежнему отвечает только на один запрос за раз.