我的MessageWebSocket.OutputStream处理



我正在努力找出我的MessageWebSocket.OutputStream处置。

WebsocketManager ():

public WebsocketManager()
    {
        baseInit();
    }

baseInit ():

private void baseInit()
    {
        messageWebsocket = new MessageWebSocket();
    }

connect ():

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被处置,但我不知道它在哪里被处置。但也许这是关于线程而不是关于处理的事情?

如果你需要任何额外的信息,尽管问。我一整天都在纠结这个问题。

编辑1:

还是不能解决问题。今天我尝试了以下方法:

  • 将MessageWebSocket更改为ClientWebSocket:其他例外,但含义相同:The WebSocket is in an invalid state ('Closed')
  • 为WebSocket使用会话变量。这也没有解决问题

我感激每一个想法,即使它只是一个很小的想法…

我能够解决这个问题。在我发送数据之前,我总是创建一个新的DataWriter。现在我只创建一个DataWriter,它在我将WebSocket连接到服务器时被初始化。

我猜问题是,当数据写入器被垃圾收集器清理时,输出流被关闭。在我看来,数据写入器不应该有那么大的权力,但这是我唯一的解释。

相关内容

  • 没有找到相关文章

最新更新