我们在WCF解决方案上有一个自定义侦听器,该侦听器继承自ChannelListenerBase<IDuplexSessionChannel>

我们有一个行为不端的客户端(不受控制),它与我们的TCP对话大致如下:

SYN  
SYN,ACK  
RST  

基本上,他们试图在建立套接字之前对套接字执行操作,然后关闭套接字并使其失效。

在我们的OnEndAcceptChannel代码中,我们最终无法创建通道,因为底层的Socket到我们到达时已经关闭,并且我们得到SocketException。 然后,这似乎杀死了侦听器,使其停止接受进一步的连接。

OnEndAcceptChannel ,我们尝试返回null, OnEndAcceptChannel Exception,并给侦听器发送错误,以便可以在调用堆栈的更高位置重新启动它。 后者是我们发现的唯一允许通道有效继续监听的解决方案,但是却具有杀死所有已建立的服务连接的令人不愉快的(且不可接受的)副作用。

有人对如何处理这种情况,保持倾听并且不失去已建立的联系有任何建议吗?

===============>>#1 票数:1 已采纳

我们最终解决了它。 我们没有返回null,而是返回了一个实现IDuplexSessionChannel的虚拟类的实例,该实例IDuplexSessionChannel上是一个哑巴状态机,仅此而已-愚弄WCF继续进行。

  ask by Stu translate from so

未解决问题?本站智能推荐: