我正在努力找出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);
}
的SendData():
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
,但我不知道它会被处置掉的地方。但也许它是关于线程而不是关于处理的东西?
如果您需要任何其他信息,请询问。我一直在努力解决这个问题。
仍然无法找出问题所在。今天我尝试了以下几点:
The WebSocket is in an invalid state ('Closed')
我很感激每一个想法,即使它只是一个非常小的想法......
答案 0 :(得分:3)
我能够解决问题。在发送数据之前,我总是创建一个新的DataWriter。现在我只创建一个DataWriter,当我将WebSocket连接到服务器时,它会被初始化。
我想问题是当数据写入器被垃圾收集器清理时,输出流已关闭。 Imo数据编写者不应该拥有那么大的权力,但这是我唯一的解释。