小编Sca*_*007的帖子

可靠的会话故障原因不明

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

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

客户端

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

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

内部异常有类似的消息:

"请求操作未在分配的00:01:00超时内完成.分配给此操作的时间可能是较长超时的一部分."

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

System.ServiceModel.Channels.ReliableRequestSessionChannel.SyncRequest.WaitForReply(TimeSpan timeout)
Run Code Online (Sandbox Code Playgroud)

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

服务端

使用WCF跟踪我得到一个System.ServiceModel.CommunicationException消息:

"序列已被远程端点终止.会话已停止等待特定回复.因此,可靠会话无法继续.可靠会话出现故障."

并且堆栈跟踪结束于:

System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
Run Code Online (Sandbox Code Playgroud)

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

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

我很坚持这个.任何人都可以建议为什么可靠的会话会以这种方式出错?

session wcf

19
推荐指数
1
解决办法
4790
查看次数

标签 统计

session ×1

wcf ×1