Я создал довольно сложные приложения Blazor, вызывая веб-API, внедряя сервисы и используя сторонние библиотеки. Но я использую SignalR впервые. Моя настройка:
- ASP. NET Базовый веб-API (выполнить тяжелую работу)
- Внешний интерфейс - приложение Blazor (на стороне сервера - вызов веб-API через классы служб) я создал в блазорском проекте)
Все работает отлично. Я создал концентратор в моем API и выставить конечную точку. Через клиентов Blazer я могу установить sh подключение и дополнительные клиенты уведомляются всем клиентам через концентратор.
ПРОБЛЕМА Я получаю очень странное сообщение при попытке отправить / передать сообщение от клиента на сервер / концентратор. При нажатии на кнопку «Отправить» я получаю «Uncaught SyntaxError: Неожиданный номер»
При нажатии на ссылку об ошибке, она дает мне;
System.Runtime.CompilerServices.AsyncTaskMethodBuilder 1+AsyncStateMachineBox
1 [System.Threading.Tasks.VoidTaskResult, MBOSS.Pages.Index + d__6]
CODE
Мой компонент 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 = "";
}
}
Мой класс-концентратор также очень прост;
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.
Большое спасибо