Служба Asp.net Azure SignalR в распределенной системе - PullRequest
0 голосов
/ 20 июня 2019

У меня есть веб-приложение, работающее на Asp.net 4.7.2.Это приложение содержит несколько конечных точек REST, которые запрашиваются, а затем делегируют работу для службы Windows, которая находится на другом компьютере.

Когда работа над этой службой завершена, я хочу использовать SignalR для отправки сообщенияклиенту указывать, что работа выполнена.Поскольку этот сервис находится на другом компьютере, это довольно сложно.

Я пытался использовать службу Azure SignalR в качестве абстрактного уровня выше этого.Мое намерение состояло в том, чтобы использовать возможности REST для вызова этой службы Azure, чтобы она запускала код из концентратора (который я в настоящее время определил и создал в веб-приложении), а затем передавала сообщение клиентам.

ВНа данный момент я не уверен, если это возможно.В примечаниях говорится, что предоставление REST доступно только в версии библиотеки asp.net CORE.Я звонил в конечную точку и получил принятый ответ, но не повезло.

Тогда мой вопрос, как мне заставить работать следующую архитектуру в моих условиях?Если я не могу, какие другие предложения у вас есть?

Машина 1:

  • Служба Windows, выполняющая заказной код, который занимает непредсказуемый промежуток времени

  • После завершения кода отправьте сообщение в концентратор SignalR через службу Azure.

Машина 2:

  • Веб-приложение, содержащее определения концентратора SignalR и клиентлогика.

1 Ответ

0 голосов
/ 20 июня 2019

Вы можете сделать это без службы, используя только ваше существующее веб-приложение. Ключ заключается в создании конечной точки, которую должна вызывать ваша служба Windows, которая связана с вашим концентратором.

Так что, если я создам простой хаб SingalR в .Net 4.x:

public class NotificationHub : Hub
{
    public void Send(string message)
    {
        Clients.All.addNewMessageToPage(name, message);
    }
}

Я могу получить к нему доступ через контроллер WebApi:

public class NotificationController : ApiController
{
    IHubContext context;

    public NotificationController()
    {
        context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
    }

    public HttpResponseMessage Get(string message)
    {
        object[] args = { message };
        context.Clients.All.Send("Send", args) ;

        return Request.CreateResponse(HttpStatusCode.OK);
    }
}

Использование конечной точки REST будет проще всего в таких средах, как MVC и WebApi, но можно добавить службу обмена сообщениями между ними, например, служебную шину, если вам нужно сделать больше, чем просто вернуть сообщение клиентам.

...