Azure SignalR无服务器与ASP.净的核心



我需要连接ASP。Net Core与SignalR在无服务器模式。我找不到任何好的例子来说明如何做到这一点(仅适用于默认模式),如果它甚至是可能的?

我们确实有Azure功能,可以很好地与无服务器SignalR一起工作。但是现在我们需要连接到另一个web服务器,它正在运行ASP。净的核心。我们怎么做呢?使Azure功能和ASP。. Net核心服务器共享相同的SignalR服务?

您可以使用Azure SignalR服务管理SDK与来自非功能应用程序的无服务器Azure SignalR服务进行交互。他们的示例有一些如何创建协商服务以及如何发送消息的示例。他们使用ihostdservice来管理集线器上下文,但我敢打赌这可以简化。

下面是如何向客户端发送消息的:

var serviceManager = new ServiceManagerBuilder().WithOptions(option =>
{
option.ConnectionString = _connectionString;
option.ServiceTransportType = _serviceTransportType;
})
.BuildServiceManager();

var hubContext = await serviceManager.CreateHubContextAsync("<Your Hub Name>");

hubContext.Clients.All.SendAsync("<Your SignalR Client Callback>", "<Arg1>", "<Arg2>", ...);

下面是一个连接到SignalR的示例(将'localhost'替换为您的Azure SignalR地址)

class Program
{
static async Task Main(string[] args)
{
await Task.Delay(3000);
var sender1 = SenderClient1("john");
var sender2 = SenderClient1("papa");
var sender3 = SenderClient1("marry");
await Task.WhenAll(sender1, sender2, sender3);
Console.ReadKey();
}
static async Task SenderClient1(string nomeUsuario)
{
var connection = new HubConnectionBuilder()
.WithUrl("http://localhost:5005/sockethub", options =>
{
options.Headers["Application"] = "API Sender";
})
.WithAutomaticReconnect()
.Build();
await connection.StartAsync();
await connection.SendAsync("UpdateClient", nomeUsuario);
Console.WriteLine("Connection started.");
connection.Closed += async (error) =>
{
await Task.Delay(new Random().Next(0, 5) * 1000);
await connection.StartAsync();
};
while (true)
{
Thread.Sleep(400);
await connection.SendAsync($"SendNotification", $"{nomeUsuario} - {DateTime.Now:G}");
Console.WriteLine($"Send Message: {nomeUsuario} - {DateTime.Now:G}");
}
}
}

更多细节和完整解决方案的示例可以在这里找到:https://github.com/hgmauri/signalr-socket-dotnet5

最新更新