SignalR 2不适用于azurewebsites

时间:2013-12-03 15:31:52

标签: c# asp.net-mvc websocket signalr

我在服务器上有一个简单的基于SignalR的计时器,用于更新仪表板面板。在VS2012上一切正常,但是当我部署到azure或IIS7.5时,它无法建立连接。 Here are the errors from console

这是我的中心:

public class BroadCastHub : Hub
{

    // Is set via the constructor on each creation 
    //private readonly Broadcaster _broadcaster;
    private readonly TimeSpan BroadcastInterval = TimeSpan.FromMilliseconds(AppConfig.Instance.Tracing.RefreshRate * 1000);

    public BroadCastHub()  {
        if (AppConfig.Instance.Tracing.EnableServerAutoUpdates)
        {
            // Start the broadcast loop
            var _broadcastLoop = new Timer(
                UpdatePanel,
                null,
                BroadcastInterval,
                BroadcastInterval);
        }
    }

    public void UpdatePanel()
    {
        UpdatePanel(null);
    }

    public void UpdatePanel(object o)
    {

        var appService = DependencyResolver.Current.GetService<IApplicationService>();
        var applications = appService.GetSummaryCollection();
        var model = applications.Select(c => new ApplicationState
        {
            id = c.id,
            lastRunTime = c.lastRunTime.GetValueOrDefault(),
            totalTraces = c.totalTraces,
            status = appService.GetStatus(c.lastRunTime, c.lastTraceType, c.traceInterval)
        }.InjectFrom(c)).Cast<ApplicationState>().AsQueryable();

        Clients.All.updatePanel(model);

    }

}

这是我的JS代码(Angular):

   function init() {

        var broadCastHub = $.connection.broadCastHub;
        broadCastHub.client.updatePanel = function(apps) {
            console.log('Broadcasting');
        };

        $.connection.hub.start()
        .done(function () {
            console.log('Now connected, connection ID=' + $.connection.hub.id);
        })
        .fail(function () { console.log('Could not Connect!'); });

        //listenBroadcast();
    }

修改: 奇怪的是,我看到了类似的文章,并按照以下方式实施:

public class Broadcaster
{
    private readonly IApplicationService _applicationService;
    private readonly static Lazy<Broadcaster> _instance = new Lazy<Broadcaster>(() => new Broadcaster());
    // We're going to broadcast to all clients a maximum of 25 times per second
    private readonly TimeSpan BroadcastInterval = TimeSpan.FromMilliseconds(AppConfig.Instance.Tracing.RefreshRate * 1000);
    private readonly IHubContext _hubContext;
    private Timer _broadcastLoop;

    public Broadcaster()
    {
        _applicationService = DependencyResolver.Current.GetService<IApplicationService>();
        // Save our hub context so we can easily use it 
        // to send to its connected clients
        _hubContext = GlobalHost.ConnectionManager.GetHubContext<BroadCastHub>();

        if (AppConfig.Instance.Tracing.EnableServerAutoUpdates) { 
            // Start the broadcast loop
            _broadcastLoop = new Timer(
                UpdatePanel,
                null,
                BroadcastInterval,
                BroadcastInterval);
        }

    }

    public void UpdatePanel(object state)
    {
        var applications = _applicationService.GetSummaryCollection();
        var model = applications.Select(c => new ApplicationState
        {
            id = c.id,
            lastRunTime = c.lastRunTime.GetValueOrDefault(),
            totalTraces = c.totalTraces,
            status = _applicationService.GetStatus(c.lastRunTime, c.lastTraceType, c.traceInterval)
        }.InjectFrom(c)).Cast<ApplicationState>().AsQueryable();

        _hubContext.Clients.All.updatePanel(model);

    }

    public static Broadcaster Instance
    {
        get
        {
            return _instance.Value;
        }
    }
}

我的中心:

public class BroadCastHub : Hub
{

    // Is set via the constructor on each creation 
    private readonly Broadcaster _broadcaster; 

    public BroadCastHub() 
        : this(Broadcaster.Instance) 
    { 
    }

    public BroadCastHub(Broadcaster broadcaster) 
    { 
        _broadcaster = broadcaster; 
    } 

    public void UpdatePanel() 
    { 
        _broadcaster.UpdatePanel(null); 
    } 

}

感谢这篇文章,我会深入了解一下。

0 个答案:

没有答案
相关问题