簡體   English   中英

SignalR 超過三個應用程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM