1

バインディング用に次の構成があります。

<binding name="wshttp" openTimeout="00:01:00" sendTimeout="00:02:00" receiveTimeout="00:03:00" closeTimeout="00:04:00">
     ..snap
     <reliableSession inactivityTimeout="00:05:00" maxRetryCount="8" ordered="true"/>
     ..snap
</binding>

ここでの私の期待は、クライアント プロキシが 2 分以内に送信に失敗した場合、要求を再試行する必要があるということです。でも:

16:37:49,242 INFO開始プロセス
16:39:49,588 FATAL要求操作は、割り当てられたタイムアウト 00:02:00 内に完了しませんでした

したがって、アプリケーションは 2 分以内にエラーをスローし、要求を再試行しません。再試行を開始するにはどうすればよいですか?

4

1 に答える 1

3

WS-ReliableMessagingのWCF実装は、そのようには機能しません。プロキシ操作がタイムアウトした場合、(それ以上の)再試行は実行されません。プロトコルの再試行ロジックは、基になるトランスポートに渡されたがRMレイヤーで確認応答されておらず、最終的にMaxRetryCountInactivityTimeoutによって制限されているメッセージに適用されます。

プロキシチャネルからCommunicationExceptionまたはTimeoutExceptionを受信すると、セッションが終了したと見なすことができます。この時点で、再接続して最初からやり直す必要があります(または、「中断」して状態を保存した場所がわかっている場合は、回復できる可能性がありますが、このロジックを実装するのはユーザーの責任です)。

基本的に、通信操作が完了するのを待つことができる最長の期間を表すタイムアウト値を渡す必要があります。それが失敗した場合は、Abort()して最初からやり直す必要があります。

于 2010-01-13T09:06:43.573 に答える