Signalr / Hub не загружается в IIS 7, но работает правильно в Visual Studio
Я работаю над веб-приложением на ASP .Net 4.0 framework, который использует SignalR, установив его из пакета Nuget. Когда я отлаживаю или запускаю приложение без отладки локально, оно работает правильно. Однако при развертывании на рабочем сервере не удается найти signal/hubs
файл, который динамически вводится в httphandlers. Из-за его динамического характера он должен быть создан на лету, поэтому я не могу просто скопировать рабочий файл в проект любой.
Я пробовал следующие способы загрузки файла:
<script src="/signalr/hubs" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
и в коде:
ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference("~/signalr/hubs"));
все они работают локально, но не на сервере. Путь, отображаемый в html, выглядит правильным, но там нет файла, что приводит к ошибке 404. Если это имеет значение, сервер предоставил приложению полное доверие, и приложение запускается как приложение на другом сайте в IIS, использующем поддомен.
9 ответов
проблема была решена путем установки следующих флагов в интернете.конфиг.
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
</configuration>
по какой-то причине Nuget не установил эти значения для Elmah или SignalR
я столкнулся с аналогичной проблемой, я просто изменил /signalr/hubs
до /virtualDirectoryName/signalr/hubs
и это сработало.
заменить:
<script src="/signalr/hubs" type="text/javascript"></script>
С:
<script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
вы JS-файл должен быть включен следующим образом:
<script src="~/Scripts/jquery.signalR-2.1.1.js"></script>
<script src="~/signalr/hubs"></script>
выше ответ для этого, но я хочу указать, если у вас уже есть перезапись URL для общих правил, которые я сделал, и я был смущен относительно моей проблемы 404, которая не была решена этим, я добавил следующее правило, чтобы перезаписать мое жадное соответствие, которое вызывало 404 для перезаписи URL.
<rule name="signalR" stopProcessing="true">
<match url="^signalr.*" />
<action type="None" />
</rule>
<!-- greedier rules below -->
Это только здесь, Если у кого-то есть аналогичная проблема.
в нашем случае у нас была проблема с атрибутом optimizeCompilations в интернете.config (http://msdn.microsoft.com/en-us/library/ms366723.aspx). Удаление optimizeCompilations из интернета.config решил проблему.
я заметил, что @PCasagrande упомянул в одном из комментариев, что эта проблема была на сайте поддомена.
у меня была аналогичная проблема и добавлено правило перезаписи для удаления папки приложения из url. Это решило мою ошибку 404 на "signalr / hubs":
<rule name="Remove SubDomain folder from url" stopProcessing="false">
<match url="^(.*)SubDomain/(.*)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="{R:1}{R:2}" />
</rule>
я добавил правило "удалить поддомен" перед правилом перезаписи для поддомена:
<rule name="Redirect subdomain.domain.com to SubDomain folder" enabled="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^subdomain\.domain\.com$" />
</conditions>
<action type="Rewrite" url="/SubDomain/{R:0}" />
</rule>
Я также использую поддомен. При использовании SignalR 0.5.3 мне пришлось изменить сеть.config:
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>
после обновления до Microsoft.сеть САШ.SignalR 1.0.0-alpha2 NuGet добавил ~ / App_Start / RegisterHubs.cs, но я не думал, что это работает для меня из-за использования веб-форм и моей настройки. Мне пришлось добавить RouteTable.Маршруты.MapHubs (); к моему глобальному.способ эйсакс событий Application_Start.
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapHubs();
}
в основном убедитесь, что вы можете использовать новые функции маршрутизации, которые были добавлены в .Net 3.5 с пакетом обновления 1 (Система.Сеть.Маршрутизация.) Поскольку SignalR зависит от них, вам нужно будет убедиться, что они работают. Попробуйте добавить пользовательский маршрут, чтобы проверить, работает ли ваш маршрут.