Подтвердить что ты не робот

SignalR/signalr/хабы 404 не найдено

Я пытаюсь развернуть сайт SignalR в IIS. Код работает отлично в VS. Но получение 404 не найденной ошибки, пытающейся разрешить signalr/hubs, до сих пор я пробовал.

1) Изменение параметра Script на:

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, чтобы узнать, поможет ли это что-нибудь.

Не уверен, что еще попробовать или проверить, любую помощь или точку в правильном направлении?

4b9b3361

Ответ 1

Попробуйте добавить карту приложения подстановочного знака на ваш сервер, чтобы помочь сопоставить неизвестное расширение в URL-адресе script ~/signalr/hubs "

Ответ 2

Порядок регистрации маршрута. У меня была эта точная проблема, и я исправил ее, поставив свой файл 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 вместе.

Ответ 3

Причиной этой ошибки 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

Ответ 4

Если вы работаете над веб-формами, выполните следующие шаги.

  • В webconfig:

    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true"/>
    
  • На странице добавьте ссылку на концентратор как

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

    вместо

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

Ответ 5

Я смог исправить 404 на ~/signalr/hubs, изменив следующий appSetting в web.config на "true".

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

Ответ 6

Убедитесь, что ваш сайт AppPool предназначен для правильной версии .NET Framework.

Ответ 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*/

Поэтому, когда я пытался запустить приложение, Application_Start в моем global.asax не инициализировал концентратор. почему он не смог разрешить signalr/hubs

исправлено с этим в моем Global.asax

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

и это в моем Global.asax.vb:

 Public Class _Global
     Inherits System.Web.HttpApplication

Ответ 8

У меня не было проблем с маршрутизацией в MVC3, но я ошибался. Я бы предложил вам посмотреть на источник и посмотреть, где на самом деле указывает script, убедитесь, что он разрешает каталог приложения в порядке. И убедитесь, что вы можете физически открыть файл с правильным путем в своем браузере. Например.

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

Можете ли вы открыть файл из браузера (заменив его соответствующим подкаталогом)?

Если нет, концентратор может быть настроен неправильно, и он может указывать на вас в правильном направлении. Скрипач это.

Синтаксис, который я использовал, был:

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

Это может быть разница между Url.Content и ResolveUrl

Ответ 9

Аналогичная проблема, с которой я столкнулся в версии IIS, исправил ее, перезапустив AppPool, перезагрузив веб-сервер и его работу.

Ответ 10

существует потенциально много причин этого 404 - несколько общих могут быть найдены

  • Нажмите на URL-адрес в браузере/сигнале/хабах - если есть ошибка, вы увидите, что полная ошибка вернется.
  • проверьте дублирование атрибута HubName, если у вас есть базовый класс
  • убедитесь, что вы указали правильную версию во всех проектах (чтобы избежать ошибок привязки)

Ответ 11

Для меня решение заключалось в reinstall всех пакетах и ​​восстановлении всех зависимостей.

Откройте nuget powershell и используйте эту команду.

Update-Package -Reinstall

Ответ 12

У меня была та же проблема, это был проект asp.net с использованием signalR, он работал должным образом до того, как я опубликовал, но когда я размещал его в IIS, это не так.

После того, как я проверил, я понял, что адрес/сигнализатор/концентраторы не верны, позвольте мне объяснить больше, просто сделайте следующие шаги:

  1. Откройте свое веб-приложение в браузере (используя IIS), вы видите интерфейс, который вы разработали, да? Теперь нажмите ctrl+U или щелкните правой кнопкой мыши на странице и выберите View Page Source.

  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("~/") %> или другие методы.

Ответ 13

В моем случае я потерял некоторые зависимости owin, тогда я получил ошибку 404 NotFound.

Когда я добавил следующие зависимости, я явно извлек файл Javascript прокси из ожидаемого URL. Нравится URL: 1111/Singlar/Hubs

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

Надеюсь, что ответ поможет кому-то.

Ответ 14

Раньше все работало нормально, используя SignalR v2.2 и инициализацию с помощью метода app.MapSignalR(). Я использовал Microsoft.Owin версии 3.1.0 в то время.

Обновление до Microsoft.Owin v4.0.1 вызвало проблему "Страница не найдена".

Итак, если вы используете Microsoft.Owin v4, попробуйте понизить версию до v3.1.0