1、出现错误: signalR Error during WebSocket handshake: net::ERR_CONNECTION_RESET
2、引用SignalR 最新版
SignalR 2 需要.Net 4.5 PM> Install-Package Microsoft.AspNet.SignalR 默认使用的是 Newtonsoft.Json.6.0.0 , 如果项目之前已经引用过了 Newtonsoft.Json,请改为与 SignalR 同版本的!
3、创建Startup.cs 类
using System;using System.Threading.Tasks;using Microsoft.Owin;using Owin;[assembly: OwinStartup(typeof(WD.Web.MVC.Startup))]namespace WD.Web.MVC{ public class Startup { public void Configuration(IAppBuilder app) { // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888 app.MapSignalR(); } }}
4、创建集线器 ChatHub.cs 类
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Web;using Microsoft.AspNet.SignalR;using System.Runtime.Serialization.Json;using Newtonsoft.Json;using WD.Db.Contract;using WD.Web.MVC.Common;using WD.Web.MVC.SignalR;namespace WD.Web.MVC{ public class ChatHub : Hub { public void Online() { Clients.All.SendMsg("张三","上线了" ); } }}
5、客户端初始化
var chat = $.connection.chatHub; (chatHub 为后台集线器的类名,不过要把首字母小写)
chat.client.SendMsg = function (name, message) {
// SendMsg与集线器中的函数名保持一致,例:Clients.All.SendMsg("张三", "上线啦"),返回参数自定义,保持一致即可
//TODO 处理接受消息
};
$.connection.hub.start().done(function () {
//TODO 发送上线消息
chat.server.online();//TODO 初始化各种事件
})6、从外部线程访问PersistentConnection 或者 Hub
var context = GlobalHost.ConnectionManager.GetHubContext <自定义的hub名称> (); var context = GlobalHost.ConnectionManager.GetHubContext <自定义的persistentconnection名称> (); 自定义的persistentconnection名称> 自定义的hub名称>