【问题标题】:SignalR Between MVC SignalR Server and Windows Service SIgnalR ClientMVC SignalR 服务器和 Windows 服务 SignalR 客户端之间的 SignalR
【发布时间】:2014-02-06 20:56:47
【问题描述】:

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

指定 URL 的服务器代码

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

如果我这样做,消息会去哪里?新建 HubConfiguration 时的 hub 是什么?

它说我可以连接

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

我将在我的 Windows Server 中拥有它,但如果我将文本发送到服务器上的 http://myserver.com/signalr,我该如何获取它?什么枢纽?

此外,最好将它放在 Windows 服务中的哪个位置?举个例子就好了!

【问题讨论】:

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


    【解决方案1】:

    这样就解决了问题

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

    【讨论】:

    • 您好,我需要在我的 Windows 服务中实现 SignalR,以便更新客户端以执行长时间运行的任务。我必须从 NuGet 安装什么包? Microsoft ASP.NET SignalR 是自托管吗?非常感谢
    • @VAAA,您所需要的只是 Windows 服务盒上的 Microsoft.AspNet.SignalR.Client。很好的答案!
    【解决方案2】:

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

    • 选项 A:

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

    ** Signal R. 客户端:ASP.NET MVC 应用程序。

    • 选项 B

    ** Signal R. 服务器:ASP.NET MVC 应用程序。

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

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

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

    关于:

    我会在我的 Windows Server 中使用它,但如果我将文本发送到 服务器上的http://myserver.com/signalr,怎么弄?什么枢纽?

    信号 R 是实时双通道通信的抽象,因此它实际上取决于您的集线器的设置。

    关于:

    此外,最好将它放在 Windows 服务中的哪个位置?一个例子是 棒棒哒!

    我想说,简单一点,先声明一个Singleton 开始。

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      假设您有以下代码。

              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 服务方法调用中,或者放入按计划触发的方法中。

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 那是 JavaScript 而不是 Windows 服务。我知道如何使用网络浏览器来做到这一点。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-09
        • 1970-01-01
        • 2022-11-03
        相关资源
        最近更新 更多