WCF中的可靠会话(reliableSession)中的inactivityTimeout和receiveTimeout

  • Post author:
  • Post category:其他


最近在做开发的时候的遇到一个问题,采用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 版权协议,转载请附上原文出处链接和本声明。