我有两个C#程序应该通过WebSockets进行通信,服务器工作正常(也使用Alchemy)并且已经有一段时间了(使用javascript客户端).但是,连接Alchemy会WebSocketClient导致NullReferenceException客户端被抛出.
经过一些调试后,我发现WebSocketClient.cs因为_context.Connection.Connected调用而在第187行抛出异常._context.Connection是与本地相同的实例,_client并且在那个时间点都不为null.在TcpClient.Connectedmsdn.microsoft.com 上的页面上没有列出可能的异常(指示我不应该抛出任何异常).
回过头来,我注意到_client类变量在第176行WebSocketClient.cs从正常查看实例更改为填充异常的实例:
在这一行之后Context,刚刚在第187行添加的Dispose()方法被称为断开连接Connection(这与_client我之前在第131行上提到的实例相同)Context.cs.
我的问题是:为什么会发生这种情况,如何阻止它发生并成功连接到所需的WebSocketServer?
如果您需要更多信息,请在评论中随时与我联系.
编辑1
例外情况仅在服务器实际侦听时发生,如果服务器处于非活动状态,WebSocketClient.cs则未到达第176行(这是正确的行为,因为OnRunClient()在建立与服务器的连接时会调用该行为).
编辑2
根据要求StackTrace:
System.NullReferenceException was unhandled
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=System
StackTrace:
at System.Net.Sockets.TcpClient.get_Connected()
at Alchemy.WebSocketClient.SetupContext(Context context) in C:\...\Alchemy\WebSocketClient.cs:regel 187
at Alchemy.WebSocketClient.HandleClientThread() in C:\...\Alchemy\WebSocketClient.cs:regel 94
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, …Run Code Online (Sandbox Code Playgroud)