使用带有netTcpBinding的WCF双工通道时,我有一种非常奇怪的行为。
WCF回调有时(每1到10分钟)挂起大约4-5秒,我不知道为什么。如果我使用NetNamedPipeBinding,则不会发生这种情况。
设置WCF服务:
- WCF服务由WindowsService托管
- 双工通道使用NetTcp Binding
- 消息发送约。预先20秒,日期大小约为100 kB(我也尝试过它,消息大小为2 MB,看起来更常出现挂起)
- 多个客户端可以连接到该服务。该服务标有属性[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
- 为每个客户启动单独的thred以进行回调
AccessContract
- 回调函数是void函数,并用属性[OperationContract(IsOneWay = true)]
标记
设置WCF客户端
- WPF申请
- 在工作线程中打开频道(!=主线程) - >回调也在这个线程中调用
- WCF客户端在与服务
相同的计算机上运行
如果已完成以下分析
- wcf服务跟踪日志:呼叫从服务发送到客户端,但在客户端5秒后执行
- 如果多个客户端连接到该服务,则会更频繁地挂起(但主要只有一个客户端一次挂起)
- 我已经检查了.NET GC是否在挂机期间忙 - >是负面
- 我还检查过是否有其他网络流量 - >是负面
对我而言,它看起来像一个netTcp问题,但我不知道是什么原因以及如何分析它或避免问题。我不想使用管道,因为客户端也应该在其他机器上运行。
更新:
如果WCF服务和客户端在同一台计算机上运行,我只能看到所描述的问题。如果客户端在另一台计算机上运行,一切正常(即使我在其他计算机上启动多个客户端)。