Задать вопрос
  • Почему не работает запись в базу данных?

    YungSherman
    @YungSherman Автор вопроса
    Личинка программиста
    Я решил сделать добавление в бд в другом методе класса ChatWebSocketMiddleWare, а именно Invoke(). В нем в параметрах передавался HttpContext, а также решил добавить параметр контекста доступа к бд. Всё стало работать нормально:
    public async Task Invoke(HttpContext context, EnterChatContext chatContext)
            {
                if (!context.WebSockets.IsWebSocketRequest)
                {
                    await _next.Invoke(context);
                    return;
                }
    
                CancellationToken ct = context.RequestAborted;
                WebSocket currentSocket = await context.WebSockets.AcceptWebSocketAsync();
                var socketId = Guid.NewGuid().ToString();
    
                _sockets.TryAdd(socketId, currentSocket);
    
                while (true)
                {
                    if (ct.IsCancellationRequested)
                    {
                        break;
                    }
    
                    var response = await ReceiveStringAsync(currentSocket, ct);
                    if (string.IsNullOrEmpty(response))
                    {
                        if (currentSocket.State != WebSocketState.Open)
                        {
                            break;
                        }
    
                        continue;
                    }
                    int user_id = Int32.Parse(context.User.FindFirst(ClaimTypes.NameIdentifier).Value);
                    int comp_id = Int32.Parse(context.User.FindFirst("CompanyID").Value);
                    GroupChatMessage message = new GroupChatMessage
                   {
                            UserID = user_id,
                            CompanyID = comp_id,
                            Text = response,
                            CreationDate = DateTime.Now
                    };
                    await chatContext.GroupChatMessages.AddAsync(message);
                    await chatContext.SaveChangesAsync();
                    
    
                    foreach (var socket in _sockets)
                    {
                        if (socket.Value.State != WebSocketState.Open)
                        {
                            continue;
                        }
    
                        await SendStringAsync(socket.Value, response, ct);
                    }
                }
                WebSocket dummy;
                _sockets.TryRemove(socketId, out dummy);
    
                await currentSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", ct);
                currentSocket.Dispose();
            }
    Ответ написан
    Комментировать
  • Почему не работает релизная версия приложения?

    YungSherman
    @YungSherman Автор вопроса
    Личинка программиста
    Дело было в том, что у моего ViewHolder и его конструктора не было модификатора доступа. Нужно было выставить "public". Проблема решилась.
    Ответ написан
    Комментировать