【问题标题】:Receiving two messages from .net core SignalR and react从.net core SignalR接收两条消息并做出反应
【发布时间】:2021-01-19 21:17:43
【问题描述】:

我正在尝试使用 .net SignalR 和 React 应用程序作为客户端设置 WebSocket 连接,以便能够发送私人消息。

这是我在客户端的代码:

const setUpSignalRConnection = async () => {
    const connection = new HubConnectionBuilder()
      .withUrl("http://localhost:5000/messaginghub")
      .build();

    setConnection(connection);

    connection.on("ReceiveMessage", (message: string) => {
      console.log("Recieved Message", message);

      setChatMessages((oldArray) => [...oldArray, message]);
    });

    try {
      await connection.start();
    } catch (err) {
      console.log("Errors", err);
    }

    return connection;
  };


  const SendMessage = async () => {
    if (connection) {
      try {
        console.log("sending message");
        await connection.send("SendPrivateMessage", user.user.email, message);
      } catch (e) {
        console.log("Errors sending message", e);
      }
    } else {
      alert("No connection to server yet.");
    }
  };

和我的服务器端代码

       public async Task SendPrivateMessage(string userEmail, string message)
        {
            var RecivingMessageUser = _unitOfWork.UserRepository.GetByEmail(userEmail);

            var currUserEmail = Context.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var sender = _unitOfWork.UserRepository.GetByEmail(currUserEmail);

            var newMessage = new MessagesDto
            {
                FromId = sender.UserId,
                ToId = RecivingMessageUser.UserId,
                MessageBody = message,
                SentAt = DateTime.UtcNow,
            };

            await Clients.Group(userEmail).SendAsync("ReceiveMessage", message);

            _unitOfWork.MessagingRepository.Insert(_mapper.Map<MessagesDto, Messages>(newMessage));
            _unitOfWork.SaveChanges();

        }

        public override Task OnConnectedAsync()
        {
            var groupName = Context.User.FindFirstValue(ClaimTypes.NameIdentifier);
            Groups.AddToGroupAsync(Context.ConnectionId, groupName);

            return base.OnConnectedAsync();
        }

        public override Task OnDisconnectedAsync(Exception ex)
        {
            Groups.RemoveFromGroupAsync(Context.ConnectionId, Context.User.FindFirstValue(ClaimTypes.NameIdentifier));

            return base.OnDisconnectedAsync(ex);
        }

使用console.logs,我看到我发送了一次消息,消息存储在数据库中一次,但不知何故,在另一端,我收到了两条消息。

我正在本地机器上用两个不同的浏览器对其进行测试。

我做错了什么?

【问题讨论】:

    标签: c# .net reactjs websocket signalr


    【解决方案1】:

    您后端的哪个方法调用了两次? 你告诉你的消息保存在数据库中一次,所以它不应该是调用两次的 SendPrivateMessage 方法。

    【讨论】:

    • 嘿抱歉,这很紧急。我无法让它工作,所以我去了别的东西。不过,感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多