WCF会话超时

时间:2009-06-09 08:52:26

标签: .net wcf

我想将会话超时设置为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>

一切都正确。

有人可以向我解释一下吗?

谢谢,

阿尔贝托

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

InactivityTimeout用于ReliableSession。它是通道在线路上没有发送应用程序消息时保持打开的时间。因此,如果您有一个客户端来调用操作,然后休眠一段时间,如果客户端在配置的超时内没有向服务发送另一条消息,则不活动超时将使客户端通道出错。 ReceiveTimeout是单个接收操作可以花费的时间。例如,客户端向服务发送消息。如果服务花费的时间超过ReceiveTimeout来完成读取该消息,则会出错。 同样,SendTimeout是单个Send操作可以花费多长时间的超时。

简单地说 - (发送/接收)超时控制允许发送和接收消息的时间。 InactivityTimeout是会话的设置,与您不允许发生任何事情的时间有关。

如果您打开Fiddler并在线路上观看消息,您会看到在InactivityTimeout和发送消息之间有足够长的空闲时间时,会有&#34; Keep Alive&#34;尽管没有从应用程序层进行通信,但底层ReliableSessionBindingElement发送的消息仍能使通道保持活动状态。

答案 2 :(得分:0)

根据this person,有一个错误,其中receiveTimeout会覆盖inactivityTimeout。