最近在做开发的时候的遇到一个问题,采用WCF做服务端开发,利用的是TCP绑定。因为涉及到大数据量的传输,要求开启可靠会话。
之前的程序中,本身是关闭了可靠会话,然后在服务器端注册了客户端的Closing和Faulted事件:
OperationContext.Current.Channel.Closing += Exit;
OperationContext.Current.Channel.Faulted += Exit;
程序运行正常,当客户端出现网络异常中断时(断点,强制结束进程等),可以立即触发事件,调用Exit方法。而当程序在receiveTimeout指定的时间段内,未产生过通信,同样也会触发事件。这里可以把receiveTimeout认为是一个空闲超时。
但是在增加了可靠会话后,情况变得不一样了。客户端正常关闭时,可以立即触发事件,但是异常中断时,Closing和Faulted都没有被触发。Google了一下也没有找到一个合理的解释,那么最有可能的原因是受到了inactivityTimeout的影响。
inactivityTimeout,MSDN上的解释为:获取或设置服务在关闭之前保持非活动状态的时间间隔。
有点难以理解,于是做了一个实验。
同样一个服务,将receiveTimeout设置为1分钟(默认10分钟),将inactivityTimeout设置为10秒钟,启动客户端调试。
如果调用服务器端方法的时间间隔不超过1分钟,那么客户端与服务器将
版权声明:本文为sweetwxh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。