寺委书记

Good good study, day day up!

导航

WCF Duplex Demo

Posted on 2010-12-25 16:37  MonkChen  阅读(280)  评论(0)    收藏  举报

此文是本人应用WCF的心得备忘录,只从现象出发,未深入研究机制,此Demo的结论如下:

 

1)如果服务函数具有返回值(即:IsOneWay = false),那么无论回调函数是否具有返回值,服务函数和回调函数必须在不同的线程中执行,而且服务类必须加上ConcurrencyMode = ConcurrencyMode.Multiple或ReEntrance Attribute,  否则会阻塞 或发生异常

    所谓不同的线程,可以在服务函数中另开线程调用回调函数,也可以在客户端中另开线程调用服务函数

  

代码
ThreadPool.QueueUserWorkItem(new WaitCallback((object state) => {
                Form1 frm 
= (Form1)state;
                
for (int i = 0; i < 10; i++)
                {
                    
using (proxy = new TemperatureClient(new InstanceContext(state)))
                    {

                        
bool rlt = proxy.TwoWayServerInvokeTwoWayClient();
                        frm.DisplayResult(rlt);
                    }
                }
            }), 
this);   

 

  

2)如果服务函数不返回值(即:IsOneWay=true),那么无论回调函数是否有返回值,均能正常运行,而不管ConcurrencyMode如何设置

 

详见Demo代码:

 DuplexSample源码