C# 使用.NET的websocket sharp服务器如何关闭websocket行为?

C# 使用.NET的websocket sharp服务器如何关闭websocket行为?,c#,websocket-sharp,C#,Websocket Sharp,我正在尝试用于项目,服务器需要能够断开websocket连接 连接由继承自的WebSocketBehavior类表示。在WebSocketBehavior上没有Stop或Close或Disconnect方法。我能找到的最接近的是 WebSocketBehavior.Context.WebSocket.Close 因此,我尝试向重写类添加一个方法 public class MySocket : WebSocketBehavior { public void Close() {

我正在尝试用于项目,服务器需要能够断开websocket连接

连接由继承自的WebSocketBehavior类表示。在
WebSocketBehavior
上没有
Stop
Close
Disconnect
方法。我能找到的最接近的是

WebSocketBehavior.Context.WebSocket.Close
因此,我尝试向重写类添加一个方法

public class MySocket : WebSocketBehavior
{
    public void Close()
    {
        base.Context.WebSocket.Close();
    }
}
但这会在日志记录打开时导致错误

2/5/2016 7:08:25 PM|Error|WebSocket.Close|This operation isn't available in: closed

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

如中的票证所述

您只需关闭相关会话:

 Sessions.CloseSession(ID);
编辑:

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


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

从何处调用该关闭()方法?实际上,对我来说,它工作得很好。因此,您可能希望提供有关如何获得错误的更多详细信息。您的错误看起来像是试图关闭一个已经关闭的连接(就像客户端此时已经关闭了它)出于兴趣,你考虑过WebSwitter Spple的替代品吗?如果是的话,你为什么选择它?我个人使用这一个,但是也许你知道一些对我有用的东西可以切换到另一个。@ DAROOOO你在理解坏API和如何遵循它们的超模糊的更高级的方法方面似乎是惊人的。有意义。当它没有意义时,更高级别的方法最终会变得模糊,因为它们没有意义,所以无法猜测我应该在哪里查找。我从来不会猜测查看Sessions对象。事实上,我甚至从来没有想过在单个WebSocketBehavior中查找Sessions对象。如果我是def,请原谅ensive,但我发现你认为我不知道寻找更高层次的方法是屈尊的。是的,这就是为什么我问这个问题,因为A.B.C.D似乎是错误的,但没有明确的方法来做,因为API设计得很差。这是真的,这样做将调用作者在其示例中提供的完全相同的代码。谢谢。我不是我对正确的抽象不太确定。文档很短,自述文件示例显示了通过重写WebSocketBehavior的方法与套接字对话。必须经历
会话
&
ID
似乎是一个完全错误的抽象。为什么单个套接字关心会话和ID?它只想关闭它lf.它不必区分自身和其他会话。以
文件
为例。它是
文件.Close
而不是
文件系统.CloseFile(someFile.ID)
。因此,不清楚正确的抽象是
this.sessions.closession(this.ID)
。正确的抽象意味着应该尝试使用最高级别的方法,而不必访问内部属性,我并不是说库的设计方式与我的设计方式相同,或者存在一种很好的使用方法,但是希望开发人员至少遵循一些好的编程原则在ciples中,您应该同意,通常访问“member,inside member”来调用方法是不好的,如果可能的话,应该使用更高级的方法(封装和信息隐藏)例如,对我来说,这个库就是一个烂摊子,因为它允许访问几乎所有的行为,允许用户做他们想要的更改,并导致大量的副作用,这些副作用远远不能以完整的方式进行测试事情至少一个开发人员应该留下一个文档/rational,解释他为什么做了坏事,但他通过这样做解决了哪些其他问题。(我不假装所有事情都有文档记录,但至少重要的决策应该有文档记录)我同意你的观点,但糟糕的API设计意味着根本不清楚这些抽象是否存在。如果我有一个
文件
,我就不会期望在
文件
上找到一个
OpenFiles
属性,我可以向该属性传递一个名为
id
的属性上的id,因为它对
文件毫无意义我的意思是告诉我应该遵循正确的抽象,假设我有任何理由期望这些抽象存在于第一位。我无法预测会话是否是我应该关心的事情。