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