使用websocket-sharp for .NET如何关闭WebSocketBehavior?

gma*_*man 6 c# websocket-sharp

我正在尝试使用websocket-sharp进行项目,服务器需要能够删除websocket连接.

连接由您继承的WebSocketBehavior类表示.有没有StopCloseDisconnect上方法WebSocketBehavior.我能找到的最接近的是

WebSocketBehavior.Context.WebSocket.Close
Run Code Online (Sandbox Code Playgroud)

所以我尝试在我的重写类中添加一个方法

public class MySocket : WebSocketBehavior
{
    public void Close()
    {
        base.Context.WebSocket.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在打开日志记录时会导致错误

2/5/2016 7:08:25 PM|Error|WebSocket.Close|This operation isn't available in: closed
Run Code Online (Sandbox Code Playgroud)

服务器如何断开/关闭WebSocket连接?

Gam*_*per 2

正如他们的仓库中的票所述

您只需关闭相关会话即可:

 Sessions.CloseSession(ID);
Run Code Online (Sandbox Code Playgroud)

编辑:

它与OP的代码相同,但通过正确的抽象调用,理论上应该可行,但是他尝试从“低级别”访问东西的事实使我怀疑他访问其他内部功能都绕过“公共方法” “这可能会导致错误的行为(比如“公共方法”调用的东西不再起作用,我建议您仅从适当的抽象中访问所有内容,以避免出现问题,之后如果问题仍然存在,您应该开一张票要求修复错误在原始存储库中。这样的错误无法在那里修复,因为需要了解您编写的所有其他代码。

之后,您应该使用日志文件跟踪客户端和服务器端以发现发生了什么,例如客户端已关闭连接(如 Evk 在注释中所述)

  • 我同意你的观点,但糟糕的 API 设计意味着我们不清楚这些抽象是否存在。如果我有一个“File”,我不会期望在“File”上找到一个“OpenFiles”属性,我可以向该属性传递一些恰好位于名为“ID”的属性上的ID,因为它对于“File”来说没有任何意义。 File` 具有这些属性之一。我的观点是告诉我我应该遵循“正确的抽象”假设我有任何理由期望这些抽象首先存在。我无法想象“Sessions”是我应该关心的事情。 (2认同)