我正在使用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事件进行通知? 谢谢