.NET Core SignalR本地正常,部署至Windows Server后报403禁止访问错误
SignalR部署到Windows Server(Plesk面板,.NET Framework 4.8)出现403禁止访问错误
本地运行正常的.NET Core Web应用,部署到Windows Server(Plesk面板,.NET Framework 4.8环境)后,signalr/negotiate请求返回403 - Forbidden: Access is denied.
排查与解决步骤
- 检查Plesk站点权限:确保站点应用池身份拥有访问SignalR相关资源的权限,开启站点匿名认证(若依赖匿名访问)。
- 确认SignalR路由注册:在
Global.asax(.NET Framework环境)中添加路由配置,确保SignalR路由正确映射:protected void Application_Start() { RouteTable.Routes.MapHubs(); } - 检查服务器防火墙规则:确认Windows Server防火墙或Plesk安全组未拦截80/443端口的长轮询请求,放行相关入站规则。
- 验证环境兼容性:当前使用SignalR 2.4.1(适配.NET Framework),若项目基于.NET Core开发,需确认是否已正确适配.NET Framework环境,或考虑将部署环境切换为.NET Core运行时。
- 修正SignalR路径:若站点部署在子目录,需调整JS中的Hub路径为实际路径,例如
/your-subfolder/signalr。 - 临时禁用ModSecurity:Plesk的ModSecurity规则可能误判SignalR请求,禁用后测试是否恢复正常,若正常则调整规则放行。
用户提供的相关代码
后端ChatHub实现
using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.AspNet.SignalR; public class ChatHub : Hub { public void SendAll(string userid, string message) { (new Messages()).addMessage(message, DateTime.Now, userid); string name = (new Users(userid)).getname(); Clients.All.broadcastMessage(name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message); } }
页面头部脚本引用
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" type="text/javascript"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/signalr.js/2.4.1/jquery.signalR.min.js"></script>
前端SignalR连接代码
$.connection.hub.url = "/signalr"; $.connection.hub.start({ transport: 'longPolling' }).done(function() { console.log("hub connection is made"); }).fail(function() { console.log("connection to the hub has been failed"); });
内容的提问来源于stack exchange,提问作者morteza davari
相关产品推荐
相关产品推荐

