无法使用firefox

时间:2016-03-06 05:31:22

标签: javascript jquery asp.net-mvc firefox signalr

启动课程:

using Owin;
using Microsoft.Owin;
using Microsoft.AspNet.SignalR;
[assembly: OwinStartup(typeof(ESimSolFinancial.Startup))]
namespace ESimSolFinancial
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            app.MapSignalR("/signalr", new HubConfiguration());
        }
    }
}

枢纽类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using Microsoft.AspNet.SignalR;

namespace ESimSolFinancial.Hubs
{
    public class ProgressHub : Hub
    {

        public static void SendMessage(string msg,int nCount)
        {
            var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProgressHub>();
            hubContext.Clients.All.broadcastMessage(string.Format(msg), nCount);
        }
    }
}

在js文件中我有这个功能:

function InitializeProgressBar() {
    ProgressBarShow();
    var progressNotifier = $.connection.progressHub;

    progressNotifier.client.broadcastMessage = function (message, count) {
        UpdateProgressBar(message, count);
    };
    $.connection.hub.url = "/signalr";
    $.connection.hub.start({ transport: ['webSockets', 'longPolling'] }).done(function () {
        //progressNotifier.client.broadcastMessage('Opening Connection',0);
    });
}

在点击事件中调用

click事件调用一个动作结果,我有这个代码:

Thread.Sleep(5000);
ProgressHub.SendMessage("Getting Ledger Data", 10);

在长程序完成后更新进度条。

消息在chrome和IE中正确发送,但firefox没有相应地收到这些消息。 UpdateProgressBar(message, count);未被调用。当我打开萤火虫并停止执行很长时间时,它有时会起作用。

我认为这是因为漫长的过程不够长,所以我增加了睡眠时间但事实并非如此。

我不明白我在这里做错了什么。任何帮助表示赞赏。

更新: actionresult是click事件所在的页面。它似乎只在应用程序刚刚启动后才能工作。之后,firefox拒绝接收这些消息。

1 个答案:

答案 0 :(得分:0)

您是否在js中为点击事件调用了服务器功能

 progressNotifier.server.SendMessage(msg,count);

您可以通过调用服务器功能

来修改客户端代码
  function InitializeProgressBar() {
     ProgressBarShow();
    var progressNotifier = $.connection.progressHub;

     progressNotifier.client.broadcastMessage = function (message, count) {
       UpdateProgressBar(message, count);
     };
     $.connection.hub.url = "/signalr";
     $.connection.hub.start({ transport: ['webSockets', 'longPolling']   
        }).done(function () {

     //Call to server function(SendMessage) made .This fuction broadcasts to all clients 
    //by calling client side(broadcast message ) function of all users
    progressNotifier.server.SendMessage(msg,count);

      //progressNotifier.client.broadcastMessage('Opening Connection',0);
    });
 }

请尝试这个。我无法在应用程序中运行该程序。但这就是信号R工作的方式。一个客户端在一个事件上调用一个服务器函数(或服务器回复没有调用但只有一些逻辑),服务器向所选组或选定用户或所有用户(在客户端)广播实时通知

 $('#id').click(function(){
   progressNotifier.server.SendMessage(msg,count); 
  });
  

必须调用服务器功能