未找到SignalR / signalr / hubs 404

时间:2012-06-22 11:10:23

标签: asp.net iis signalr

我正在尝试在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以查看是否有帮助。

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

14 个答案:

答案 0 :(得分:30)

路线登记的顺序很重要。我有这个确切的问题并通过确保我的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的网站上。

答案 1 :(得分:17)

这个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();
        }
    }
}

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

答案 2 :(得分:11)

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

答案 3 :(得分:6)

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

  1. 在webconfig中:

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

    <script src="/signalr/signalr/hubs"></script>
    
    而不是

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

答案 4 :(得分:3)

我可以通过将web.config中的以下appSetting更改为“true”来修复〜/ signalr / hubs上的404。

{{1}}

答案 5 :(得分:1)

确保您网站的AppPool定位到正确版本的.NET Framework。

答案 6 :(得分:1)

我可能会有点迟到,但希望它有所帮助。 确保此代码在开始时运行。

 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

答案 7 :(得分:0)

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

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

您可以从浏览器打开文件(将其替换为正确的子目录)吗?

如果没有,集线器可能设置不正确,可能会指向正确的方向。小提琴吧。

我使用的语法是:

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

可能是Url.Content and ResolveUrl

之间的差异

答案 8 :(得分:0)

我在IIS版本上遇到类似的问题,我通过重启AppPool修复它,重新启动web并立即开始工作。

答案 9 :(得分:0)

这个404可能有很多原因 -

可以找到一些常见的原因
  • 点击浏览器/信号器/集线器中的网址 - 如果出现错误,您将看到完整的错误。
  • 如果您有基类
  • ,请检查HubName属性是否重复
  • 确保您拥有所有项目中引用的正确版本(以避免绑定错误)

答案 10 :(得分:0)

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

打开nuget powershell并使用此命令。

Update-Package -Reinstall

答案 11 :(得分:0)

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

在我检查后,我意识到地址/信号器/集线器不正确,让我解释一下,只需执行以下步骤:

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

  2. 您会在页面顶部看到以<script>标记开头的多个链接,现在点击<script src="/signalr/hubs"></script>,点击它,如果您被带到涉及&#的页面34; 404 - 找不到文件或目录。&#34;您在定义地址时遇到一些错误,找到真实地址并更改地址栏中的地址以观察真实结果

  3. 在我的情况下,我需要在地址的开头添加我的项目名称,所以我不得不更改地址:

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

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

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

    /*!
     * 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中托管之后没有问题,因为其他人建议通过应用<%= ResolveUrl("~/") %>或者其他方法。

答案 12 :(得分:0)

就我而言,我失去了一些 owin依赖,然后我收到了404 NotFound 错误。

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

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

希望答案可以帮到某人。

答案 13 :(得分:0)

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

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

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