【问题标题】:Azure SignalR Blazor app not receiving messagesAzure SignalR Blazor 应用未收到消息
【发布时间】:2020-10-19 09:07:56
【问题描述】:

我正在考虑将 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 代码中缺少什么?

【问题讨论】:

  • Blazor 服务器还是 WebAssembly?
  • @HenkHolterman Blazor 服务器
  • 我以为 Blazor Server 已经连接并运行在服务器上执行的代码?
  • @MichaelPuckettII 我想连接到 Azure SignalR 服务,这是示例中的客户端正在执行的操作。
  • @auburg 我想我明白了。因此,您不想连接后端并使用内置 SignalR,而是要添加一个新的 SignalR 连接,以便客户端既可以连接到后端,也可以连接到另一个 SignalR 服务。对吗?

标签: c# blazor azure-signalr


【解决方案1】:

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

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

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

【讨论】:

  • 我花了两个小时试图了解为什么我的 Blazor 应用没有收到任何通知。以防万一其他人有同样的问题,我认为使用 NewtonSoft 而不是默认的 System.Text.Json 解决了序列化问题AddNewtonsoftJsonProtocol
猜你喜欢
  • 2013-05-21
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多