在.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);
});

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章