39

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

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

4

14 回答 14

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 的网站中。

于 2013-01-28T14:57:26.730 回答
19

此 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

于 2015-02-16T09:32:49.377 回答
13

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

于 2012-06-25T10:20:30.923 回答
7

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

  1. 在网络配置中:

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

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

    代替

    <script src="/signalr/hubs"></script>
    
于 2013-05-23T07:40:57.887 回答
6

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

<add key="owin:AutomaticAppStartup" value="false" />
于 2017-10-09T12:54:34.900 回答
1

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

于 2013-03-10T20:59:41.483 回答
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
于 2014-02-17T21:13:38.297 回答
1

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

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

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

于 2020-04-06T16:23:13.430 回答
0

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

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

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

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

我使用的语法是:

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

这可能是Url.Content 和 ResolveUrl之间的区别

于 2012-07-03T13:56:05.093 回答
0

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

于 2013-04-22T06:32:13.847 回答
0

这个 404 可能有很多原因 - 可以通过以下方式找到一些常见的原因

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

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

打开 nugetpowershell并使用此命令。

Update-Package -Reinstall
于 2017-05-27T09:40:57.923 回答
0

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

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

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

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

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

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

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

其中 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 中托管后没有问题,因为其他人建议通过应用<%= ResolveUrl("~/") %>或其他方法制作正确的地址。

于 2018-01-15T07:16:10.170 回答
0

就我而言,我丢失了一些owin 依赖项,然后出现 404 NotFound错误。

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

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

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

于 2018-05-24T08:37:46.347 回答