当使用Blazor Server时,应保证连接状态是“Connected”,才能发送数据。以下是一个示例,它演示了如何在Hub连接状态为“Connected”时发送消息:
在Blazor Server端C#代码中:
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
if (Context.ConnectionAborted.IsCancellationRequested)
{
return;
}
if (Context.ConnectionState == HubConnectionState.Connected)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
else
{
Console.WriteLine("Cannot send message. Connection state is {0}.", Context.ConnectionState.ToString());
}
}
}
在Blazor客户端C#代码中:
@inject NavigationManager NavigationManager
@inject HubConnectionProvider HubConnectionProvider
@code {
private HubConnection hubConnection;
protected override async Task OnInitializedAsync()
{
hubConnection = await HubConnectionProvider.GetHubConnection();
await hubConnection.StartAsync();
}
public async Task SendMessage()
{
var message = "Hello, World!";
try
{
await hubConnection.SendAsync("SendMessage", "User1", message);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
当连接未处于“Connected”状态时,我们在服务器端将不会发送任何消息,并在控制台上记下错误信息。因此,我们可以在上面的代码中添加自己的错误处理逻辑。