SignalR: истекло время ожидания при попытке соединения - PullRequest
1 голос
/ 30 марта 2020

Я использую SignalR и SQLDependency. При изменении на сервере клиенты будут уведомлены. На стороне клиента:

var job = $.connection.processLogHub;

$.connection.hub.logging = true;
$.connection.hub.transportConnectTimeout = 3000;

job.client.displayLastUpdate = function (displayLastUpdate) {
    displayProcessLogChangeNotification(displayLastUpdate);
};

job.client.displayJobsLocked = function (realTimeLockedJobs) {
    displayJobsLockedUnlocked(realTimeLockedJobs);        
};

$.connection.hub.start().done(function () {
}).fail(function (e) {

    alert('error signalr : ' + e);
    console.log(e);

}); 

$.connection.hub.disconnected(function () {
    console.log("$.connection.hub.disconnected");
    setTimeout(function () {
        console.log("restart");
        $.connection.hub.start();
    }, 1000);
});

На стороне сервера:

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
            GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromSeconds(10);
        }
    }

Класс ProcessLogHub:

public class ProcessLogHub : Hub
    {
        public static void DisplayLastUpdate(string lastUpdateDate)
        {
            IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ProcessLogHub>();
            context.Clients.All.displayLastUpdate(lastUpdateDate);
        }

        public static void DisplayJobsLocked(IEnumerable<RealtimeLockedJob> realTimeLockedJobs)
        {
            IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ProcessLogHub>();
            context.Clients.All.displayJobsLocked(realTimeLockedJobs);
        }
    }

Этот код иногда работает хорошо. Но иногда внезапно это больше не работает и выдает мне следующий журнал:

[15:12:27 GMT-0400 (Eastern Daylight Time)] SignalR: Client subscribed to hub 'processloghub'.
[15:12:27 GMT-0400 (Eastern Daylight Time)] SignalR: Negotiating with '/JMT/signalr/negotiate?clientProtocol=2.1&connectionData=%5B%7B%22name%22%3A%22processloghub%22%7D%5D'.
[15:12:27 GMT-0400 (Eastern Daylight Time)] SignalR: Negotiating with '/JMT/signalr/negotiate?clientProtocol=2.1&connectionData=%5B%7B%22name%22%3A%22processloghub%22%7D%5D'.
[15:12:28 GMT-0400 (Eastern Daylight Time)] SignalR: serverSentEvents transport starting.
[15:12:28 GMT-0400 (Eastern Daylight Time)] SignalR: This browser doesn't support SSE.
[15:12:28 GMT-0400 (Eastern Daylight Time)] SignalR: serverSentEvents transport failed to connect. Attempting to fall back.
[15:12:28 GMT-0400 (Eastern Daylight Time)] SignalR: foreverFrame transport starting.
[15:12:28 GMT-0400 (Eastern Daylight Time)] SignalR: Binding to iframe's load event.
[15:12:41 GMT-0400 (Eastern Daylight Time)] SignalR: foreverFrame transport timed out when trying to connect.
[15:12:41 GMT-0400 (Eastern Daylight Time)] SignalR: Stopping forever frame.
[15:12:41 GMT-0400 (Eastern Daylight Time)] SignalR: foreverFrame transport failed to connect. Attempting to fall back.
[15:12:41 GMT-0400 (Eastern Daylight Time)] SignalR: longPolling transport starting.
[15:12:41 GMT-0400 (Eastern Daylight Time)] SignalR: Opening long polling request to 'https://pprd-entrypoint.bell.ca/JMT/signalr/connect?transport=longPolling&clientProtocol=2.1&connectionToken=ZtAV8xQcGKXtBY%2F2Ke3J12DeAYy3QQMirAWzzY4%2FeAW2oX1JeNkg6heTD%2BPUL8nnfgi6MoKl%2Fd1YliMMN6euu0YyLf7uBs02LQ7GsDb%2Fe9MDHrcD4SYESNHbfK3cZxzm&connectionData=%5B%7B%22name%22%3A%22processloghub%22%7D%5D'.
[15:12:41 GMT-0400 (Eastern Daylight Time)] SignalR: Long poll complete.
[15:12:41 GMT-0400 (Eastern Daylight Time)] SignalR: longPolling transport failed to connect. Attempting to fall back.
[15:12:41 GMT-0400 (Eastern Daylight Time)] SignalR: Fallback transports exhausted.
Error: No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.
   {
      [functions]: ,
      __proto__: {
         [functions]: ,
         __proto__: {
            [functions]: ,
            __proto__: null
         },
         message: "",
         name: "Error"
      },
      description: "No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.",
      message: "No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.",
      name: "Error",
      source: undefined
   }
[15:13:36 GMT-0400 (Eastern Daylight Time)] SignalR: Stopping connection.
[15:13:36 GMT-0400 (Eastern Daylight Time)] SignalR: Fired ajax abort async = true.
[15:13:36 GMT-0400 (Eastern Daylight Time)] SignalR: LongPolling failed to connect.
[15:13:36 GMT-0400 (Eastern Daylight Time)] SignalR: Failed to parse server response while attempting to connect.
Unable to get property 'hub' of undefined or null reference

В успешном случае foreverFrame может подключиться к серверу:

[16:27:38 GMT-0400 (Eastern Daylight Time)] SignalR: foreverFrame transport connected. Initiating start request.
[16:27:38 GMT-0400 (Eastern Daylight Time)] SignalR: The start request succeeded. Transitioning to the connected state.
[16:27:38 GMT-0400 (Eastern Daylight Time)] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332, keep alive timeout of 20000 and disconnecting timeout of 30000

Не могли бы вы сказать мне, почему SignalR foreverFrame работает и выключается и как я могу это исправить? Это потому что я использую 2 события для уведомления? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...