SignalR / signalr / концентраторы 404 Not Found

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

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

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


person user685590    schedule 22.06.2012    source источник


Ответы (14)


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

person chridam    schedule 25.06.2012
comment
у меня тоже работает! Большое спасибо, Chridam. Моя проблема заключалась в том, что сервер искал следующие localhost / signalr / hubs (определяемые с помощью консоли разработчика Chrome). На самом деле URL-адрес является динамическим, поэтому он не подберет необходимый файл js. - person Master Yoda; 05.04.2016
comment
Привет, не могли бы вы подробнее рассказать, как добавить карту приложения с подстановочными знаками, какие детали мне нужно добавить, где и т. Д., Пожалуйста? У меня сейчас эти симптомы, и я хотел бы попробовать этот ответ - person Simon Green; 06.02.2019
comment
@chridam Я не знаю, как добавить карту приложения с подстановочными знаками. Пожалуйста скажи нам? - person Su Llewellyn; 22.02.2019
comment
Я пробовал это: ‹script src = ~ / signalr / hubs› ‹/script›, но это не сработало. Что я должен делать? Ребята, не могли бы вы мне помочь? @ user685590 Можете ли вы обновить свой ответ, добавив карту приложения с подстановочными знаками на мой сервер - person mannyCalavera; 02.06.2019
comment
в моем случае - я отправлял запрос на согласование в service1 и делал запрос sendNotification из службы2 - из-за чего рукопожатие не происходило должным образом, если у вас несколько служб, убедитесь, что вы отправили запрос согласования всем из них (в соответствии с требованиями) и добавить слушателей к каждому из них - person abhijat_saxena; 26.06.2020

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

person SimonF    schedule 28.01.2013
comment
Дополнительная информация под заголовком Ошибка 404 не найдена здесь: asp.net/signalr / overview / Устранение неполадок и отладка / - person cbp; 27.08.2013
comment
Далее - отображение концентраторов больше не требуется в signalr 2.0 и новее (и фактически вызывает ошибку): asp.net/signalr/overview/signalr-20/ - person John; 07.08.2014
comment
Хотя это не сработало для меня, это указывало мне в правильном направлении. В моем случае мне не хватало app.MapSignalR (); в методе Startup.Configuration (приложение IAppBuilder). Так что спасибо тебе! - person Vishal; 07.03.2019

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

person Chaitanya Gadkari    schedule 16.02.2015
comment
Я думаю, вы ошибаетесь. Нет перегрузки Application_Start с IAppBuilder - я не нашел и в новой версии ASP.NET - person Simon_Weaver; 14.05.2015
comment
от какого класса вы унаследовали свой global.asax public class MvcApplication : System.Web.HttpApplication, я использовал класс MvcApplication в качестве этого, и это сработало для меня. Я не стал продолжать, я использовал OwinStartup, поэтому я попробую еще раз и сообщу вам о Application_Start. Но я могу заверить, что 1-й определенно работает. - person Chaitanya Gadkari; 14.05.2015
comment
@Simon_Weaver ты прав, что-то не так. когда я передаю IAppBuilder в global.asax, возникает ошибка Ошибка HTTP 403.14 - Запрещено, это означает просмотр каталогов, я не знаю почему, ошибки компиляции нет. Отредактировал ответ и удалил второй подход - person Chaitanya Gadkari; 15.05.2015

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

  1. В webconfig:

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

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

    вместо того

    <script src="/signalr/hubs"></script>
    
person Sobinscott    schedule 23.05.2013
comment
‹Script src = / signalr / signalr / hubs› ‹/script› действительно работал у меня - person shalke; 04.02.2014
comment
Вы знаете, как убрать второй / signalr? - person nZeus; 09.10.2014

Мне удалось исправить ошибку 404 на ~ / signalr / hubs, изменив следующий appSetting в web.config на «true».

<add key="owin:AutomaticAppStartup" value="false" />
person Randy H.    schedule 09.10.2017

Проверьте web.config, в сегменте AppSettings добавьте

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

на ключе должен быть пробел в конце имени ключа, например @Randy H.

person cmyell11    schedule 06.04.2020
comment
Первый раз (почти) наименее проголосовавший ответ был правильным, спасибо :) - person Hagai Wild; 21.04.2021

Убедитесь, что AppPool вашего сайта нацелен на правильную версию .NET Framework.

person Sasha    schedule 10.03.2013

Я могу немного опоздать, но надеюсь, что это кому-то поможет. Убедитесь, что этот код запускается при запуске.

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

Потому что я добавил global.asax в свое приложение, а затем codebehind, но поместил это в файл Global.asax

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

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

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

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

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

 Public Class _Global
     Inherits System.Web.HttpApplication
person Seichi    schedule 17.02.2014
comment
Примечание. Концентраторы сопоставления больше не требуются в SignalR версии 2.0 и более поздних версий: asp.net/signalr/overview/signalr-20/ - person John; 07.08.2014

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

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

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

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

Я использовал такой синтаксис:

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

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

person Stuart Chaulk    schedule 03.07.2012

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

person Usman    schedule 22.04.2013

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

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

Для меня решением было reinstall все пакеты и восстановить все зависимости.

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

Update-Package -Reinstall
person Mihai Alexandru-Ionut    schedule 27.05.2017

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

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

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

  2. Вы увидите несколько ссылок, начинающихся с тега <script> вверху страницы, найдите что-то вроде <script src="/signalr/hubs"></script>, теперь щелкните по нему, если вы попали на страницу, содержащую «404 - Файл или каталог не найден». У вас есть некоторые ошибки при определении адрес, найдите истинный адрес и измените адрес в адресной строке, чтобы увидеть истинный результат

В моем случае мне нужно было добавить имя моего проекта в начало адреса, поэтому мне пришлось изменить адрес с:

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

to

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

person Muhammad Musavi    schedule 15.01.2018

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

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

  • Microsoft.Owin
  • Microsoft.Owin.Core
  • Microsoft.Owin.Host.SystemWeb
  • Microsoft.Owin.Security
  • Овин

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

person arslanaybars    schedule 24.05.2018