SignalR Между MVC SignalR Server и Windows Service SIgnalR Client

Я уже знаю, спрашивая здесь, что я могу иметь SignalR в простой старой службе Windows. Я хочу общаться между этой службой Windows как SignalR Client и ASP.NET MVC SignalR Server. Я использовал этот справочник хабов, он сказал

Код сервера, который указывает 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 Server, но если я отправлю текст на http://myserver.com/signalr на сервере, как мне его получить? Какой хаб?

И где лучше всего разместить это в службе Windows? Пример будет замечательным!

Ответ 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

        }

Ответ 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, который вызывается из таймера или в методе, который запускается по расписанию.

Ответ 4

Я думаю, что я не понимаю, что именно вы хотите.

  • Вариант A:

** Сигнал R. Сервер: размещен как служба Windows

** Сигнал R. Клиент: приложение ASP.NET MVC.

  • Вариант B

** Сигнал R. Сервер: приложение ASP.NET MVC.

** Сигнал R. Клиент: служба Windows

Если вам нужен вариант A. Возможно, вы захотите взглянуть на "" Руководство по самообучению Signal R". Если вам нужен вариант B. Вам необходимо создать клиент .Net Signal R в службе Windows. Пожалуйста, ознакомьтесь с этим руководством о том, как это сделать.

Независимо от типа вашего хостинга каждый хаб имеет уникальное имя, которое необходимо использовать при установлении соединения.

Относительно:

У меня это будет на моем Windows Server, но если я отправлю текст в http://myserver.com/signalr на сервере, как мне его получить? Какой хаб?

Сигнал R является абстракцией двухканальной связи в реальном времени, поэтому это действительно зависит от настройки вашего концентратора.

Относительно:

И где лучше всего разместить это в службе Windows? Примером может служить будь здорово!

Я бы сказал, пройдите и начните с объявления Singleton, чтобы начать.

Надеюсь, что это поможет.