我有一个使用NetTcpBinding配置的自托管WCF服务器。
服务和合同的设置依据:
TcpTransport设置为Streamed
我已经实现了IChannelInitializer
来实现基本计数器。
但是,看来IChannelInitializer
只会被调用一次。
如果我将传输更改为Buffered
,则每个请求都会调用IChannelInitializer
。
根据this article:
通过基于会话的绑定流式传输呼叫时,您可能会遇到意外行为。所有流式调用都是通过不支持会话的单个通道(数据报通道)进行的,即使所使用的绑定配置为使用会话也是如此。如果多个客户端通过基于会话的绑定对同一服务对象进行流式调用,并且该服务对象的并发模式设置为单个,并且其实例上下文模式设置为PerSession,则所有调用都必须通过数据报通道,因此只有一个调用一次处理。然后,一个或多个客户端可能会超时。您可以通过将服务对象的实例上下文模式设置为PerCall或将并发设置为Multiple来解决此问题。
因此,PerCall
不应确保按照最后一句话为每个呼叫都创建一个实例吗?
我正在使用会话吗?我的客户为每个呼叫都创建了一个代理实例,所以我不希望会话行为。