我有一个SignalR集线器,消息从客户端到达,但回调似乎不工作。
服务器代码:
public class ChatHub : Hub<IChatClient>
{
private readonly ILogger<ChatHub> _logger;
public ChatHub(ILogger<ChatHub> logger)
{
_logger = logger;
}
public async Task SendMessage(ChatMessage message)
{
try
{
if (message != null && message.From > 0 && message.To > 0)
{
....
}
await Clients.All.ReceiveMessage(message);
}
catch (Exception ex)
{
_logger.LogError(ex, $"Error in SendMessage {ex.Message}");
}
}
}
配置SignalR的客户端代码:
private void connectChat()
{
_signalRConnection = new HubConnectionBuilder()
.WithUrl(Properties.Settings.Default.APIPath + "/hubs/chat").WithAutomaticReconnect()
.Build();
try
{
//Connect to the server
_signalRConnection.StartAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
this.Invoke(new Action(() => txtMessages.AppendText("There was an error opening the connection: " + task.Exception.GetBaseException().Message)));
}
else
{
this.Invoke(new Action(() => txtMessages.AppendText("Connected")));
}
});
_signalRConnection.On<string, ChatMessage>("ReceiveMessage", (name, message) =>
{
if (txtMessages.InvokeRequired)
{
txtMessages.Invoke(new Action(() => txtMessages.AppendText($"{name} : {message?.MessageText}" + Environment.NewLine)));
}
else
{
txtMessages.AppendText($"{name} : {message?.MessageText}" + Environment.NewLine);
}
});
}
catch (Exception)
{
throw;
}
}
发送消息的客户端代码
ChatMessage message = new ChatMessage();
message.MessageText = txtChatMessage.Text;
message.From = UserId.Value;
message.To = toStation;
message.MessageTime = DateTime.Now;
_signalRConnection.SendAsync("SendMessage", message).Wait();
1条答案
按热度按时间0sgqnhkj1#
有几个重要的细节,你需要注意他们,例如,确保:
有两个演练文档和学习文章可以帮助您创建SignalR服务器和客户端:
ASP.NET核心SignarR服务器的Windows窗体SignarR客户端
使用上面提到的链接,下面是一个非常快速的分步示例,说明如何在Windows窗体应用程序中发送和接收SignalR消息。在此示例中,聊天服务器应用程序是一个ASP.NET核心Web应用程序,客户端应用程序是一个Windows窗体应用程序。
1-创建主机应用程序
1.创建名为
SignalRChat
的ASP.NET核心Web应用程序。(启用HTTPS,并使用. NET 6)1.在项目中创建一个名为
Hubs
的文件夹,并向其中添加一个新文件ChatHub.cs
,其内容如下:1.在Program.cs中添加SignalR配置,添加配置后的文件内容如下:
2-创建客户端应用程序
1.创建一个新的WinForms应用程序(. NET 6),名称为
SignalRChatClient
。1.放置名为
connectButton
的按钮1.放置名为
sendButton
的按钮1.拖放名为
userTextBox
的文本框1.拖放名为
messageTextBox
的文本框1.拖放名为
messagesList
的列表框1.双击
connectButton
将空的事件处理程序添加到表单中。稍后我们将添加主体。1.双击
sendButton
将空的事件处理程序添加到表单中。稍后我们将添加主体。1.将Form1.cs内容替换为以下内容:使用微软公司的客户端;
1.* * 重要提示!:**请确保将URL修改为适合您的环境的值。为此,您可以运行Web应用并在浏览器中查看URL,也可以打开launchSettings.json文件并查看基于配置文件的URL。我正在VS中进行调试,因此使用了此节点中的URL
https://localhost:7142
:3-设置多个启动和运行
1.右键单击解决方案并选择"属性
1.在启动项目中,选择多个启动项目,并为SignalRChat和SignalRChatClient选择启动,然后保存更改。
现在,您可以按F5键并运行该项目。等待Web浏览器打开并导航到Web应用。Windows窗体也将打开并显示Form1。
按连接按钮,然后在列表中看到"连接已启动"消息后,在文本框中键入用户名和消息,然后按发送,您将在列表中收到消息。
好了!