本帖最后由 jjx0224 于 2012-06-26 16:18:33 编辑

解决方案 »

  1.   

    WCF允许服务发布者自定义并组合并发模型与实例模型。
    并发模型有三种:
    ConcurrencyMode
    Single:   单线程模型,可以理解为,针对一个客户端,只有一个线程负责响应;
    Reentrant:可重入的单线程模型,与Single的区别在于,对于OneWay/回调,它不会阻塞,而是把回调的线程放到队列尾部等着最后处理;
    Multiple: 多线程模型,可以理解为,针对一个客户端,也允许并发访问;
     
    实例模型也有三种:
    InstanceContextMode
    PerCall:   针对每次调用都生成新的服务实例;
    PerSession:针对一个会话生成一个服务实例;
    Single:    针对所有会话和所有调用共用同一个服务实例;
    这应该取决于你用的 哪种组合方式吧 我也是菜鸟正在研究 WCF希望对你有用
      

  2.   

    ServiceBehavior 中 ConcurrencyMode 设为 Multiple 这种数量的并发应该是无压力啊。
    (默认是single的)[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,ConcurrencyMode=ConcurrencyMode.Multiple)]
      

  3.   


    目前我采用的是
    ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.PerCall)
      

  4.   

    ConcurrencyMode.Single,这个模式将不存在并发的可能性,那意味着服务端只有一个线程在运行(非客户端的单线程),那么服务端永远只能一次处理一个客户端请求,多余的连接直接被拒绝在外,在未超时的情况下就是排队,超时的话客户端直接报错。也许你需要排队,那么用这个模式可以,如果要并发,必须使用ConcurrencyMode.Multiple
      

  5.   

    首先,WCf并发是你控制的,主要看你是否想让它并发操作,DB操作是会产生并发问题的,这部分可以用DB事物将之同步处理就好了。
      

  6.   


    我已经设置了 InstanceContextMode = InstanceContextMode.PerCall 也就是说,每当一个客户端调用一次wcf服务时,wcf端将会建立一个实例来处理这次请求,但这些实例都是运行在一个线程之上?不是这个意思吗?