能否在非ASP.NET Core的ASP.NET项目中使用SignalR?求相关教程
传统ASP.NET项目(非Core)中使用SignalR的可行性及实现步骤
完全可以在依赖Page Postback的传统ASP.NET项目中使用SignalR,但要注意使用ASP.NET SignalR(这是专门针对.NET Framework版ASP.NET的库,和ASP.NET Core SignalR是两个独立的产品,不能混用),二者不会和Postback机制冲突。
实现步骤
1. 安装ASP.NET SignalR包
在Visual Studio中,通过NuGet包管理器安装Microsoft.AspNet.SignalR,或者在Package Manager Console执行命令:
Install-Package Microsoft.AspNet.SignalR
2. 配置SignalR路由
打开项目的Global.asax.cs,在Application_Start方法中添加路由注册:
using System.Web.Routing; using Microsoft.AspNet.SignalR; protected void Application_Start(object sender, EventArgs e) { // 保留原有项目代码,新增以下行 RouteTable.Routes.MapHubs(); }
3. 创建Hub类
在项目中新建类(示例命名为ChatHub.cs),继承自Hub:
using Microsoft.AspNet.SignalR; public class ChatHub : Hub { public void SendMessage(string userName, string content) { // 向所有连接的客户端推送消息 Clients.All.receiveNewMessage(userName, content); } }
4. 在ASP.NET页面中集成客户端逻辑
以Web Form页面(如Default.aspx)为例,在页面末尾添加脚本引用:
<script src="Scripts/jquery-1.6.4.min.js"></script> <script src="Scripts/jquery.signalR-2.4.3.min.js"></script> <script src="/signalr/hubs"></script>
注:jQuery版本需和SignalR兼容,优先使用NuGet包自带的jQuery文件。
接着添加客户端交互脚本:
<script> $(function () { // 建立Hub连接 var chatHub = $.connection.chatHub; // 定义客户端接收消息的方法 chatHub.client.receiveNewMessage = function (userName, content) { $('#messageList').append(`<li><strong>${userName}</strong>: ${content}</li>`); }; // 启动连接后绑定发送按钮事件 $.connection.hub.start().done(function () { $('#sendBtn').click(function () { var name = $('#userName').val(); var msg = $('#messageContent').val(); chatHub.server.sendMessage(name, msg); $('#messageContent').val(''); }); }); }); </script>
最后添加页面交互元素:
<div> <input type="text" id="userName" placeholder="你的名字" /> <input type="text" id="messageContent" placeholder="输入消息" /> <button id="sendBtn">发送</button> </div> <ul id="messageList"></ul>
5. 验证功能
启动项目,打开多个浏览器窗口访问该页面,发送消息即可看到实时推送效果,同时原有Page Postback功能不受影响。
注意事项
- 项目的.NET Framework版本需≥4.5,这是ASP.NET SignalR的最低要求。
- 若项目使用Forms认证,可在Hub类上添加
[Authorize]属性限制访问权限。 - 不要混淆ASP.NET SignalR和ASP.NET Core SignalR,后者仅适用于Core项目。
内容的提问来源于stack exchange,提问作者DragonFire
相关产品推荐
相关产品推荐

