WCF в приложении Winforms - это всегда однопоточное?

У меня есть приложение Winforms, которое предоставляет службу WCF.

Из IIS я пытаюсь использовать сервис. С 2 разных компьютеров пытаюсь позвонить test1.aspx который в свою очередь вызывает WCF внутри приложения Winforms.

test1.aspx => from computer 1 => First Call
test1.aspx => from computer 2 => Second Call

Я вижу, что WCF является однопоточным, и прежде чем он начнет обрабатывать CALL 2, он должен завершить обработку CALL 1.

[ServiceBehavior(IncludeExceptionDetailInFaults = true, 
                 ConcurrencyMode=ConcurrencyMode.Multiple, 
                 InstanceContextMode=InstanceContextMode.PerSession)]

У меня Windows Server 2008 R2 и IIS 7.5

Может кто-нибудь мне помочь?

1 ответ

WCF ведет себя по-разному, когда служба размещается в потоке пользовательского интерфейса, что, вероятно, является вашим случаем. По умолчанию обработка WCF включается в цикл обработки сообщений Windows, поэтому обработка запросов не только станет последовательной, но и остановит всю обработку событий в пользовательском интерфейсе WinForms (приложение зависнет).

Чтобы избежать этого, вы должны явно указать, что не хотите размещать службу в потоке пользовательского интерфейса:

[ServiceBehavior(UseSynchronizationContext = false)]
Другие вопросы по тегам