c# - 从.net core SignalR接收两条消息并做出反应
问题描述
我正在尝试使用 .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,我看到我发送了一次消息,并且消息一次存储在数据库中,但不知何故,我收到了两条收到的消息。
我正在我的本地机器上用两个不同的浏览器对其进行测试。
我究竟做错了什么?
解决方案
您后端的哪个方法调用了两次?你告诉你的消息保存到数据库中一次,所以它不应该SendPrivateMessage
是调用 towice 的方法。
推荐阅读
- sql-server - 如何连接到 docker 容器内的 SQL Server 数据库?
- ruby-on-rails - Rails 5.2:授权访问 ActiveStorage::BlobsController#show
- sas - Proc TABULATE 中的权重没有影响
- android - 如何通过 Room 更新数据并在更新后向用户显示一些消息
- java - 来自基于套接字的通信的两个 Netty 套接字应用程序(部分消息)之间的通信问题
- javascript - 在不使用 html 的情况下为文本着色
- django - 我应该在我的 models.py 中写什么来连接两个 ManyToMany 表单?
- gradle - 使用 jib-gradle-plugin 构建多项目 Dropwizard 应用程序
- java - C中的Java ByteBuffer?
- storybook - 故事书集组件到页面中心