在.net4.0下通过普通WEB应用使用SignalR

SignalR 相关:
.net4.0最高只能使用 SignalR 1.2.2版本步骤:
1、通过NuGet管理器安装SignalR 1.2.2
2、创建MyHub类继承Hub类:

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

namespace SignalRTest
{
    
    public class MyHub:Hub
    {
        public static List<UserInfo> userInfoList = new List<UserInfo>();

        public override Task OnConnected() {
            //输入程序
            return base.OnConnected();
        }

        public override Task OnDisconnected()
        { 
            //输入程序
            return base.OnDisconnected();
        }

        public void LoginChat(int userSN)
        {
            userInfoList.Add(new UserInfo(userSN, Context.ConnectionId));
            string msg = "连接成功";

            Clients.Client(Context.ConnectionId).notice("{\"type\":\"msg\",\"content\":\"" + msg + "\"}");

            while (userInfoList.FirstOrDefault<UserInfo>(x => x.ConnectionID == Context.ConnectionId) != null)
            {
                if (1 == client.Exists("msg"))
                {
                    List<ChatMessage> msgList = new List<ChatMessage>();
                    string strMsg = client.Get<string>("msg");
                    client.Del("msg");
                    for (int i = 1; i < 5; i++)
                    {
                        msgList.Add(new ChatMessage(100 + i, DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), strMsg + i, false, i));
                    }
                    Clients.Client(Context.ConnectionId).notice("{\"type\":\"list\",\"content\":" + jss.Serialize(msgList) + "}");
                }
                Thread.Sleep(100);
            }
        }
    }
}

3、通过添加->新建项->全局应用程序类创建一个global.asax文件,在Application_Start内添加路由

protected void Application_Start(object sender, EventArgs e)
        {
            // Register the default hubs route: ~/signalr
            RouteTable.Routes.MapHubs();
        }

4、在前台页面中引入js文件

<script src="/Scripts/jquery-1.6.4.min.js"></script>  
<script src="/Scripts/jquery.signalR-1.2.2.min.js"></script>  
<script src='<%: ResolveClientUrl("~/signalr/hubs") %>'></script>

5、在后台其他页面中调用:

public void SendMsg(string msg)
{
    IHubContext chat = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
    
    //chat.Clients.All.notice(msg);//向所有组发送  
    UserInfo userInfo = MyHub.userInfoList.FirstOrDefault<UserInfo>(x => x.UserSN == Convert.ToInt32(HttpContext.Current.Session["userSN"]));
    chat.Clients.Client(userInfo.ConnectionID).notice(msg); //向指定用户发送
}

6、前台页面与后台通讯
 

//获取后台数据
var myHub = $.connection.myHub;//对应后台的 类 MyHub  注意myHub的首字母小写
//绑定接收消息 notice 与后台Clients.Client(Context.ConnectionId).notice();函数名字相同
myHub.client.notice = function (response) {  
    //消息列表(返回的是TEXT 自己转化为JSON)
    eval("var obj = " + response);
    //更新页面
    UpdateUI(kfwnd, obj);
}
//启动
$.connection.hub.start()
//成功启动
.done(function () {
    console.log("启动完成", myHub);
    //调用后台函数LoginChat 参数为kfwnd.userSN
    myHub.invoke('LoginChat', kfwnd.userSN);
})
//启动失败
.fail(function (reason) {
    console.log("启动失败: " + reason);
});

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值