[源码下载]
化零为整WCF(12) - 并发和限流(Concurrent和Throttle)
作者:webabcd
介绍
WCF(Windows Communication Foundation) - 并发(Concurrent):
1、ConcurrencyMode.Single:单线程并发模式。系统自动加锁,无并发问题
·InstanceContextMode.PerCall:每个线程都会被分配一个新的实例
·InstanceContextMode.PerSession:每个Session被分配一个新的实例,每个Session内同时只会有一个线程操作实例
·InstanceContextMode.Single:唯一实例,并发调用只会有一个线程操作实例
2、ConcurrencyMode.Reentrant:可重入的单线程并发模式。有可重入(回调)操作时,此模式才会生效,从回调返回的线程会进入队列尾部排队
·InstanceContextMode.PerCall:每个线程都会被分配一个新的实例,当有回调操作时如果使用Single并发模式的话就会产生死锁(1、调用服务端;2、回调客户端;3、返回服务端,1的时候锁定了,到3的时候就无法执行了,所以死锁了),此时应该用Reentrant并发模式
·InstanceContextMode.PerSession:每个Session被分配一个新的实例,每个Session内同时只会有一个线程操作实例,Session内可重入
·InstanceContextMode.Single:唯一实例,并发调用只会有一个线程操作实例,全局可重入
3、ConcurrencyMode.Multiple:多线程并发模式。系统不会自动加锁,有并发问题
·InstanceContextMode.PerCall:每个线程都会被分配一个新的实例,无并发问题
·InstanceContextMode.PerSession:每个Session被分配一个新的实例,每个Session内多线程操作实例的话会有并发问题
·InstanceContextMode.Single:唯一实例,允许多线程并发操作实例,有并发问题
WCF(Windows Communication Foundation) - 限流(Throttle):




















示例(以ConcurrencyMode.Reentrant为例)
1、服务
IDuplexReentrant.cs








































DuplexReentrant.cs




































2、宿主
DuplexReentrant.cs
































App.config
































3、客户端
DuplexReentrant.cs































ReentrantCallbackType.cs






























App.config










运行结果:
单击"btnDuplexReentrant"按钮后弹出提示框,显示"Hello: webabcd"
OK
[源码下载]