WCF в приложении Winforms - это всегда однопоточное? - PullRequest
4 голосов
/ 18 января 2011

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

Из IIS я пытаюсь использовать службу.С двух разных компьютеров я пытаюсь вызвать 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 Ответ

10 голосов
/ 18 января 2011

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

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

[ServiceBehavior(UseSynchronizationContext = false)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...