在MVC SignalR服务器和Windows服务SignalR客户端之间的SignalR通信

18
我已经从这里询问得知,我可以在一个普通的 Windows 服务中使用 SignalR。我希望在该 Windows 服务作为 SignalR 客户端和 ASP.NET MVC SignalR 服务器之间进行通信。我使用了这个 Hubs 指南,它说:

指定 URL 的服务器代码

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

如果我这样做,消息将去哪里?当你使用新的HubConfiguration时,什么是中心?

它说我可以连接到

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

我会将其放在我的Windows服务器中,但如果我将文本发送到服务器上的http://myserver.com/signalr,我该如何获取它?使用哪个hub?

此外,在Windows服务中最好将其放在哪里?一个示例会很棒!

4个回答

21

这解决了问题。

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

        }

你好,我需要将SignalR实现到我的Windows服务中,以便在长时间运行的任务期间更新客户端。我需要从NuGet安装哪个包呢?Microsoft ASP.NET SignalR Self Host是吗?非常感谢。 - VAAA
2
@VAAA,你只需要在你的Windows服务盒子上安装Microsoft.AspNet.SignalR.Client。好答案! - jhilden

2
我想我不太明白你想要什么。
  • 选项A:

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

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

  • 选项B:

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

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

如果你需要的是选项A。你可能想看看 "Signal R自托管教程" 如果你需要的是选项B。你需要在Windows服务中创建一个.Net Signal R客户端。请查看这个教程来了解如何做到这一点。

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

关于:

我会将其翻译成中文:
如果我将文本发送到服务器上的http://myserver.com/signalr,那么如何获取它?使用哪个信道?
Signal R是实时双向通信的抽象,因此它确实取决于您的Hub的设置。
关于:
最好在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服务方法调用中,该方法会在计时器触发或按计划触发的方法中被触发。

0

那是JavaScript,不是Windows服务。我知道如何在Web浏览器中完成它。 - user2471435

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接