2013-07-25 5 views
4

Перед v2:Как использовать signalr v2 бета в ASP.NET MVC 4

RouteTable.Routes.MapHubs(); 

В v2, MapHubs больше не существует. Вики говорят, чтобы добавить класс запуска и метод настройки и вызов app.MapHubs().

namespace MyAssembly 
{ 
public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     //Before v2 
     //RouteTable.Routes.MapHubs(); 

     app.MapHubs(); 
    } 
} 
} 

Но метод никогда не вызывается, ошибок не возникает, и ... нет концентратора.

Я предполагаю, что есть какой-то код, чтобы добавить к Global.asax.cs

В чем секрет?

+0

ли вы добавить что-нибудь в web.config? – davidfowl

+0

нет, ничего в web.config – Softlion

+1

Теперь они изменили его на app.MapSignalR(); –

ответ

1

EDIT: удаленные строки не имеют отношения к делу.

Решение!

<appSettings> 
    <add key="owin:AppStartup" value="MyNameSpace.Startup, MyNameSpace" /> 
</appSettings> 

плюс обновить и MVC4 (не пререлиз, но последняя стабильная версия) и SignalR/Owin nugets.

плюс исправить ошибки в JS клиента:

  • если DisconnectTimeout = 999000, то она отключена. Должен быть установлен на стороне сервера с помощью: GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds (999); примечание: сторона сервера не может установить значение < 6 (signalr генерирует исключение, если DisconnectTimeout < 6). Поэтому используйте это магическое число.
  • WebSockets: установить connection.socket = нуль в sockettransport, в противном случае вызов начать терпит неудачу после (ручной) называют, чтобы остановить
  • serverSentEvents: предотвратить ошибку, вызванную попыткой повторного соединения, когда окно выгрузки
  • хром не может с исключением, если URL-адрес signalr hub не доступен (временно): вместо отказа от использования следующего доступного протокола/попытайтесь снова подключиться.
+0

Это работает, т.е. вызывается код запуска, но объединительная плата sql исключает исключение, и никакое действие mvc не может быть достигнуто. Может быть использован пакет MVC5 prerelase. – Softlion

+0

Вам не нужен ни один из этих настроек, которые вы добавили. Все, что вы сделали, было повторно объявлено, что все значения по умолчанию. – davidfowl

+0

может быть, но он ничего не делает без. – Softlion

1

Попробуйте определить [сборка: OwinStartup (typeof (MyAssembly.Startup))], чтобы узнать, выбран ли ваш класс запуска.

+1

OwinStartup не существует в бета2. – davidfowl

+1

Попробуйте добавить appSetting owin: AppStartup со значением = полное имя вашего класса запуска. Например, «MyAssembly.Startup, MyAssembly» – Praburaj

+0

уже пробовал, ничего не делает. Похоже, что signalr v2 нацелен только на VS2013/MVC5! – Softlion

0

Я был в состоянии получить бета рабочего 2.0,

  • Удаления всех ссылок на старую версию SignalR, т.е. NuGet деинсталляции библиотеки и двойной проверки/бен

  • установлена SignalR 2.0.0-beta2 через консоль диспетчера пакетов Install-Package Microsoft.AspNet.SignalR -Pre

  • В соответствии с инструкциями перехода от 1.x до 2.0 here

  • И самое важное изменение конфигурации проекта для использования локального веб-сервера IIS вместо Visual Studio Developer Server (Cassini).

Более подробную информацию в вопрос/ответ я отправил here

+0

Cassini давно сменил IIS Express. Веб-сервер не должен быть проблемой здесь, поскольку SignalR работает нормально с любой версией, даже если веб-сайты активируются только на IIS 8. – Softlion

+0

@Softlion Я использую VS2012 и переключение с сервера dev на локальный IIS фиксировало ошибку, которую я получал, было 'System.PlatformNotSupportedException: эта операция требует интегрированного режима конвейера IIS.' – Jerry

+0

Конечно, но у меня нет этой ошибки. Через несколько дней я перепроверку. – Softlion

0

В сети.config должно быть полное имя класса, например.

<appSettings> 
    <add key="owin:AppStartup" value="**My.Name.Space.Startup**, **AssemblyName**" /> 
</appSettings> 

У меня была проблема, когда я ставлю имен вместо имени сборки, но с полным именем он работает без каких-либо других изменений в web.config!

UPDATE: Я также следуют шаги по ссылке: http://www.asp.net/vnext/overview/latest/release-notes#TOC13, т.е. удален пакет NuGet «Microsoft.AspNet.SignalR.Owin»

+0

Я повторю попытку в 100 раз, но я не новичок. Это не сработало. Хорошо, что это работало только для того, чтобы получить ошибки http 500 без каких-либо трассировок/журналов, которые причудливы. – Softlion

+0

@Softlion, почему бы вам не попробовать простой пример чата из документации в вашей существующей сборке? если это будет работать, вы можете исключить проблему с именем сборки и сосредоточиться на других вещах. http://www.asp.net/signalr/overview/troubleshooting-and-debugging/troubleshooting. –

+0

@Softlion Вы удалили пакет NuGet «Microsoft. AspNet.SignalR.Owin "также? http://www.asp.net/vnext/overview/latest/release-notes#TOC13 –

Смежные вопросы