Время ожидания сеанса WCF - PullRequest
2 голосов
/ 09 июня 2009

Я хочу установить время ожидания сеанса 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 ]

4 голосов
/ 09 июня 2009

http://msdn.microsoft.com/en-us/library/system.servicemodel.reliablesession.inactivitytimeout.aspx

Комбинация периодов бездействия и времени ожидания получения определяет поведение.

1 голос
/ 20 марта 2013

InactivityTimeout для ReliableSession. Это количество времени, в течение которого канал будет оставаться открытым, пока сообщения приложения не будут отправлены по проводам. Таким образом, если у вас есть клиент для вызова операции, а затем на некоторое время неактивный, тайм-аут неактивности приведет к сбою клиентского канала, если клиент не отправит другое сообщение службе в течение настроенного тайм-аута. ReceiveTimeout - это время, которое может занять отдельная операция приема. Например, клиент отправляет сообщение в сервис. Если службе требуется больше времени, чем ReceiveTimeout, чтобы завершить чтение этого сообщения, произойдет сбой. Аналогичным образом, SendTimeout - это тайм-аут того, сколько времени может занять одна операция отправки.

Проще говоря - (Отправка / получение) Тайм-аут контролирует, сколько времени может занимать отправка и получение сообщений. InactivityTimeout - это настройка для сеанса, связанная с тем, как долго вы не позволяете ничего не делать.

Если вы включите Fiddler и будете наблюдать за сообщениями в сети, вы увидите, что при большом значении InactivityTimeout и достаточно длительном времени простоя между отправкой сообщений будут храниться сообщения «Keep Alive», передаваемые базовым ReliableSessionBindingElement канал жив, несмотря на отсутствие связи со стороны приложения.

0 голосов
/ 27 июля 2009

Согласно этому человеку , существует ошибка, при которой receiveTimeout переопределяет inactivityTimeout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...