在两个ASP.NET Core 2.1 Razor Web应用程序中将SignalR既用作集线器又用作客户端

时间:2018-06-29 11:37:37

标签: c# asp.net-core signalr asp.net-core-signalr

我有2个ASP.NET Core Razor Web应用程序。每个应用程序都将使用SignalR与Web应用程序客户端和移动客户端进行通信。由于预期用途,我将两个Web应用程序都设置为集线器和客户端,其中客户端使用.NET SignalR客户端。 2个Web应用程序均具有以下内容:

        static internal HubConnection Connection; // In the Startup class

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;

            Connection = new HubConnectionBuilder()
                 // Where the URL is for the OTHER web app
                .WithUrl("https://localhost:44386/NotificationHub")
                .Build();
        }

每个项目在Hubs文件夹中还具有一个从Hub派生的NotificationHub类。

在每个应用程序的Startup ConfigureServices方法中,作为最后一个语句:

services.AddSignalR();

在每个应用程序的Startup Configure方法中,在调用UseMvc之前,我有以下内容:

app.UseSignalR(routes =>
{
    routes.MapHub<NotificationHub>("/NotificationHub");
});

在每个NotificationHub类中,我都有:

    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }

因此,我不确定最初如何从一个客户端连接到集线器,也不确定我是否正确使用了URL。

1 个答案:

答案 0 :(得分:0)

用于使用js客户端:

1)安装signalr npm:npm install @aspnet/signalr

2)在所需页面中添加参考

3)添加连接对象代码

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/NotificationHub")
    .configureLogging(signalR.LogLevel.Information)
    .build();
connection.start().catch(err => console.error(err.toString()));

4)调用您的require方法

connection.invoke("SendMessage", user, message).catch(err => console.error(err.toString()));

对于.Net客户端

1)安装nuget:Install-Package Microsoft.AspNetCore.SignalR.Client

2)

 HubConnection connection  = new HubConnectionBuilder()
            .WithUrl("https://localhost:44386/NotificationHub")
            .Build();     

 await connection.StartAsync();

 await connection.InvokeAsync("SendMessage", 
                    "user", "message");

您可以通过单击按钮或发送消息来开始连接

您可以在下面的链接中找到更多详细信息:

https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction?view=aspnetcore-2.1