WCF NetTcpBinding流仅限于单个通道实例

时间:2019-03-27 14:50:53

标签: c# wcf wcf-binding nettcpbinding

我有一个使用NetTcpBinding配置的自托管WCF服务器。

服务和合同的设置依据:

  • SessionMode:允许
  • InstanceContextMode:PerCall
  • ConcurrencyMode:多个

TcpTransport设置为Streamed

我已经实现了IChannelInitializer来实现基本计数器。

但是,看来IChannelInitializer只会被调用一次。

如果我将传输更改为Buffered,则每个请求都会调用IChannelInitializer

根据this article

  

通过基于会话的绑定流式传输呼叫时,您可能会遇到意外行为。所有流式调用都是通过不支持会话的单个通道(数据报通道)进行的,即使所使用的绑定配置为使用会话也是如此。如果多个客户端通过基于会话的绑定对同一服务对象进行流式调用,并且该服务对象的并发模式设置为单个,并且其实例上下文模式设置为PerSession,则所有调用都必须通过数据报通道,因此只有一个调用一次处理。然后,一个或多个客户端可能会超时。您可以通过将服务对象的实例上下文模式设置为PerCall或将并发设置为Multiple来解决此问题。

因此,PerCall不应确保按照最后一句话为每个呼叫都创建一个实例吗?

我正在使用会话吗?我的客户为每个呼叫都创建了一个代理实例,所以我不希望会话行为。

0 个答案:

没有答案