Ответ 1
Попробуйте добавить карту приложения подстановочного знака на ваш сервер, чтобы помочь сопоставить неизвестное расширение в URL-адресе script ~/signalr/hubs "
Я пытаюсь развернуть сайт 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
, чтобы узнать, поможет ли это что-нибудь.
Не уверен, что еще попробовать или проверить, любую помощь или точку в правильном направлении?
Попробуйте добавить карту приложения подстановочного знака на ваш сервер, чтобы помочь сопоставить неизвестное расширение в URL-адресе script ~/signalr/hubs "
Порядок регистрации маршрута. У меня была эта точная проблема, и я исправил ее, поставив свой файл 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 вместе.
Причиной этой ошибки 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
Если вы работаете над веб-формами, выполните следующие шаги.
В webconfig:
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true"/>
На странице добавьте ссылку на концентратор как
<script src="/signalr/signalr/hubs"></script>
вместо
<script src="/signalr/hubs"></script>
Я смог исправить 404 на ~/signalr/hubs, изменив следующий appSetting в web.config на "true".
<add key="owin:AutomaticAppStartup" value="false" />
Убедитесь, что ваш сайт AppPool предназначен для правильной версии .NET Framework.
Возможно, я немного опоздал, но надеюсь, что это поможет кому-то. Убедитесь, что этот код запущен.
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
У меня не было проблем с маршрутизацией в MVC3, но я ошибался. Я бы предложил вам посмотреть на источник и посмотреть, где на самом деле указывает script, убедитесь, что он разрешает каталог приложения в порядке. И убедитесь, что вы можете физически открыть файл с правильным путем в своем браузере. Например.
<script src="/MyWebApp/signalr/hubs" type="text/javascript"></script>
Можете ли вы открыть файл из браузера (заменив его соответствующим подкаталогом)?
Если нет, концентратор может быть настроен неправильно, и он может указывать на вас в правильном направлении. Скрипач это.
Синтаксис, который я использовал, был:
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
Это может быть разница между Url.Content и ResolveUrl
Аналогичная проблема, с которой я столкнулся в версии IIS, исправил ее, перезапустив AppPool, перезагрузив веб-сервер и его работу.
существует потенциально много причин этого 404 - несколько общих могут быть найдены
Для меня решение заключалось в reinstall
всех пакетах и восстановлении всех зависимостей.
Откройте nuget powershell
и используйте эту команду.
Update-Package -Reinstall
У меня была та же проблема, это был проект asp.net с использованием signalR, он работал должным образом до того, как я опубликовал, но когда я размещал его в IIS, это не так.
После того, как я проверил, я понял, что адрес/сигнализатор/концентраторы не верны, позвольте мне объяснить больше, просто сделайте следующие шаги:
Откройте свое веб-приложение в браузере (используя IIS), вы видите интерфейс, который вы разработали, да? Теперь нажмите ctrl+U
или щелкните правой кнопкой мыши на странице и выберите View Page Source.
Вы увидите несколько ссылок, начинающихся с <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("~/") %>
или другие методы.
В моем случае я потерял некоторые зависимости owin, тогда я получил ошибку 404 NotFound.
Когда я добавил следующие зависимости, я явно извлек файл Javascript прокси из ожидаемого URL. Нравится URL: 1111/Singlar/Hubs
- Microsoft.Owin
- Microsoft.Owin.Core
- Microsoft.Owin.Host.SystemWeb
- Microsoft.Owin.Security
- Owin
Надеюсь, что ответ поможет кому-то.
Раньше все работало нормально, используя SignalR v2.2 и инициализацию с помощью метода app.MapSignalR(). Я использовал Microsoft.Owin версии 3.1.0 в то время.
Обновление до Microsoft.Owin v4.0.1 вызвало проблему "Страница не найдена".
Итак, если вы используете Microsoft.Owin v4, попробуйте понизить версию до v3.1.0