0

我正在考虑将 Azure SignalR 功能整合到我的 .net 核心 Blazor Web 应用程序中。为此,我一直在关注本教程 - Azure Signalr Serverless。这工作正常 - 我有一个运行 Azure 函数应用程序的项目,可以启动两个浏览器并进行聊天会话。我要做的是添加从已配置到我的 Blazor 应用程序中的 Azure signalR 集线器接收这些消息通知的功能。我在 Index.razor.cs 中添加了以下代码,模仿示例客户端中的 javascript 代码:

public class IndexComponent : ComponentBase
{
    private HubConnection _connection;

    public string Message;

    protected override Task OnInitializedAsync()
    {
        _connection = new HubConnectionBuilder()
            .WithUrl("http://localhost:7071/api")
            .Build();

        _connection.On<string, string>("ReceiveMessage", (user, message) =>
        {
            Message = $"Got message {message} from user {user}";
            this.StateHasChanged();
        });

        _connection.StartAsync();

        return base.OnInitializedAsync();
    }
}

顺便说一句,示例 javascript 代码是:

const connection = new signalR.HubConnectionBuilder()
  .withUrl(`${apiBaseUrl}/api`)
  .configureLogging(signalR.LogLevel.Information)
  .build();

connection.on('newMessage', newMessage);
connection.onclose(() => console.log('disconnected'));

console.log('connecting...');
connection.start()
  .then(() => data.ready = true)
  .catch(console.error);

所以问题是我的 Blazor 应用程序永远不会收到从 javascript 聊天客户端发送的任何消息通知(因此永远不会命中 _connection.On 处理程序)。我的 Blazor 代码中缺少什么?

4

1 回答 1

2

好的,这是我需要做的才能让它在我的 Blazor 应用程序中工作:

_connection.On<object>("newMessage", update =>
        {
            Console.WriteLine(update);
            //Message = update;
        });

我需要订阅“newMessage”目标(因为这是 JS 正在发送),而且发布的类型不是字符串,而是 JObject 类型,我需要将其反序列化为正确的类型。

于 2020-07-01T12:38:53.823 回答