WCF - 重试不起作用?

时间:2010-01-13 08:47:49

标签: c# wcf ws-reliablemessaging

我的绑定配置如下:

<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 致命请求操作未在指定的超时00:02:00内完成

因此,应用程序会在2分钟内抛出错误,并且不会重试该请求。我应该怎么做让它开始重试?

1 个答案:

答案 0 :(得分:3)

WS-ReliableMessaging的WCF实现不起作用。如果代理操作超时,则不会执行(进一步)重试。协议的重试逻辑适用于已传递到底层传输但尚未在RM层确认的消息,最终由MaxRetryCountInactivityTimeout限制。

从代理通道收到CommunicationException或TimeoutException后,您可以考虑终止会话。此时,您需要重新连接并重新开始(或者如果您知道“停止”的位置并保存一些您可能能够恢复的状态 - 但这个逻辑将是您实施的责任)。

基本上,您应该传递一个超时值,该值表示您愿意等待通信操作完成的最长持续时间。如果失败,那么你必须Abort()并重新开始。