MVC SignalR服务器和Windows服务SIgnalR客户端之间的SignalR

时间:2014-02-06 20:56:48

标签: asp.net-mvc windows-services signalr

我在这里问我已经知道我可以在一个普通的旧Windows服务中使用SignalR。我想在Windows服务之间作为SignalR客户端和ASP.NET MVC SignalR服务器进行通信。我用了this hubs guide,它说

指定网址的服务器代码

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

如果我这样做,消息会在哪里发生?进行新的HubConfiguration时,什么是集线器?

它说我可以连接

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

我会在我的Windows Server中使用它但如果我将文本发送到服务器上的http://myserver.com/signalr,我该如何获取它?什么集线器?

最好将这个放在Windows服务中?一个例子就是很棒!

4 个答案:

答案 0 :(得分:14)

这解决了问题

在客户端(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

        }

答案 1 :(得分:2)

我想我不明白你想要什么。

  • 选项A:

** Signal R. Server:作为Windows服务托管

** Signal R. Client:ASP.NET MVC Application。

  • 选项B

** Signal R. Server:ASP.NET MVC Application。

** Signal R.客户端:Windows服务

如果您需要的是选项A.您可能需要查看“Signal R Self-Host Tutorial” 如果您需要的是选项B.您需要在Windows服务中创建.Net Signal R客户端。请查看this tutorial有关如何操作的信息。

无论您的托管类型如何,每个集线器都有一个唯一的名称,您在建立连接时需要使用该名称。

关于:

  

我会在我的Windows Server中使用它但是如果我发送文本   http://myserver.com/signalr在服务器上,我该如何获得它?什么集线器?

Signal R是实时双通道通信的抽象,所以它实际上取决于你的Hub的设置。

关于:

  

最好将这个放在Windows服务中?一个例子就是   太棒了!

我想说,简单一点,然后宣布开始Singleton

希望它有所帮助。

答案 2 :(得分: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服务方法调用中,该调用将从计时器或根据计划触发的方法中调用。

答案 3 :(得分:1)