Poc*_*hen 5 c# asp.net signalr
问题:SignalR 没有OnDisconnected在我的网络服务器上触发。它非常简单,但不会触发。我试过了:
public override Task OnDisconnected(bool stopCalled) {
LogUtil.LogInfo("Disconn");
return base.OnDisconnected(stopCalled);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 SignalR 2.2.0.0 并且OnConnected工作正常。
我尝试了最后一次客户端调用的建议,以确保连接正常运行。
我搜索了所有论坛、SO、GIT 等,但没有解决我的问题。
我也遇到了这个问题,我不得不使用 LongPolling。我还没有找到任何当前断开/重新连接 javascript 代码的示例。
这是我的代码(为了完整性,排除了劣质的 html):
<hr />
<style>
table { table-layout: fixed; }
table th, table td { overflow: hidden; }
</style>
<div id="logs">
<table id="logTable" class="table">
<thead>
<tr>
<th style="width: 20%">Time</th>
<th style="width: 5%">Level</th>
<th>Message</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="/lib/signalr-clientES5-1.0.0-alpha2-final.js" type="text/javascript"></script>
<script type="text/javascript">
// global refs
var transportType;
var logger;
var loggingHub;
var loggingConnection;
function prependLogRow(logEvent) {
var d = new Date(logEvent.timeStamp); //.ToString("dd/MM H:mm:ss");
var m = logEvent.message;
var s = "<tr><td>" + d + "</td><td>" + logEvent.level + "</td><td>" + m + "</td></tr>";
$("#logTable tbody").prepend(s);
var rowCount = $('#logTable tr').length;
if (rowCount > 500) {
$("#logTable").find("tr:gt(250)").remove();
}
};
function createLogEvent(message) {
var logEvent = {};
logEvent.timeStamp = new Date();
logEvent.level = 'Info';
logEvent.message = message;
return logEvent;
};
function bindEvents(logger) {
logger.connection.onclose = (e) => {
var logEvent = createLogEvent('Logger disconnected. Retrying...');
prependLogRow(logEvent);
setTimeout(function ()
{
transportType = signalR.TransportType.LongPolling; //;WebSockets
logger = new signalR.ConsoleLogger(signalR.LogLevel.Trace);
loggingHub = new signalR.HttpConnection(`https://${document.location.host}/signalr`, { transport: transportType, logger: logger });
loggingConnection = new signalR.HubConnection(loggingHub, logger);
bindEvents(loggingConnection);
var logEvent = createLogEvent('Logger reconnected.');
prependLogRow(logEvent);
}, 1000); // Restart connection after a second.
};
logger.on('Log', (logEvent) => {
prependLogRow(logEvent);
});
logger.start().catch(err => {
console.log('connection error');
});
};
$(document).ready(function () {
transportType = signalR.TransportType.LongPolling; //;WebSockets
logger = new signalR.ConsoleLogger(signalR.LogLevel.Trace);
loggingHub = new signalR.HttpConnection(`https://${document.location.host}/signalr`, { transport: transportType, logger: logger });
loggingConnection = new signalR.HubConnection(loggingHub, logger);
bindEvents(loggingConnection);
var logEvent = createLogEvent('Logger loaded. Please wait...');
prependLogRow(logEvent);
})
</script>
Run Code Online (Sandbox Code Playgroud)
这段代码感觉不对,但这是我能够可靠工作的唯一迭代。
| 归档时间: |
|
| 查看次数: |
2544 次 |
| 最近记录: |