SignalR系列教程:在MVC5中使用SignalR
本章主要内容:
1:向MVC5添加SignaIr
2: 什么是集线器,如何创建集线器
3: 客户端通过jqery调用集线器
本文还是延续“SignaIR快速入门”中聊天室的例子进行讲解。首先我们通过Visual Studio创建MVC Web应用,并使用“程序包管理控制台”执行“Install-PackAge Microsoft.AspNet.SignaLR”安装最新版本的SignaLR。
在解决方案中我们新建一个名为“Hubs”的文件夹,然后在文件夹内新建一个“集线器”,并将类命名为ChatHub.cs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | using Microsoft.AspNet.SignalR; namespace Mvc_SignaIR.Hubs { public class ChatHub : Hub { public void Hello() { Clients.All.welcome( "大家好,欢迎阅读本篇文章" ); } public void Send( string name, string message) { Clients.All.addNewMessageToPage(name,message); } } } |
我们新建一个OWIN Startup类,在Configuration方法中注册SignaLR集线路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | using Microsoft.Owin; using Owin; [assembly: OwinStartup( typeof (Mvc_SignaIR.Startup))] namespace Mvc_SignaIR { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } } |
我们新建一个Home控制器,添加一个名为“Chat”的Action,并添加一个不具有模型的View
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | @{ ViewBag.Title = "Chat"; } < h2 >Chat</ h2 > < div class="container"> < input type="text" id="message" /> < input type="button" id="sendmessage" value="Send" /> < input type="hidden" id="displayname" /> < ul id="discussion"></ ul > </ div > @section scripts { < script src="~/Scripts/jquery.signalR-2.2.0.min.js"></ script > < script src="~/signalr/hubs"></ script > < script > $(function() { var chat = $.connection.chatHub; chat.client.addNewMessageToPage = function(name, message) { $('#discussion').append('< li >< strong >' + htmlEncode(name) + '</ strong >: ' + htmlEncode(message) + '</ li >'); }; chat.client.welcome = function (data) { //当后台触发了Hello方法的时候会进行回调当前事件 alert(data); } $('#displayname').val(prompt('Enter your name:', '')); $('#message').focus(); $.connection.hub.start().done(function () { chat.server.hello(); //连接创建成功后台进行回调 $('#sendmessage').click(function() { chat.server.send($('#displayname').val(), $('#message').val()); $('#message').val('').focus(); }); }); }); function htmlEncode(value) { var encodedValue = $('< div />').text(value).html(); return encodedValue; } </ script > } |
运行项目,即可看到效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?