Signalr / Hub не загружается в IIS 7, но работает правильно в Visual Studio - PullRequest
25 голосов
/ 08 ноября 2011

Я работаю над веб-приложением на платформе Asp .Net 4.0, которое использует SignalR, установив его из пакета Nuget.Когда я отлаживаю или запускаю приложение без локальной отладки, оно работает правильно.Однако, когда он развернут на рабочем сервере, он не может найти файл signal/hubs, который динамически внедряется в обработчики http.Из-за его динамической природы его нужно создавать на лету, поэтому я не могу просто скопировать рабочий файл в проект.

Я пробовал следующие способы загрузки файла:

<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 ]

30 голосов
/ 09 ноября 2011

Проблема была решена путем установки следующих флагов в файле web.config.

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

По какой-то причине Nuget не установил эти значения для Elmah или SignalR

9 голосов
/ 19 сентября 2012

У меня возникла похожая проблема, я просто изменил /signalr/hubs на /virtualDirectoryName/signalr/hubs, и это сработало.

4 голосов
/ 08 ноября 2011

Заменить:

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

с:

<script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
3 голосов
/ 25 апреля 2016

Ваш Js файл должен включать вот так:

<script src="~/Scripts/jquery.signalR-2.1.1.js"></script>
<script src="~/signalr/hubs"></script>
1 голос
/ 13 августа 2013

По моей вине отсутствовал файл Global.asax в каталоге (dll недостаточно)

1 голос
/ 03 декабря 2012

Я также использую поддомен. При использовании SignalR 0.5.3 мне пришлось изменить web.config:

<system.webServer> 
      <modules> 
        <remove name="UrlRoutingModule-4.0" /> 
        <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
      </modules> 
    </system.webServer>

После обновления до Microsoft.AspNet.SignalR 1.0.0-alpha2 NuGet добавил ~ / App_Start / RegisterHubs.cs, но я не думал, что это работает для меня из-за использования веб-форм и моих настроек. Мне пришлось добавить RouteTable.Routes.MapHubs (); в мой метод Global.asax Application_Start.

void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.MapHubs();
    }

В основном убедитесь, что вы можете использовать новые функции маршрутизации, которые были добавлены в .Net 3.5 SP1 (System.Web.Routing). Поскольку SignalR зависит от них, вам нужно убедиться, что они работают. Попробуйте добавить собственный маршрут, чтобы проверить, работает ли ваша маршрутизация.

1 голос
/ 12 марта 2012

Я заметил, что @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>
1 голос
/ 22 февраля 2012

В нашем случае у нас была проблема с атрибутом optimizeCompilations в web.config (http://msdn.microsoft.com/en-us/library/ms366723.aspx).. Удаление optimizeCompilations из web.config решило проблему.

1 голос
/ 27 декабря 2011

Выше приведен ответ на этот вопрос, но я хочу указать, если у вас уже есть перезапись URL для общих правил, что я и сделал, и я был озадачен моей проблемой 404, которая не была решена этим, я добавил следующее правило перезаписи моего жадного соответствия, которое вызывало 404 для перезаписи URL.

<rule name="signalR" stopProcessing="true">
    <match url="^signalr.*" />
    <action type="None" />
</rule>
<!-- greedier rules below -->

Это только в случае, если у кого-то есть подобная проблема.

...