2013-04-23 1 views
6

У меня есть два проекта в моем решении:SignalR - Вещание через концентратор в другом проекте из-за пределы концентратора

Project 1: "SignalRChat" (MVC) - Works fine
Project 2: "DatabaseWatcherService" Windows Service - Works fine

Я пытаюсь сделать вызов в мое SignalRChat хаб из моей службы Windows, и это похоже, не работает.

Это где я называю хаб из моего окна службы (https://github.com/SignalR/SignalR/wiki/Hubs#broadcasting-over-a-hub-from-outside-of-a-hub):

void PerformTimerOperation(object sender, EventArgs e) 
    { 
     eventLog1.WriteEntry("Timer ticked..."); 

     var message = "test"; 

     var context = GlobalHost.ConnectionManager.GetHubContext<SignalRChat.ChatHub>(); 
     context.Clients.All.addNewMessageToPage(message); 
    } 

я получаю следующее сообщение об ошибке при попытке подключения:

Message=The remote server returned an error: (500) Internal Server Error.

Я пытаюсь подключиться через var connection = new HubConnection("http://localhost:2129");

Порт 2129 - это то, над чем работает мой проект MVC.

ответ

15

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

Для взаимодействия с концентратором снаружи веб-приложения, например. от службы Windows, вам нужно будет посмотреть на SignalR Client Hubs documentation

  1. Добавьте следующий пакет NuGet к вашему проекту: Microsoft.AspNet.SignalR.Client

  2. Добавьте следующее заявление в верхней части страницы: using Microsoft.AspNet.SignalR.Client;

  3. Вам нужно будет создать соединение с концентратором, а затем начать соединение.


var connection = new HubConnection("http://mysite/"); 
IHubProxy myHub = connection.CreateHubProxy("MyHub"); 

connection.Start().Wait(); // not sure if you need this if you are simply posting to the hub 

myHub.Invoke("addNewMessageToPage", "Hello World"); 

В хаба вы тогда должны были бы иметь метод AddNewMessageToPage, который принимает строку привет мир и здесь называют Clients.All.addNewMessageTopage(message)

+0

Я была опечатка на моем side..incorrect Имя концентратора "MyHub". Как только я изменил его на свое фактическое имя концентратора, он работал нормально. Спасибо. – Mithrilhall

+0

Да, я просто взял код из документов SignalR. –

+0

Это было именно то, что я искал, спасибо! :-) – xan

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

  • Нет связанных вопросов^_^