gpt4 book ai didi

c# - 如何终止来自 ServiceHost 的所有当前客户端连接?

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:58 27 4
gpt4 key购买 nike

我的服务器中运行着一个 WCF 服务,还有几个客户端在根据自定义 UserNamePasswordValidator 对自己进行身份验证后使用该服务,就像 http://burcakcakiroglu.com/?p=2179 中描述的一样。

该服务使用以下属性实现:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

服务器主机实例化如下:

host = new ServiceHost(typeof(AsistenciaService));
host.Open();

目前,客户端在第一次验证后,永远不需要再次验证(关闭客户端应用程序后除外)。

在服务器进程中,我想 -kill- 所有客户端连接,因此它们必须在使用服务之前再次进行身份验证。这可能吗?

编辑:WCF 服务托管在 IIS 服务器中。

最佳答案

您的问题似乎是身份验证。为此,您可以在服务实现上使用 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple)][ServiceContract(SessionMode=SessionMode.Required)] 在您的服务界面上。这样,将为每个新的客户端 session 创建一个新的 InstanceContext(以及服务对象)并在该 session 的生命周期内维护(这需要支持 session 的绑定(bind))。更多详细信息,请参阅 this code project article section .

使用InstanceContextMode.PerSession,服务对象的生命周期独立于客户端 channel 的生命周期,因此每当建立新的通信 session 并在之后处理时,这将创建一个新的服务对象。每个客户端 channel 都有一个专用服务实例,同一 session 中的后续调用由同一服务对象处理。这是实例化上下文的默认值。这将适用于除 basicHttpBinding 之外的所有绑定(bind)。

你的服务(此时)是一个单例,它永远存在,只有在主机关闭时才会被处理掉并且在主机创建时恰好创建一次。使用单例不需要客户端维护与单例实例的 session ,或使用支持传输级 session 的绑定(bind)。 If the contract that the client consumes has a session, by closing the proxy the client will only terminate the session, not the singleton instance. In addition, the session will never expire.

关于c# - 如何终止来自 ServiceHost 的所有当前客户端连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com