【发布时间】:2020-02-13 11:52:05
【问题描述】:
我创建了相当复杂的 Blazor 应用程序、调用 Web API、注入服务和使用 3rd 方库。但我第一次使用 SignalR。我的设置是:
- ASP.NET Core Web API(做繁重的工作)
- 前端 - Blazor 应用程序(服务器端 - 通过我在 blazor 项目中创建的服务类调用 Web api)
一切正常。我在我的 api 中创建了一个集线器并公开了端点。通过 blazer 客户端,我可以建立连接,并通过集线器将连接的额外客户端通知给所有客户端。
问题 尝试将消息从客户端发送/广播到服务器/集线器时,我收到一条非常奇怪的消息。单击发送按钮时,我收到“未捕获的语法错误:意外的数字”
点击错误上的链接,它给了我;
System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[System.Threading.Tasks.VoidTaskResult,MBOSS.Pages.Index+d__6]
代码
我的'Index.razror'组件很简单(如下):
@page "/index"
@using Microsoft.AspNetCore.SignalR.Client
<div class="container">
<input type="text" id="message" class="form-control" bind="@Message" />
<input type="button" id="sendMessage" value="Send" class="btn btn-primary" onclick="@SendMessage()" />
<ul id="discussion">
@foreach (var message in messages)
{
<li>@message</li>
}
</ul>
</div>
@code{
HubConnection connection;
string Message = "";
IList<string> messages = new List<string>();
protected override async Task OnInitializedAsync()
{
connection = new HubConnectionBuilder().WithUrl("http://localhost:63572/livedata").Build();
connection.On<string, string>("broadcastMessage", this.OnBroadcastMessage);
await connection.StartAsync();
}
Task OnBroadcastMessage(string name, string message)
{
if (!string.IsNullOrEmpty(message))
{
messages.Add(name + " : " + message);
StateHasChanged();
}
return Task.CompletedTask;
}
async Task SendMessage()
{
await connection.InvokeAsync("Send", "Blazor Client", Message);
Message = "";
}
}
我的 hub 类也很简单;
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
namespace SignalRTest
{
public class LiveData : Hub
{
public override Task OnConnectedAsync()
{
Clients.All.SendAsync("broadcastMessage", "system", $"{Context.ConnectionId} joined the conversation");
return base.OnConnectedAsync();
}
public void Send(string name, string message)
{
Clients.All.SendAsync("broadcastMessage", name, message);
}
public override Task OnDisconnectedAsync(System.Exception exception)
{
Clients.All.SendAsync("broadcastMessage", "system", $"{Context.ConnectionId} left the conversation");
return base.OnDisconnectedAsync(exception);
}
}
}
有人可以建议如何解决这个问题,以便我可以开始将 SignalR 与 Blazor 一起使用。
非常感谢
【问题讨论】:
标签: c# signalr asp.net-core-webapi blazor blazor-server-side