背景
我正在使用WCF实例上下文模式来了解它们在不同场景中的运行方式。我将默认服务设置为PerCall。默认情况下,我只是说当您创建WCF服务库时,它会创建一堆默认代码。这就是我正在使用的代码 - 非常非常简单的服务。我可以从一个简单的客户端调用该服务。但是,如果我离开客户端并且不按任何东西大约10或15分钟,然后我尝试再拨打一个电话,我会收到一条消息告诉我“如果服务中止了频道,安全上下文令牌将无效由于不活跃。“
以下是完整的信息:
这是由于我在客户端处理代理的方式。我从不关闭它。我的代理只是一个公共类级变量,只要它没有出现故障我就会重复使用它。
所以这是我的问题:
为什么WCF服务会创建会话?我认为,由于实例上下文模式设置为PerCall,它不需要会话。如果它确实需要一个会话,它会在每次调用后关闭会话。即使他们来自同一个代理人。
要明确:我不是故意使用任何特定于会话的功能。我只是创建了一个新的WCF服务库,并将上下文模式设置为PerCall,留下所有默认操作等。这就像香草一样服务。
答案 0 :(得分:0)
该消息是关于安全性的,而不是服务生命周期。您可以拥有跨越许多不同生命周期类型的许多服务的安全上下文,但如果该安全上下文中断(例如,您暂时没有续订令牌),您将会看到您看到的错误,而不管服务终身设置。
使用PerSession生命周期服务只是意味着您将获得自己的特定实例,该实例在该会话处于活动状态时保持活动状态。这不一定与安全性有关。 PerSession服务允许您更轻松地维护基于会话的方案的状态。也就是说,PerSession服务存在许多缩放陷阱;请注意,它们不一定是每种情况的答案。