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