[英]SignalR over three applications
我們有三個 .Net Core 應用程序,一個 Blazor 服務器前端 (A),它調用一個 Web 應用程序 (B),后者調用另一個 Web 應用程序 (C)。
用於通過 SignalR Core 進行通信的應用程序 A 和 C。 我們不得不將應用程序 B 放在這些中間(商業原因)。
我想知道我們是否仍然可以通過應用程序 B 進行這種通信?
我們可以使用 B 作為 SignalR 代理 - 如果可以,如何使用?
非常感謝。
首先,您需要一個在后台運行的托管服務,並持有一個到 AppA 的信號客戶端連接對象。
public class SignalRClientService : IHostedService
{
private HubConnection _connection;
private readonly IHubContext<MyHub> _myhubContext;
public SignalRClientService(IHubContext<MyHub> myhubContext)
{
_myhubContext = myhubContext;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
_connection = new HubConnectionBuilder()
.WithUrl("https://example.com/hub")
.WithAutomaticReconnect()
.Build();
await _connection.StartAsync();
_connection.On<string, int>("myEvent", MyEventHandler);
}
// Route a message from C to A
public Task Method1(string arg1, int arg2)
{
return _connection.SendAsync("Method1", arg1, arg2);
}
// Route a message from A to C
private Task MyEventHandler(string arg1, int arg2)
{
return _myhubContext.Clients.All.SendAsync("myEvent", arg1, arg2);
}
public Task StopAsync(CancellationToken cancellationToken)
{
return _connection.StopAsync();
}
}
你的集線器看起來像
public class MyHub : Hub
{
private readonly SignalRClientService _signalRClientService;
public MyHub(SignalRClientService signalRClientService)
{
_signalRClientService = signalRClientService;
}
public Task Method1(string args1, int args2)
{
return _signalRClientService.Method1(args1, args2);
}
}
這里有一個警告,因為 A 和 B 之間只保持一個連接,所以 A 基本上會看到一個用戶。 您可以轉發身份驗證令牌並維護 A 和 B 之間的多個連接,但解決方案會更復雜一些,但這是可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.