2013-02-26 5 views
3

Есть ли у кого SignalR и Sitecore вместе?SignalR и Sitecore

В Sitecore есть проблема с удалением Application_Start в Sitecore и получением его для запуска RouteTable.Routes.MapHubs().

Я дважды проверил, что я сопоставляю свой URL/signalR/hubs по умолчанию на макетах. Блоки сценариев для JQuery, JQuery SignalR и пользовательских JS также включены.

Он полностью отключает все на стороне клиента, за исключением того, что URL/signalr/hubs не отображается.

Я заметил, что для Sitecore для MVC RouteTables требуется специальная обработка, но они напрямую не затрагивают проблему, которая в настоящее время существует.

Спасибо -

+0

Какая версия Sitecore? – techphoria414

+0

Это 6,6 (как предположил Кевин) Обновление 3. – Jeremy

ответ

7

Так после того, как так работать над этим немного. ..

Это была простая вещь, которая делает эту работу.

Вы должны добавить/signalr и/signalr/hubs к пути Ignore для SignalR для работы с Sitecore.

<setting name="IgnoreUrlPrefixes"    value="/sitecore/default.aspx|/trace.axd|.....|/signalr|/signalr/hubs" /> 

После того, как я получил это место, я смог правильно подключить MapHubs в Application_Start. Он не будет постоянно попадать в точку останова до того, как он не сможет предоставить URL-адрес, не пытаясь получить элемент Sitecore. Теперь я вижу, что он постоянно попадает в точку останова.

Спасибо за ответы!

5

Я предполагаю, что вы используете Sitecore 6.6, как вы упомянули Sitecore MVC RouteTables. Попробуйте использовать WebActivator для регистрации ваших отображений хабов в RouteTable. WebActivator дает вам возможность добавить этот код начальной загрузки в PreApplicationStartMethod или PostApplicationStartMethod, чтобы вы могли регистрировать маршруты и избегать использования шаблона группового шаблона Sitecore. Я использовал этот подход для загрузки маршрутов веб-API в Sitecore.

using System; 

[assembly: WebActivator.PreApplicationStartMethod(
    typeof($rootnamespace$.App_Start.MySuperPackage), "PreStart")] 

namespace $rootnamespace$.App_Start { 
    public static class MySuperPackage { 
     public static void PreStart() { 
      // Add your start logic here 
     } 
    } 
} 

Альтернативный подход должен был бы добавить регистрационный код в процессор пользовательского трубопровода и добавить этот процессор в трубопровод инициализации событий в App_Config\Include\Sitecore.Mvc.config

<pipelines> 

    <!-- Loader --> 

    <initialize> 
    <processor type="Sitecore.Mvc.Pipelines.Loader.InitializeGlobalFilters, Sitecore.Mvc"/> 
    <processor type="Sitecore.Mvc.Pipelines.Loader.InitializeControllerFactory, Sitecore.Mvc"/> 
    <processor type="Sitecore.Mvc.Pipelines.Loader.InitializeRoutes, Sitecore.Mvc"/> 
    </initialize> 
+0

Кевин - спасибо, это заставило меня исследовать другой подход. – Jeremy

+0

Заинтересованы в том, чтобы узнать, что у вас получилось, поскольку я смотрю на некоторые Sitecore и SignalR. –

+0

Кевин - см. Ниже. Что заставило меня застрять, было то, что когда вы проверяете свой каталог URL/signalR/hubs, Sitecore будет выполнять поведение Item Not Found, и приложение Application_Start получает удар (примерно в половине случаев). Так что, чтобы быть понятным, вам не нужно включать MVC и не выполнять обработку перед процессором, чтобы получить его в MapHubs в вашем Sitecore.Web.Application (мы используем это как замену для Globalasax.cs для Global .asax как лучшая практика). Вам нужно только добавить путь в IgnoreUrlPrefixes. – Jeremy