Asp.net 分布式系统上的 Azure SignalR 服务

Asp.net Azure SignalR service on a distributed system

我在 Asp.net 4.7.2 上有一个网络应用 运行ning。此应用程序包含一些查询的 REST 端点,然后将工作委托给位于另一台计算机上的 windows 服务。

当此服务的工作完成后,我想使用 SignalR 向客户端发送消息以指示工作已完成。因为这个服务在另一台机器上,所以这被证明是相当棘手的。

我尝试使用 Azure SignalR 服务作为高于此的抽象级别。我的意图是使用 REST 功能调用此 Azure 服务,从集线器(我目前已在网络应用程序中定义和创建)中获取 运行 代码,然后向客户端广播消息。

目前,我不确定这是否可行。注释说 REST 条款仅在库的 asp.net CORE 版本中可用。我已调用端点并收到接受的响应,但运气不好。

那么我的问题是,如何让以下架构在我的条件下工作?如果我不能,你还有什么建议?

机器 1:

机器 2:

您实际上可以在没有服务的情况下仅使用现有的 webapp 来完成此操作。关键是创建一个端点,您的 Windows 服务可以调用该端点链接到您的集线器。

因此,如果我在 .Net 中创建一个简单的 SingalR 集线器 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);
    }
}

在 MVC 和 WebApi 等框架中使用 REST 端点将是最简单的,但如果您需要做的不仅仅是 return 一条消息,则可以在两者之间添加消息服务,如服务总线给客户。