我的 MessageWebSocket.OutputStream 放在哪里?
Where does my MessageWebSocket.OutputStream dispose?
我正在努力寻找我的 MessageWebSocket.OutputStream
的处置位置。
WebsocketManager():
public WebsocketManager()
{
baseInit();
}
baseInit():
private void baseInit()
{
messageWebsocket = new MessageWebSocket();
}
连接():
public async void connect(string token, IEventAggregator eventAggregator, EvaLogger evaLogger)
{
try
{
messageWebsocket.SetRequestHeader("iPlanetDirectoryPro", token);
_eventAggregator = eventAggregator;
_evaLogger = evaLogger;
_localDataManager = new SqliteLocalDataManager(_evaLogger, _eventAggregator);
messageWebsocket.MessageReceived += OnMessageReceived;
messageWebsocket.Closed += OnClosed;
messageWebsocket.Control.MessageType = SocketMessageType.Utf8;
await messageWebsocket.ConnectAsync(WSURI);
}
catch (Exception e)
{
_evaLogger.Error(e.Message, e);
}
}
requestChats():
public async void requestChats()
{
DataWriter dataWriter = new DataWriter(messageWebsocket.OutputStream);
dataWriter.WriteString(WebsocketRequestFactory.Create(SocketEventsEnm.GET_CHATS));
await SendData(dataWriter);
}
sendTextMessage():
public async void sendTextMessage(long chatId, string message)
{
DataWriter dataWriter = new DataWriter(messageWebsocket.OutputStream);
dataWriter.WriteString(WebsocketRequestFactory.Create(SocketEventsEnm.MESSAGE_OUT, chatId, message));
await SendData(dataWriter);
}
发送数据():
private async Task SendData(DataWriter dataWriter)
{
try
{
_evaLogger.Info("Trying to send data...");
await dataWriter.StoreAsync();
_evaLogger.Info("Data was sent");
}
catch (Exception e)
{
_evaLogger.Error(e.Message, e);
}
}
一切都按预期工作,我可以毫无问题地调用 requestChats()
,但是当我调用 sendTextMessage()
时,我得到一个 System.ObjectDisposedException
。我也可以调用 requestChats()
而不是 sendTextMessage()
。但是在我第二次调用这些方法之一之后,我将得到 System.ObjectDisposedException
。
我很确定它是 MessageWebSocket.OutputStream
被处置的,但我不知道它被处置在哪里。但也许这是关于线程而不是关于处置的事情?
如果您需要任何其他信息,请直接询问。我整天都在为这个问题苦苦挣扎。
编辑 1:
还是没弄清楚问题所在。今天我尝试了以下操作:
- Change MessageWebSocket to ClientWebSocket: Other exception 但意思是一样的:
The WebSocket is in an invalid state ('Closed')
- 为 WebSocket 使用会话变量。也没有解决问题
我很感激每一个想法,即使它只是一个非常小的想法...
我能够解决问题。在发送数据之前,我总是在创建一个新的 DataWriter。现在我只创建一个 DataWriter,当我将 WebSocket 连接到服务器时,它会被初始化。
我猜问题是当垃圾收集器清理数据写入器时,输出流关闭了。 Imo datawriter 不应该有那么大的权力,但这是我唯一的解释。
我正在努力寻找我的 MessageWebSocket.OutputStream
的处置位置。
WebsocketManager():
public WebsocketManager()
{
baseInit();
}
baseInit():
private void baseInit()
{
messageWebsocket = new MessageWebSocket();
}
连接():
public async void connect(string token, IEventAggregator eventAggregator, EvaLogger evaLogger)
{
try
{
messageWebsocket.SetRequestHeader("iPlanetDirectoryPro", token);
_eventAggregator = eventAggregator;
_evaLogger = evaLogger;
_localDataManager = new SqliteLocalDataManager(_evaLogger, _eventAggregator);
messageWebsocket.MessageReceived += OnMessageReceived;
messageWebsocket.Closed += OnClosed;
messageWebsocket.Control.MessageType = SocketMessageType.Utf8;
await messageWebsocket.ConnectAsync(WSURI);
}
catch (Exception e)
{
_evaLogger.Error(e.Message, e);
}
}
requestChats():
public async void requestChats()
{
DataWriter dataWriter = new DataWriter(messageWebsocket.OutputStream);
dataWriter.WriteString(WebsocketRequestFactory.Create(SocketEventsEnm.GET_CHATS));
await SendData(dataWriter);
}
sendTextMessage():
public async void sendTextMessage(long chatId, string message)
{
DataWriter dataWriter = new DataWriter(messageWebsocket.OutputStream);
dataWriter.WriteString(WebsocketRequestFactory.Create(SocketEventsEnm.MESSAGE_OUT, chatId, message));
await SendData(dataWriter);
}
发送数据():
private async Task SendData(DataWriter dataWriter)
{
try
{
_evaLogger.Info("Trying to send data...");
await dataWriter.StoreAsync();
_evaLogger.Info("Data was sent");
}
catch (Exception e)
{
_evaLogger.Error(e.Message, e);
}
}
一切都按预期工作,我可以毫无问题地调用 requestChats()
,但是当我调用 sendTextMessage()
时,我得到一个 System.ObjectDisposedException
。我也可以调用 requestChats()
而不是 sendTextMessage()
。但是在我第二次调用这些方法之一之后,我将得到 System.ObjectDisposedException
。
我很确定它是 MessageWebSocket.OutputStream
被处置的,但我不知道它被处置在哪里。但也许这是关于线程而不是关于处置的事情?
如果您需要任何其他信息,请直接询问。我整天都在为这个问题苦苦挣扎。
编辑 1:
还是没弄清楚问题所在。今天我尝试了以下操作:
- Change MessageWebSocket to ClientWebSocket: Other exception 但意思是一样的:
The WebSocket is in an invalid state ('Closed')
- 为 WebSocket 使用会话变量。也没有解决问题
我很感激每一个想法,即使它只是一个非常小的想法...
我能够解决问题。在发送数据之前,我总是在创建一个新的 DataWriter。现在我只创建一个 DataWriter,当我将 WebSocket 连接到服务器时,它会被初始化。
我猜问题是当垃圾收集器清理数据写入器时,输出流关闭了。 Imo datawriter 不应该有那么大的权力,但这是我唯一的解释。