【问题标题】:SignalR /signalr/hubs 404 Not FoundSignalR /signalr/hubs 404 未找到
【发布时间】:2012-06-24 16:27:14
【问题描述】:

我正在尝试在 IIS 上部署 SignalR 站点。代码在 VS 中一切正常。但是到目前为止我已经尝试过尝试解决信号器/集线器时出现 404 not found 错误。

1) 将脚本引用更改为:

script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>

2) 修改 Web.Config 以包含:

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

3) 在 IIS 上更改 UrlMappingsModule 的调用请求。

4) 添加SignalR.Hosting.AspNet.dll 看看是否有帮助。

不确定还有什么可以尝试或检查的,有什么帮助或指向正确的方向吗?

【问题讨论】:

    标签: asp.net iis signalr


    【解决方案1】:

    尝试将通配符应用映射添加到您的服务器,以帮助映射脚本 URL“~/signalr/hubs”中的未知扩展

    【讨论】:

    • 它也适用于我!非常感谢 Chridam。我的问题是服务器正在寻找以下“localhost/signalr/hubs”(使用 Chrome 开发人员控制台确定)。实际上,url 是动态的,因此不会获取所需的 js 文件。
    • 您好,请您详细说明如何添加通配符应用映射,我需要在哪里添加什么细节等,好吗?我现在有这些症状,想试试这个答案
    • @chridam 我不知道如何添加通配符应用映射。请告诉我们?
    • 我试过这个: 但没用。我该怎么办?你们能帮帮我吗? @user685590 您能否通过向我的服务器添加通配符应用程序映射来更新您的答案
    • 在我的情况下 - 我正在向 service1 发送协商请求并从 service2 发出 sendNotification 请求 - 由于握手未正确发生,如果您有多个服务,请确保向所有人发送协商请求其中(根据要求)并为每个人添加侦听器
    【解决方案2】:

    我在 MVC3 中的路由没有问题,但确实弄错了路径。我建议您查看源代码并查看脚本实际指向的位置,确保它可以正常解析应用程序目录。并确保您可以使用浏览器以正确的路径物理打开文件。例如。

    <script src="/MyWebApp/signalr/hubs" type="text/javascript"></script>  
    

    你能从浏览器打开文件吗(用正确的子目录替换它)?

    如果不是,则可能是集线器设置不正确,它可能会为您指明正确的方向。摆弄一下吧。

    我使用的语法是:

    <script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>  
    

    这可能是Url.Content and ResolveUrl的区别

    【讨论】:

      【解决方案3】:

      路由注册的顺序很重要。我遇到了这个确切的问题,并通过确保我的 global.asax.cs 看起来像这样来解决它:

      public class MvcApplication : System.Web.HttpApplication
      {
          protected void Application_Start()
          {
              AreaRegistration.RegisterAllAreas();
              RouteTable.Routes.MapHubs();
      
              WebApiConfig.Register(GlobalConfiguration.Configuration);
              FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
              RouteConfig.RegisterRoutes(RouteTable.Routes);
          }
      }
      

      这是在一个同时使用 SignalR、MVC 和 WebApi 的网站中。

      【讨论】:

      【解决方案4】:

      确保您网站的 AppPool 以正确版本的 .NET Framework 为目标。

      【讨论】:

        【解决方案5】:

        我在 IIS 版本上遇到了类似的问题,我通过重新启动 AppPool 来修复它,重新启动 web 并且它现在可以工作了。

        【讨论】:

          【解决方案6】:

          如果您正在处理网络表单,请执行以下步骤

          1. 在网络配置中:

            <validation validateIntegratedModeConfiguration="false" />
            <modules runAllManagedModulesForAllRequests="true"/>
            
          2. 在页面中添加对 hub 的引用

            <script src="/signalr/signalr/hubs"></script>
            

            而不是

            <script src="/signalr/hubs"></script>
            

          【讨论】:

          • 对我有用
          • 你知道如何删除第二个 /signalr 吗?
          【解决方案7】:

          我可能有点晚了,但希望它对某人有所帮助。 确保此代码在启动时运行。

           Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
              RouteTable.Routes.MapHubs()
           End Sub
          

          因为我在我的应用程序中添加了一个 global.asax,然后是一个代码隐藏,但将它放在 Global.asax 文件中

           <%@ Application Language="VB" CodeBehind = "Global.asax.vb" %> /*This was wrong*/
          

          所以当我尝试运行应用程序时,我 global.asax 中的 Application_Start 没有初始化集线器。这就是它无法解析信号器/集线器的原因

          在我的 Global.asax 中修复了这个问题

           <%@ Application Inherits="_Global" Language="VB" %>
          

          这在我的 Global.asax.vb 中:

           Public Class _Global
               Inherits System.Web.HttpApplication
          

          【讨论】:

          【解决方案8】:

          此 404 错误的原因是集线器未映射,以前必须按照 SimonF 的回答完成。如果您使用的是 SignalR 版本 2,RouteTable.Routes.MapHubs(); 现在已过时。对于映射中心,您可以创建一个启动类,如下所示。

          [assembly: OwinStartup(typeof(WebApplication1.Startup))]
          namespace WebApplication1
          {
              public class Startup
              {
                  public void Configuration(IAppBuilder app)
                  {
                      // Any connection or hub wire up and configuration should go here
                      app.MapSignalR();
                  }
              }
          }
          

          参考:http://www.asp.net/signalr/overview/releases/upgrading-signalr-1x-projects-to-20

          【讨论】:

          • 我认为你错了。 Application_StartIAppBuilder 没有过载 - 我在新的 ASP.NET 版本中也找不到
          • 你从哪个类继承了你的 global.asax public class MvcApplication : System.Web.HttpApplication,我曾经使用过 MvcApplication 类,它对我有用。我没有继续,我使用了OwinStartup,所以我会再试一次,并在 Application_Start 上更新你。但我可以保证 1st 绝对有效。
          • @Simon_Weaver 你是对的,有些事情是错的。当我在 global.asax 中传递 IAppBuilder 时出现 HTTP Error 403.14 - Forbidden 错误,它用于目录浏览,我不知道为什么,没有编译错误。编辑了答案并删除了第二种方法
          【解决方案9】:

          这个 404 可能有很多原因 - 可以找到一些常见的原因

          • 点击浏览器/signalr/hubs 中的url - 如果出现错误,您将看到完整的错误返回。
          • 如果您有基类,请检查 HubName 属性是否重复
          • 确保您在所有项目中引用了正确的版本(以避免绑定错误)

          【讨论】:

            【解决方案10】:

            对我来说,解决方案是 reinstall 所有包并恢复所有依赖项。

            打开 nuget powershell 并使用此命令。

            Update-Package -Reinstall
            

            【讨论】:

              【解决方案11】:

              通过将 web.config 中的以下 appSetting 更改为“true”,我能够修复 ~/signalr/hubs 上的 404。

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

              【讨论】:

                【解决方案12】:

                我遇到了同样的问题,这是一个使用 signalR 的 asp.net 项目,在我发布之前它工作正常,但是当我将它托管在 IIS 中时,它没有。

                我检查后发现地址/signalr/hubs不正确,让我解释一下,只需执行以下步骤:

                1. 在浏览器中打开您的 Web 应用程序(使用 IIS),您会看到您设计的界面,是吗?现在按ctrl+U 或右键单击页面并选择查看页面源。

                2. 你会在页面顶部看到多个以&lt;script&gt;标签开头的链接,如果你被带到涉及“404 - 文件或目录not found."你定义地址有些错误,找到真实地址,在地址栏中修改地址,观察真实结果

                在我的情况下,我需要在地址的开头添加我的项目名称,所以我必须将地址更改为:

                &lt;script src="/signalr/hubs"&gt;&lt;/script&gt;

                &lt;script src="/MoveShape/signalr/hubs"&gt;&lt;/script&gt;

                其中 MoveShape 是我的项目名称,现在在浏览器中按 ctrl+U 并按照之前告诉的步骤后,单击链接,这次你看到了真实的结果,页面显示代码以:

                /*!
                 * ASP.NET SignalR JavaScript Library v2.2.2
                 * http://signalr.net/
                 *
                 * Copyright (c) .NET Foundation. All rights reserved.
                 * Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
                 *
                 */
                

                是的!就是这样,它工作正常,请记住,当我使用 Visual Studio 测试它时它没有问题,但在 IIS 中托管后没有问题,因为其他人建议通过应用 &lt;%= ResolveUrl("~/") %&gt; 或其他方法来制作正确的地址。

                【讨论】:

                  【解决方案13】:

                  在我的例子中,我丢失了一些 owin 依赖项,然后我得到了 404 NotFound 错误。

                  当我添加以下依赖项时,我会从预期的 URL 中清楚地检索代理 javascript 文件。点赞网址:1111/singlar/hubs

                  • Microsoft.Owin
                  • Microsoft.Owin.Core
                  • Microsoft.Owin.Host.SystemWeb
                  • Microsoft.Owin.Security
                  • 欧文

                  希望答案对某人有所帮助。

                  【讨论】:

                    【解决方案14】:

                    检查web.config,在段AppSettings上添加

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

                    on Key 必须是名称键末尾的空格,例如@Randy H。

                    【讨论】:

                    • 第一次(几乎)投票最少的答案是正确的,谢谢 :)
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-07-31
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-10-11
                    相关资源
                    最近更新 更多