Winforms应用程序中的WCF - 它总是单线程吗?

时间:2011-01-17 21:44:56

标签: winforms wcf

我有一个公开WCF服务的Winforms应用程序。

从IIS,我尝试使用该服务。在2台不同的计算机上,我尝试调用test1.aspx,然后在Winforms应用程序中调用WCF。

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 个答案:

答案 0 :(得分:10)

在UI线程中托管服务时,WCF的行为可能与您的情况不同。默认情况下,WCF处理加入Windows消息循环,因此请求处理不仅会变为串行,而且还会停止WinForms UI中的所有事件处理(应用程序将冻结)。

要避免此行为,您必须明确说明您不希望在UI线程中托管服务:

[ServiceBehavior(UseSynchronizationContext = false)]