繁体   English   中英

WCF PerCall不触发故障事件

[英]WCF PerCall not firing Faulted event

我正在将wsHttpBindingInstanceContextMode.PerCall 在服务器端,我需要检测客户端是否正确接收了response 如果没有,我需要在服务器端清除一些内容。 为此,我尝试使用OperationContext.Current.InstanceContext.ClosedOperationContext.Current.InstanceContext.Faulted 无论我做什么, OperationContext.Current.InstanceContext.Closed始终会触发,但.Faulted事件永远不会触发(超时连接,在仍接收数据的同时关闭客户端,拔下电缆)。 而且OperationContext.Current.InstanceContext.State始终关闭。

如何检测到客户端未收到请求? 作为一种替代解决方案,我正在考虑是否要在客户端捕获错误,以在服务器端调用清除方法,但这可能会使事情变得复杂,因为互联网连接可能会断开一段时间。

当客户端成功调用Close()时,将触发服务端的通道事件,由于客户端故障和超时,直到服务器做出响应之前,您不会在服务器端触发通道事件,这是非常愚蠢的。

为了解决您的问题,您有三种解决方案:

1-如果客户端是您的客户端,请使用双工在客户端上调用虚拟方法,然后通道将触发其事件。

2-使用可靠的会话(会话完全绑定+可靠的会话已打开),因此您可以设置“ InactivityTimeout”,当不再出现诸如KeepAlive消息之类的红外线消息时,它将触发。 我猜InactivityTimeout的默认值为10分钟,而Windows KeepAlive的频率为1秒,因此您可以将InactivityTimeout设置为5秒。

3-将IIS托管与http绑定之一一起使用,因此在您的操作内部创建一个循环,该循环不断检查“ System.Web”命名空间中“ HttpContext.Current.Response”中的“ ClientDisconnectedToken.IsCancellationRequested”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM