2009-06-09 23 views
2

セッションタイムアウトを30秒に設定したいとします。WCFセッションタイムアウト

はこれを行うには、私は書いた:

<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> 

を、それがすべて正しいのです。

誰かがこれを私に説明できますか?

おかげで、

答えて

4

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

アルベルト非アクティブの組み合わせと受信タイムアウト期間は動作を決定します。

+0

ありがとう、 最初のexapleがうまくいかなかった理由はわかりません... – Alberto

+0

@Kwalこれは非常に奇妙です、ドキュメントは2つのタイマーの低い方が使用されていることを示していますが、どうして? –

0

this personによると、receiveTimeoutがinactivityTimeoutを上書きするバグがあります。

1

InactivityTimeoutはReliableSessionです。これは、アプリケーションメッセージがワイヤで送信されていない間に、チャネルが開いたままになる時間です。したがって、クライアントが操作を呼び出してからしばらくスリープすると、クライアントが設定されたタイムアウト時間内に別のメッセージをサービスに送信しないと、非アクティブタイムアウトはクライアントチャネルに障害を発生させます。 ReceiveTimeoutは、個々の受信操作にかかる時間です。たとえば、クライアントはサービスにメッセージを送信します。そのメッセージの読み込みを完了するためにサービスがReceiveTimeoutよりも時間がかかる場合は、エラーになります。 同様に、SendTimeoutは、1回の送信操作がどれくらい時間がかかるかを示すタイムアウトです。

簡単に言えば - (送信/受信)タイムアウトは、送信と受信のメッセージの受信時間を制御します。 InactivityTimeoutはセッションの設定であり、何も起こらないようにしなければなりません。

Fiddlerをオンにして電信のメッセージを見ると、InactivityTimeoutが大きく、メッセージを送信するのに十分長いアイドル時間がある場合、基になるReliableSessionBindingElementから送信されたKeep Aliveメッセージがアプリケーション層からの通信が行われていないにもかかわらず、チャンネルを生かしてください。

関連する問題