可靠的会话故障原因不明

时间:2009-07-17 13:38:05

标签: wcf session

我正在尝试实现以下 - 使用可靠会话由多个线程访问的一个客户端代理实例(保持打开)。到目前为止我所管理的是A)与客户端代理的可靠会话,每次调用创建和处理或B)我的目标,但没有可靠的会话。

但是,当我在绑定上启用可靠会话时,会出现以下行为:

客户端

在应用程序启动时,一切似乎都能正常工作,直到大约18条消息进入WCF会话。我首先引发proxy.InnerChannel.Faulted事件,然后在我在代理上调用方法时捕获异常。例外是System.TimeoutException,其中包含消息:

  

“请求通道在等待回复后超时   00:00:59.9062512。增加传递给调用的超时值   请求或增加Binding上的SendTimeout值。时间   分配给这个操作可能是一个更长的一部分   超时“。

内部异常有类似的消息:

  

“请求操作未在指定的超时时间内完成   00:01:00。分配给此操作的时间可能是一部分   更长的超时。“

内部堆栈跟踪顶部的方法是:

System.ServiceModel.Channels.ReliableRequestSessionChannel.SyncRequest.WaitForReply(TimeSpan timeout)

然后我调用proxy.Close,然后调用proxy.Abort(捕获并忽略异常)。如果我使用默认设置(即只有<reliableSession/>),则调用代理。关闭导致另一个System.Timeout异常(虽然这次分配的超时是00:00:00),但是如果我覆盖上面指定的默认值,则不会抛出异常。

服务侧

利用WCF跟踪我得到一个System.ServiceModel.CommunicationException,并带有消息:

  

“序列已被远程端点终止。会话   已停止等待特定回复。因为这个   可靠的会话无法继续。可靠的会议出了问题。“

堆栈跟踪结束于:

System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)

当远程连接到服务器时,我得到相同的消息,当代码执行步骤超过服务调用中我的服务的return语句时会发生错误。

对我来说令人费解的是,该服务是稳定的,并且在我的帖子开头描述的选项A)或B)中运行,并且在不同数量的消息(大约18)之后发生。前面的事实表明代码没有任何问题(事实上我已经检查过没有抛出异常),而后者只是让我感到困惑,这也是我修改可靠会话绑定设置的原因。

我非常坚持这一点。任何人都可以建议为什么可靠会话会以这种方式出错?

1 个答案:

答案 0 :(得分:1)

你需要覆盖默认值,并将你的超时设置为更高或更低取决于原因,似乎在一些其他程序启动或停止仅在异常之前的一毫秒之后,timout会导致异常

或者最有可能导致

您的分配超时可能会被添加为18分钟或18个呼叫的连续单个超时.plus其他使用时间会加在一起作为一个完整的超时。这可能是它要求更多时间的原因。

在任何情况下,您都必须静态设置自己的设置,因为自动默认值总是会超过您所做的任何更改。

键入您的本地主机http绑定名称,并将closetimeout设置为5.00分钟 甚至可能更改请求时间。 Requesttimeout 2.00分钟

closeTimeout =&#34; 00:05:00&#34;