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