加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – SignalR未触发OnDisconnected

发布时间:2020-12-15 21:07:44 所属栏目:百科 来源:网络整理
导读:问题: SignalR未在我的网络服务器上触发OnDisconnected.这很简单,但没有开火.我试过了: 关闭浏览器窗口 导航 重新加载 从客户端连接SignalR连接上的停止(). public override Task OnDisconnected(bool stopCalled) { LogUtil.LogInfo("Disconn"); return b
问题:
SignalR未在我的网络服务器上触发OnDisconnected.这很简单,但没有开火.我试过了:

>关闭浏览器窗口
>导航
>重新加载
>从客户端连接SignalR连接上的停止().

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

我正在使用SignalR 2.2.0.0和OnConnected正常工作.
我已经尝试过在最后一次客户端调用时做的建议,以确保连接已启动并运行.
我搜索了所有论坛,SO,GIT等等,没有解决我的问题.

解决方法

我也有这个问题,我不得不使用LongPolling.我也找不到任何断开/重新连接javascript代码的当前示例.

这是我的代码(为了完整性,不包括shoddy 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`,logger: logger });
        loggingConnection = new signalR.HubConnection(loggingHub,logger);

        bindEvents(loggingConnection);

        var logEvent = createLogEvent('Logger loaded. Please wait...');
        prependLogRow(logEvent);
    })
</script>

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读