2014-02-06 122 views
12

我已經知道從這裏問我可以有一個普通的舊Windows服務SignalR。我想作爲SignalR客戶端和ASP.NET MVC SignalR Server之間的Windows服務進行通信。我用this hubs guide,它說MVR SignalR服務器和Windows服務SIgnalR客戶端之間的SignalR

指定URL

app.MapSignalR("/signalr", new HubConfiguration()); 

服務器代碼,如果我這樣做,在那裏將消息去了?當您執行新的HubConfiguration時,什麼是集線器?

它說我可以在我的Windows Server與

NET client code that specifies the URL 
var hubConnection = new HubConnection("http://contoso.com/signalr", useDefaultUrl: false); 

我有連接,但如果我在服務器上的文本發送到http://myserver.com/signalr,我怎麼得到它?什麼樞紐?

此外,最好把這個在​​Windows服務?一個例子會很棒!

回答

12

這解決了問題

在客戶端(Windows服務):

protected override async void OnStart(string[] args) 
     { 
      eventLog1.WriteEntry("In OnStart"); 
      try 
      { 
       var hubConnection = new HubConnection("http://www.savitassa.com/signalr", useDefaultUrl: false); 
       IHubProxy alphaProxy = hubConnection.CreateHubProxy("AlphaHub"); 

       await hubConnection.Start(); 

       await alphaProxy.Invoke("Hello", "Message from Service"); 
      } 
      catch (Exception ex) 
      { 
       eventLog1.WriteEntry(ex.Message); 
      } 
     } 

在服務器上:

public class AlphaHub : Hub 
    { 
     public void Hello(string message) 
     { 
      // We got the string from the Windows Service 
      // using SignalR. Now need to send to the clients 
      Clients.All.addNewMessageToPage(message); 

      // Send message to Windows Service 

     } 
+0

嗨,我需要實施SignalR到我的Windows服務,所以我可以更新客戶端長時間運行的任務。我需要從NuGet安裝哪些軟件包? Microsoft ASP.NET SignalR是自主主機嗎?非常感謝 – VAAA

+1

@VAAA,您所需要的只是Microsoft Windows服務盒上的Microsoft.AspNet.SignalR.Client。 很好的答案! – jhilden

1

我以爲我不正是你想要的瞭解。

  • 選項A:

**信號R.服務器:託管作爲Windows服務

**信號R.客戶:ASP.NET MVC應用程序。

  • 選項B

**信號R.服務器:ASP.NET MVC應用程序。

**信號R.客戶端:Windows服務

如果你需要的是選項A.你可能想看看「Signal R Self-Host Tutorial」 如果你需要的是選項B.你需要創建一個Windows服務中的.Net Signal R客戶端。請看看如何做到這一點this tutorial

不管你的主機類型的每個輪轂有你需要建立連接時使用唯一的名稱。

關於:

我會在我的Windows Server,但如果我發短信給 http://myserver.com/signalr在服務器上,我怎麼得到它?什麼樞紐?

信號R是實時雙通道通信的抽象,所以它真的取決於您的集線器的設置。

關於:

而且其中最好把這個在​​Windows服務?一個例子是 是偉大的!

我會說,去簡單,並開始聲明Singleton開始。

希望它有幫助。

2

可以說你有以下代碼。

 var _connection = new HubConnection("http://localhost:61194/signalr"); 
     var _myHub = _connection.CreateHubProxy("MyHub"); 

您可以創建儘可能多的代理服務器。 然後您可以通過以下方式調用服務器方法。

  _myHub.On<string>("recieved", data => 
      { 
       System.Diagnostics.Debug.WriteLine("DATA : " + data); 
      }); 
      _connection.Start().Wait(); 
      _myHub.Invoke("Hello").Wait(); 

您可以在從計時器獲取或在被炒魷魚按照時間表的方法調用Windows服務的方法調用把這些代碼。

相關問題