SignalR /signalr/hubs 404 Not Found

2019-02-04 01:30发布

I am trying to deploy a SignalR site on IIS. Code all works fine in VS. But getting the 404 not found error trying to resolve signalr/hubs so far I have tried.

1) Changing the Script ref to:

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

2) Modifying Web.Config to include :

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

3) Changing the invoke requests on IIS for UrlMappingsModule.

4) added SignalR.Hosting.AspNet.dll to see if that would help anything.

Not sure what else to try or check, any help or point in the right direction?

13条回答
对你真心纯属浪费
2楼-- · 2019-02-04 02:11

In my case, I lose some owin dependencies then I got the 404 NotFound error.

When I added following dependencies, I retrieve the proxy javascript file clearly from expecting URL. Like URL:1111/singlar/hubs

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

Hope the answer helps someone.

查看更多
Emotional °昔
3楼-- · 2019-02-04 02:15

I was able to fix the 404 on ~/signalr/hubs by changing the following appSetting in web.config to "true".

<add key="owin:AutomaticAppStartup" value="false" />
查看更多
4楼-- · 2019-02-04 02:16

The order of route registration matters. I had this exact problem and fixed it by ensuring my global.asax.cs looked like this:

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);
    }
}

This was in a web site using SignalR, MVC and WebApi all together.

查看更多
戒情不戒烟
5楼-- · 2019-02-04 02:16

I had no issues with routing in MVC3, but did get the path wrong. I would suggest you look at the source and see where the script is actually pointing, make sure it is resolving the application directory ok. And make sure you can physcially open the file with the correct path with your browser. E.g.

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

Can you open the file from a browser (replacing it with the correct subdirectory)?

If not, the hub might not be set up correct and it might point you in the right direction. Fiddler it.

The syntax I used was:

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

It might be the difference between Url.Content and ResolveUrl

查看更多
萌系小妹纸
6楼-- · 2019-02-04 02:21

I had the same problem, it was an asp.net project using signalR, it worked properly before I published but when I hosted it in IIS, it didn't.

After I inspected I realized the address /signalr/hubs is not correct, let me explain more, just do the following steps:

  1. Open up your web application in the browser (Using IIS), you see the interface you designed, yeah? now press ctrl+U or right click on the page an select View Page Source.

  2. You will see multiple links starting with <script> tag at the top of the page, find something like <script src="/signalr/hubs"></script> now click on it, if you are taken to the page which involves "404 - File or directory not found."you have some mistakes on defining address, find the true address and change the address in the address bar to observe the true result

In my case I needed to add my project name at the start of the address, so I had to change the address from:

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

to

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

in which MoveShape was my project name, now after pressing ctrl+U in the browser and following previously told steps, you click on the link and this time you see the true result, the page show codes starting with:

/*!
 * 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.
 *
 */

yeah! that's it, it works properly, keep in mind that it had no problem when I was testing it using Visual studio but not after hosting in IIS, as others have recommended make a correct address by applying <%= ResolveUrl("~/") %> or other methods.

查看更多
在下西门庆
7楼-- · 2019-02-04 02:24

I might be a little late but hope it helps someone. Make sure this code run on start.

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

Because I added a global.asax to my application and then a codebehind but put this in Global.asax file

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

So when i tried to run the application, the Application_Start in my global.asax did not initialize the hub. that's why it couldn't resolve signalr/hubs

fixed with this in my Global.asax

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

and this in my Global.asax.vb:

 Public Class _Global
     Inherits System.Web.HttpApplication
查看更多
登录 后发表回答