首页 > 解决方案 > 未找到信号器集线器 404

问题描述

我正在尝试将 Signalr 集成到我的 Web 表单项目中。

首先,使用 nugget 添加引用

我的创业班:

[assembly: OwinStartup(typeof(ns.App_Code.Startup))]
namespace ns 
{
 public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}

我的枢纽:

public class PositionHub : Hub
{
    static ConcurrentDictionary<int, List<string>> connectedUsers = new ConcurrentDictionary<int, List<string>>();


    public override Task OnConnected()
    {


        return base.OnConnected();
    }

}

最后,客户端:

   <script type="text/javascript" src="Scripts/jquery-2.2.4.min.js"></script>
    <script src="Scripts/jquery.signalR-2.3.0.min.js"></script>
    <script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
    <script type="text/javascript">

        $(function() {

            var logger = $.connection.positionHub;
            logger.start();

     });

    </script> 

此外,在 web.config 中添加了以下内容:

<add key="owin:AutomaticAppStartup" value="true" /> 

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />

当我运行该应用程序时,它会出现 404 错误:GET http://localhost:41363/signalr/hubs 404 (Not Found)

这不是我第一次使用信号器,但这是我第一次遇到这个问题,并且一直在努力解决它几个小时,但没有运气......

标签: c#asp.netwebformssignalr

解决方案


我注意到您没有安装将 SignalR 与 Javascript 集成时所需的以下 NuGet 包。

  • Microsoft.AspNet.SignalR此包引入在 ASP.NET 应用程序中使用 SignalR 所需
    的服务器组件和JavaScript 客户端。

  • Microsoft.AspNet.SignalR.JS用于 ASP.NET SignalR 的
    脚本客户端。
    这个由上面的 Microsoft.AspNet.SignalR 自动包含。)

编辑

通过下面的评论,我们发现 OP 的web.config文件包含一些截取 url 的 url 重写规则/signalr/hubs

添加规则以防止此 url 被重写解决了该问题。

<rule name="signalR" enabled="true" stopProcessing="true"> 
    <match url="^signalr.*" /> <action type="None" /> 
</rule> 

推荐阅读