servicestack ServiceStack中事件订阅服务器的身份验证要求,servicestack,servicestack" /> servicestack ServiceStack中事件订阅服务器的身份验证要求,servicestack,servicestack" />

servicestack ServiceStack中事件订阅服务器的身份验证要求

servicestack ServiceStack中事件订阅服务器的身份验证要求,servicestack,servicestack,我的客户端-服务器应用程序使用ServerEventsFeature从服务器向客户端发送命令。 在客户端中,我使用ServerEventsClient及其Start方法订阅事件,但首先我使用ServerEventsClient.ServiceClient及其Send方法向服务器发送身份验证请求 如果连接中断,我的客户端还需要不断连接到服务器。 为此,我使用ServerEventsClient的OneException操作属性,当连接中断时,我在循环中调用Stop方法,并再次尝试发送身份验证请求,

我的客户端-服务器应用程序使用ServerEventsFeature从服务器向客户端发送命令。 在客户端中,我使用ServerEventsClient及其Start方法订阅事件,但首先我使用ServerEventsClient.ServiceClient及其Send方法向服务器发送身份验证请求

如果连接中断,我的客户端还需要不断连接到服务器。 为此,我使用ServerEventsClient的OneException操作属性,当连接中断时,我在循环中调用Stop方法,并再次尝试发送身份验证请求,直到服务器响应

这一切都很好,但是如果在客户端有时间发送身份验证请求之前重新启动服务器,我会在服务器上看到订阅事件(OnConnect、OnSubscribe等),当检查订阅的属性时,我会得到奇怪的值,如IsAuthenticated:False、UserId:-2。 然后是身份验证请求,再次出现预期的订阅事件,这一次,属性值已经预期为IsAuthenticated:True,UserId:46。 第一种情况下的SessionId与断开连接前的值不同,但与身份验证后的值不匹配。 在OnConnect事件处理程序中,我尝试检查IsAuthenticated属性并调用对象IEventSubscription的Unsubscribe方法,但之后仍然发生在Subscribe事件上。 我有两个问题:

问题1:很明显,ServerEventsClient在中断后会自动尝试重新连接。 在这种情况下,可能由于服务器不可用,客户端无法执行取消订阅请求而未触发Stop方法。 那么,当服务器不可用时,如何停止此过程


问题2:是否可以防止事件订阅未经授权的客户端?

服务器事件客户端在检测到断开的连接后发送检测信号,以确定何时自动尝试重新连接。您可以通过删除返回到客户端的
心跳URL
来停止心跳,例如:

Plugins.Add(new ServerEventsFeature {
    OnConnect = (sub, clientInfo) => clientInfo.Remove("heartbeatUrl")
});
您可以将服务器事件限制为仅允许具有以下权限的经过身份验证的用户:

Plugins.Add(new ServerEventsFeature {
    LimitToAuthenticatedUsers = true,
});