SignalR集线器中的上下文为空 [英] Context is null in SignalR hub

查看:32
本文介绍了SignalR集线器中的上下文为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Web窗体应用程序和测试,以查看SignalR如何满足我的一个需求。我的集线器代码:

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

namespace SignalRTest.Hubs
{
    public class NotificationHub : Hub
    {
        public static readonly System.Timers.Timer _Timer = new System.Timers.Timer();


        public NotificationHub()
        {
            var myInfo = Context.QueryString["myInfo"];

            _Timer.Interval = 2000;
            _Timer.Elapsed += TimerElapsed;
            _Timer.Start();
        }

        void TimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Random rnd = new Random();
            int i = rnd.Next(0, 2);
            var hub = GlobalHost.ConnectionManager.GetHubContext("NotificationHub");
            hub.Clients.All.Alert(i);
        }
    }
}

我的客户端呼叫:

<script type="text/javascript">
    $(function () {
        var logger = $.connection.notificationHub;
        logger.client.Alert = function (msg) {
            if (msg == 1) {
                $("#HyperLink1").show();
                $("#HyperLink2").hide();

            }
            else {
                $("#HyperLink1").hide();
                $("#HyperLink2").show();
            }
        };

        $.connection.hub.qs = "myInfo=12345";
        $.connection.hub.start();
    });
</script>

但是,由于某些原因,当检查服务器代码(在集线器中)上的上下文时,它是空的,因此我无法检索查询字符串值。有什么想法吗?

推荐答案

我不相信在创建中心时上下文可用。相反,您可以覆盖Hub类上的OnConnection

public override Task OnConnected()
{
    var myInfo = Context.QueryString["myInfo"];

    return base.OnConnected();
}

Hub Object Lifetime上的单据:

您不必实例化Hub类或从您自己的类调用其方法 服务器上的代码;所有这些都由SignalR集线器为您完成 管道。SignalR每次都会创建Hub类的新实例 它需要处理集线器操作,例如当客户端连接时, 断开连接或对服务器进行方法调用。

因为Hub类的实例是暂时性的,所以您不能使用它们 维护从一个方法调用到下一个方法调用的状态。每一次 服务器从客户端接收方法调用,该方法调用是 Hub类处理消息。要通过多个选项来维护状态,请执行以下操作 连接和方法调用,请使用某些其他方法,如 数据库,或者Hub类上的静电变量,或者其他类 这不是从Hub派生的。如果将数据持久保存在内存中,请使用 方法(如Hub类上的静电变量),则数据将为 应用程序域回收时丢失。

这篇关于SignalR集线器中的上下文为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆