Asp.net core .Net核心信号器服务器到服务器重新连接

Asp.net core .Net核心信号器服务器到服务器重新连接,asp.net-core,websocket,signalr,signalr.client,asp.net-core-signalr,Asp.net Core,Websocket,Signalr,Signalr.client,Asp.net Core Signalr,我正在尝试了解更多有关在web套接字服务停止时重新连接websocket连接服务器到服务器的信息。我已经仔细查看了文档和其他问题(主要是查找客户端到服务器),但无法决定要实现什么 因此,目标是在服务A启动时,让微服务A连接到微服务B上的web套接字。一切正常,但当我关闭服务B时,当我重新启动B时,服务A中的HubConnection状态总是断开。例如,使用Microsoft.AspNetCore.signar.Client 1.1.0 public class MessageHubPro

我正在尝试了解更多有关在web套接字服务停止时重新连接websocket连接服务器到服务器的信息。我已经仔细查看了文档和其他问题(主要是查找客户端到服务器),但无法决定要实现什么

因此,目标是在服务A启动时,让微服务A连接到微服务B上的web套接字。一切正常,但当我关闭服务B时,当我重新启动B时,服务A中的HubConnection状态总是断开。例如,使用
Microsoft.AspNetCore.signar.Client 1.1.0

    public class MessageHubProxy : IMessageHubProxy 
    {
        private readonly HubConnection _hubConnection;

        public MessageHubProxy()
        {
            _hubConnection = new HubConnectionBuilder().WithUrl("http://localhost:54994/messageHub").Build();

            InitiateConenction().Wait();
        }

        private async Task InitiateConenction()
        {
            await _hubConnection.StartAsync();
        }

        public void AddMessage(string message)
        {
            _hubConnection.InvokeAsync("addMessage", post);
        }
    }
在我停止并启动服务B并调用AddMessage后,当我查看AddMessage中的
\u hubConnection
。。我在
轮毂连接上看到以下属性:

HandshakeTimeout: 15 seconds,
KeepAliveInterval: 15 seconds,
ServerTimeout: 30 seconds,
State: Disconnected

从我读到的内容来看,也许我仍然误解了握手超时、KeepAliveInterval和ServerTimeout的用法。。也许我可以使用其中一个让服务A在服务B启动并运行后重新连接?或者我看到HUB连接类型有一个
。在
上,可能我需要捕获断开连接并手动呼叫重试?非常感谢您提供我如何处理这种意义上的服务器到服务器重新连接的任何信息

当连接失败时,您可以使用Polly。

公共类MessageHubProxy:IMessageHubProxy
{
专用只读HubConnection\u HubConnection;
public messagehubbroxy()
{
_hubConnection=新的HubConnectionBuilder()。带有URL(“http://localhost:54994/messageHubBuild();
政策
.Handle()
.WaitAndRetry(5,r=>TimeSpan.FromSeconds(5),(ex,ts)=>{Log.Error(“连接到数据库时出错。5秒内重试”);}
.Execute(()=>InitiateConction());
}
专用异步任务InitiateConction()
{
wait_hubConnection.StartAsync();
}
公共无效添加消息(字符串消息)
{
_hubConnection.InvokeAsync(“addMessage”,post);
}
}
public class MessageHubProxy : IMessageHubProxy 
{
    private readonly HubConnection _hubConnection;

    public MessageHubProxy()
    {
        _hubConnection = new HubConnectionBuilder().WithUrl("http://localhost:54994/messageHub").Build();

         Policy
        .Handle<Exception>()
        .WaitAndRetry(5, r => TimeSpan.FromSeconds(5), (ex, ts) => { Log.Error("Error connecting to DB. Retrying in 5 sec."); })
        .Execute(() => InitiateConenction());
    }

    private async Task InitiateConenction()
    {
        await _hubConnection.StartAsync();
    }

    public void AddMessage(string message)
    {
        _hubConnection.InvokeAsync("addMessage", post);
    }
}