WCF 可靠会话的目的是啥?

Posted

技术标签:

【中文标题】WCF 可靠会话的目的是啥?【英文标题】:What is the purpose of WCF reliable session?WCF 可靠会话的目的是什么? 【发布时间】:2011-02-24 01:40:35 【问题描述】:

围绕这个主题的文档很差。我将 WCF 服务与托管在 Windows 服务中的 NetTcpBinding 一起使用。问题是会话在一段时间不活动时会被丢弃。我需要的是始终存在的会话。 WCF 可靠会话是否有帮助?或者我可以只玩超时设置?

【问题讨论】:

【参考方案1】:

不,可靠会话也会像任何其他会话一样超时。真正的主要问题是:您到底为什么希望您的会议“无休止”?如果你真的需要这个,你需要增加会话的超时时间。

可靠会话的要点是调用者将知道丢失的任何消息。与流行的看法相反,可靠会话不能保证消息的传递 - 但如果消息无法传递,至少调用者会知道它。

查看其中一些资源以获取更多背景信息:

Introduction to Reliable Messaging with the Windows Communication Foundation Reliable messaging demystified WCF reliable message delivery Reliable sessions made easy with WCF

【讨论】:

感谢您阐明什么是可靠会话。关于“无休止”的会议:我有一个事件驱动的系统。当消息到来时,客户端应该调用一些 WCF 服务。消息每秒都会出现,重要的是要跟上处理每一个消息。有时接收消息之间的间隔可能远大于一秒,比如一两天。所以我需要一些保活机制。 @bsnote:为什么?如果两条消息之间的间隔是两天,那么在我看来,让该会话一直处于活动状态并没有任何意义.... 每收到一条消息就创建一个通道,以防每秒收到一条消息,成本太高。虽然我同意在间隔为一天时进行会话没有意义。 我知道为什么。有时通信是从服务发起的!如果连接断开,这对于某些目的来说是没有好处的,因为 a)我们不知道我们的服务是否仍然存在 b)我们无法访问任何专门为我们准备的广播或消息。但同意,这看起来像是在增加超时时间。【参考方案2】:

如果你不使用频道,它会在一段时间后关闭自己。 您可以更改绑定的默认超时时间(即 10 分钟)。

NetTcpBinding binding = new NetTcpBinding();
binding.ReceiveTimeout = TimeSpan.MaxValue;
binding.ReliableSession.InactivityTimeout = TimeSpan.MaxValue;

阅读更多MSDN

【讨论】:

以上是关于WCF 可靠会话的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

已经实施 csrf 保护时使用会话 id 的目的是啥?

启用可靠会话时 WCF ContractFilter 不匹配

快速入门系列--WCF--06并发限流可靠会话和队列服务

快速入门系列--WCF--06并发限流可靠会话和队列服务

在另一个项目 c# 中使用引用项目的 WCF 服务

使用 awk 有效解析 CSV 的最可靠方法是啥?