代码之家  ›  专栏  ›  技术社区  ›  Dani

2个线程使用默认行为concurrencyMode=single访问WCF服务

  •  0
  • Dani  · 技术社区  · 15 年前

    我有一个运行2个线程的客户机,每个线程都试图访问一个WCF服务。 使用的默认行为定义服务

    AppService = new ServiceHost(typeof(MyService),
                                 new Uri[] { new Uri(netTcpLocalhostSimple) });
    
    
    AppService .AddServiceEndpoint(
                    typeof(IMyServiceContract),
                    new NetTcpBinding(SecurityMode.None),
                    netTcpLocalhostSimple);
    

    默认情况下-WCF服务的行为是单连接模式-意味着-它一次只接受一个调用。

    但是,当我调试服务器时,我发现两个工作线程同时处理一个请求。

    如果我没有设置,怎么会发生这种情况?

    1 回复  |  直到 15 年前
        1
  •  1
  •   marc_s HarisH Sharma    15 年前

    您有点偏离了默认假设;默认情况下,WCF对会话感知协议使用每会话方法,而nettcp使用传输会话。对于不支持会话的协议,使用每次调用。

    因此,每个客户机代理(在您的情况下,每个线程)都会获得服务类的单独实例,只要会话没有被客户机、超时或故障终止,该实例将继续为特定客户机提供服务。

    要点是:每个请求客户机都有自己的服务实例,这也意味着:每个服务实例只需要处理一个给定的客户机,例如多线程等,并不是问题,因此对服务类进行编程就简单多了。

    你在期待什么/你需要什么?

    马克