C# 为什么WCF服务在InstanceContextMode=每次调用时不自动关闭会话?

C# 为什么WCF服务在InstanceContextMode=每次调用时不自动关闭会话?,c#,wcf,session,C#,Wcf,Session,背景 我正在使用WCF实例上下文模式来了解它们在不同场景中的功能。我将默认服务设置为PerCall。默认情况下,我的意思是,当您创建一个WCF服务库时,它会创建一组默认代码。这就是我正在使用的代码——非常非常简单的服务。我可以从一个简单的客户端调用服务。但是,如果我离开客户端,在大约10或15分钟内不按任何键,然后我尝试再打一个电话,我会收到一条消息,告诉我“如果服务因不活动而中止通道,安全上下文令牌将无效。” 以下是完整的信息: 这是因为我在客户端处理代理的方式。我从不关它。我的代理只是一个

背景

我正在使用WCF实例上下文模式来了解它们在不同场景中的功能。我将默认服务设置为PerCall。默认情况下,我的意思是,当您创建一个WCF服务库时,它会创建一组默认代码。这就是我正在使用的代码——非常非常简单的服务。我可以从一个简单的客户端调用服务。但是,如果我离开客户端,在大约10或15分钟内不按任何键,然后我尝试再打一个电话,我会收到一条消息,告诉我“如果服务因不活动而中止通道,安全上下文令牌将无效。”

以下是完整的信息:

这是因为我在客户端处理代理的方式。我从不关它。我的代理只是一个公共类级别的变量,只要没有错误,我就可以重用它

所以我的问题是:

为什么WCF服务要创建会话?我认为,由于实例上下文模式设置为PerCall,因此它不需要会话。如果它确实需要一个会话,它会在每次调用后关闭会话。即使他们来自同一个代理


需要明确的是:我不是故意使用任何特定于会话的功能。我刚刚创建了一个新的WCF服务库,并将上下文模式设置为PerCall,保留所有默认操作等。这是一个普通的服务。

这条消息是关于安全性的,而不是服务生命周期。您可以拥有一个安全上下文,该上下文跨越许多不同生命周期类型的许多服务,但是如果该安全上下文发生故障(例如,您有一段时间没有更新令牌),则无论服务生命周期设置如何,您都会看到所看到的错误


使用PerSession lifetime services只意味着您将获得自己的特定实例,该实例在会话处于活动状态时保持活动状态。这不一定与安全有关。PerSession服务允许您更轻松地维护基于会话的场景的状态。也就是说,PerSession服务存在许多扩展陷阱;请注意,它们不一定是每个场景的答案。

您使用什么绑定?您是否为每个新呼叫重新初始化客户端?