serviceThrottling的服务属性SessionMode.NotAllowed和maxConcurrentSessions可以与wshttpbinding同时使用。
这是否意味着他们可能会引用两个不同的会话概念?
E.g。
SessionMode.NotAllowed =无状态服务。
maxConcurrentSessions = max。并发(不同?)安全谈判。
编辑:
从this answer to another question我已经理解“WCF将检查app.config [maxConcurrentSessions]是否与属性[SessionMode.NotAllowed]一致,并且如果它们不一致则拒绝启动服务”。
当声明SessionMode.NotAllowed并禁止使用会话时,由于与maxConcurrentSessions的配置相矛盾,WCF是否应该拒绝启动服务?
答案 0 :(得分:1)
SessionMode.NoAllowed说合同必须以无国籍的方式实施
对于NetTcp,这会阻止服务启动,因为它本身就是会话,对于WSHttpBinding,它会抑制会话
如果你使用SessionMode.NotAllowed,那么maxConcurrentSessions将没有效果,因为没有会话节流
WSHttpBinding使用SecureConversation来支持其会话概念(如果可用)。如果它不可用,它将使用可靠的消息传递,如果它可用。如果两者都不可用,则无法支持会话
我前段时间写了一篇关于这个东西的blog article
响应修改时更新
安全对话和会话不是一回事。无论您是否有会话,都可以使用安全对话。 WSHttpBinding支持会话的一种方式是使用安全会话的协商来定义会话。但是,如果你说SessionMode.NotAllowed那么WCF根本就没有sessionID而不支持会话 - 这并不意味着它不会使用安全对话
maxConcurrentSessions限制最大并发会话数。如果关闭会话,则会话数将为0,因此将始终小于最大值