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

时间:2009-10-28 16:40:28

标签: wcf multithreading

我有一个运行2个线程的客户端,每个线程都尝试访问wcf服务。 使用

的默认行为定义服务
AppService = new ServiceHost(typeof(MyService),
                             new Uri[] { new Uri(netTcpLocalhostSimple) });


AppService .AddServiceEndpoint(
                typeof(IMyServiceContract),
                new NetTcpBinding(SecurityMode.None),
                netTcpLocalhostSimple);

默认情况下 - WCF服务的行为是单连接模式 - 意思是 - 它一次只接受1个呼叫。

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

如果我没有设置它会怎么样?

1 个答案:

答案 0 :(得分:1)

你的默认假设有点偏差;默认情况下,WCF使用会话感知协议的每会话方法,NetTcp使用传输会话。对于非会话感知协议,使用每次呼叫。

因此,每个客户端代理 - 在您的情况下每个线程 - 获取服务类的单独实例,只要会话未被终止,客户端,超时或由一个错误。

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

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

马克