2013-08-08 2 views
2

У меня есть веб-сайт MVC, сидящий на некоторых довольно массивных бизнес-объектах. Мои MVC-контроллеры вызывают объекты диспетчера, которые выполняют и делегируют работу другим наборам объектов.Call SignalR Hub из Backend Business Layer

В основном код имеет глубокую серверную сторону, а концентратор - как контроллер, поскольку он достаточно близко к клиентской стороне.

Есть ли способ выполнить методы SignalR на основе ссылки на концентратор, переданный этим объектам диспетчера?

ответ

2

Если ваши службы MVC и SignalR работают в одном процессе, вы можете вызвать GlobalHost.ConnectionManager.GetHubContext («MyHub»);

Это они на отдельные процессы, то вам необходимо создать клиент SignalR в приложении MVC

+0

Я думаю, что бизнес-логика фактически выполняется в отдельном AppDomain. Как настроить клиент SignalR в приложении MVC? Спасибо – matthewbaskey

+0

Можете ли вы предоставить образец? –

+0

Пример внутри одного процесса: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-server#callfromsidesideubub Образец клиента C#, когда все работает на разных процессах: http: //www.asp.net/signalr/overview/hubs-api/hubs-api-guide-net-client –

1

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

Если вы просто говорите об общей библиотеке классов в том же веб-приложении, вы должны передать объект-концентратор другому классу, как ответил другой человек: GlobalHost.ConnectionManager.GetHubContext («MyHub»);