2013-04-23 51 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

就我所知,當您從Web應用程序內調用集線器時,這將僅適用。

爲了從網絡應用程序的外部與集線器進行交互,例如,從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其接受的Hello World字符串的方法,從這裏調用Clients.All.addNewMessageTopage(message)

+0

我有一個錯字在我的side..incorrect集線器名稱「MyHub」。一旦我將其更改爲我的實際集線器名稱,它工作正常。 謝謝。 – Mithrilhall 2013-04-23 14:28:09

+0

是的,我只是從SignalR文件中獲取代碼。 – 2013-04-23 14:31:54

+0

這正是我所期待的,謝謝! :-) – xan 2013-12-28 22:12:48