我想将会话超时设置为30秒。
为此,我写道:
<wsHttpBinding>
<binding name="ServicesBindings">
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
<reliableSession enabled="true" inactivityTimeout="00:00:30"/>
</binding>
</wsHttpBinding>
但它不起作用!
如果我这样设置:
<wsHttpBinding>
<binding name="ServicesBindings" receiveTimeout="00:00:30">
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
<reliableSession enabled="true"/>
</binding>
</wsHttpBinding>
一切都正确。
有人可以向我解释一下吗?
谢谢,
阿尔贝托
答案 0 :(得分:4)
http://msdn.microsoft.com/en-us/library/system.servicemodel.reliablesession.inactivitytimeout.aspx
不活动和接收超时时段的组合决定了行为。
答案 1 :(得分:1)
InactivityTimeout用于ReliableSession。它是通道在线路上没有发送应用程序消息时保持打开的时间。因此,如果您有一个客户端来调用操作,然后休眠一段时间,如果客户端在配置的超时内没有向服务发送另一条消息,则不活动超时将使客户端通道出错。 ReceiveTimeout是单个接收操作可以花费的时间。例如,客户端向服务发送消息。如果服务花费的时间超过ReceiveTimeout来完成读取该消息,则会出错。 同样,SendTimeout是单个Send操作可以花费多长时间的超时。
简单地说 - (发送/接收)超时控制允许发送和接收消息的时间。 InactivityTimeout是会话的设置,与您不允许发生任何事情的时间有关。
如果您打开Fiddler并在线路上观看消息,您会看到在InactivityTimeout和发送消息之间有足够长的空闲时间时,会有&#34; Keep Alive&#34;尽管没有从应用程序层进行通信,但底层ReliableSessionBindingElement发送的消息仍能使通道保持活动状态。
答案 2 :(得分:0)
根据this person,有一个错误,其中receiveTimeout会覆盖inactivityTimeout。