当SignalR获取数据时,Ajax对mvc控制器动作的调用非常慢

时间:2018-02-02 11:17:22

标签: ajax asp.net-mvc signalr

我的应用流程

在我的应用程序 - 仪表板中,

  1. 我有SignalR脚本,当新数据从设备到达时,它会获取新数据

  2. 它还有一个ajax脚本,可以在Controller上点击后端获取数据 - 单击“获取”按钮时。

  3. 如果新数据不断进入(例如,当SignalR持续获取数据并发布到所有连接的客户端时),上面#2中提到的Ajax Call需要2分钟以上。

    否则

    上面的Ajax Call Point#2获取数据的时间非常短。

    任何想法,更好的方法,......即使SignalR不断获取数据,我仍然可以避免ajax调用#2的缓慢。

    这是我的#2 Ajax Call ==>致电Home控制器操作方法SignalList

     $('#DeviceID').on('change', function () {
        $('#DeviceName').text("Device : " + $('#DeviceID option:selected').text());
        $.ajax({
            url: "/Home/SignalList",
            type: "POST",
            data: { deviceID: $('#DeviceID').val() },
            //contentType: "application/json; charset=utf-8",
            dataType: "html",
            //cache: false,
            //async: true,
            success: function (result) {
                //alert("AAA");
                $('#signalCheckListBox').html(result);
            },
            failure: function (response) {
                alert(response.responseText);
            },
            error: function (response) {
                alert(response.responseText);
            }
        });
    

    这是SignalR脚本

     (function () {   
    // Defining a connection to the server hub.
    var signalHub = $.connection.signalHub; //alert("ACCC");
    // Setting logging to true so that we can see whats happening in the browser console log. [OPTIONAL]
    $.connection.hub.logging = true;
    // Start the hub
    $.connection.hub.start();
    
    
    // This is the client method which is being called inside the SignalHub constructor method every 3 seconds
    signalHub.client.SendSignalData = function (signalData) {
        dModel = signalData;
    
        updateSignalData(signalData);//<============ # Statekemnt A 
    };
    $.connection.hub.disconnected(function () {
        setTimeout(function () {
            $.connection.hub.start();
        }, 5000); // Restart connection after 5 seconds.
    }); }()); 
    

    上面标记的语句A 是一种方法,它(1)更新UI中的不同html元素,并且(2)在条件上发送电子邮件。 对于发送电子邮件,它也会命中同一个控制器Home(??? 这会是问题???

    电子邮件ajax调用低于==&gt;它调用Home控制器操作方法Communicate

    function email(alarmSignalInfo) {
    $.ajax({
        url: "/Home/Communicate",
        type: "POST",
        dataType: "json",
        //data: { alarmSignalInfo: JSON.stringify(alarmSignalInfo) },
        data: { alarmSignalInfo: alarmSignalInfo },
        //cache: false,
        //async: true,
        success: function (result) { onSuccess(result); }
    }); }
    

0 个答案:

没有答案