一、随便你在哪个命名空间下新建一个Startup类,并在在该类中注册SignalR。
using Owin; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace SignalRTest.Utils { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } }
二、在web.config的configuration\appSettings下配置节点,value值是Startup的全类型名称
<appSettings> <add key="owin:AppStartup" value="SignalRTest.Utils.Startup"/> </appSettings>
三、在前端页面中引入相关js文件,如下:
<script src="scripts/jquery-1.10.2.min.js"></script> <script src="scripts/jquery.signalR-2.2.2.min.js"></script> <script src="signalr/hubs"></script>
啥?找不到signalr/hubs这个文件,不要慌,这个是程序自动生成的,在页面中只需要加上就OK!
四、新建一个Hub派生类
using Microsoft.AspNet.SignalR; using Microsoft.AspNet.SignalR.Hubs; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Threading.Tasks; using MyProject.Entity; using SignalRTest.BLL; namespace SignalRTest.Utils { [HubName("groupChatHub")] public class GroupChatHub:Hub { [HubMethodName("sendMsg")] public void SendMsg(string data){ } } }
新建的GroupChatHub类型继承Hub抽象类。在GroupChatHub类中实现的方法可以在客户端页面的当做js方法调用,相当于在客户端调用服务端的方法,和AjaxPro有点像。
具体调用的情景如下所示:
$(function () { //链接hub var ticker = $.connection.groupChatHub; //启动 $.connection.hub.start().done(function () { //启动完毕,则调用服务器方法 创建聊天房间
ticker.server.joinRoom(QueryString("sid")).done(function () { }); }); $("#btnSend").click(function () { //获取文本框信息 var tbxInput = $(this).parent().children(".msgs"); if (tbxInput) { var msg = tbxInput.val() || ''; if (msg.length > 0) { // 调用服务器方法 主动发送消息,传入发送组,和发送的内容。 ticker.server.sendMsg(QueryString("sid"), msg); tbxInput.val(''); } else tbxInput.focus(); } }); $(".msgs").bind("keydown", event, function () { if (event.keyCode == 13) $("#btnSend").click(); }); });
由此看出,继承自Hub抽象类的派生类GroupChatHub中的公共方法,是可以在前端通过js调用的!