gpt4 book ai didi

c# - SignalR 未触发 OnDisconnected

转载 作者:行者123 更新时间:2023-11-30 12:55:45 25 4
gpt4 key购买 nike

问题:SignalR 未在我的网络服务器上触发 OnDisconnected。很简单,就是不开火。我试过:

  • 关闭浏览器窗口
  • 导航离开
  • 正在重新加载
  • 在客户端的 SignalR 连接上触发 stop()。

public override Task OnDisconnected(bool stopCalled) {
LogUtil.LogInfo("Disconn");
return base.OnDisconnected(stopCalled);
}

我使用的是 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>

这段代码感觉不对,但这是我可以可靠地工作的唯一迭代。

关于c# - SignalR 未触发 OnDisconnected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46235822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com