C# 分布式系统上的Asp.net Azure信号器服务

C# 分布式系统上的Asp.net Azure信号器服务,c#,asp.net,azure,signalr,signalr-backplane,C#,Asp.net,Azure,Signalr,Signalr Backplane,我有一个在Asp.net 4.7.2上运行的web应用程序。此应用程序包含几个REST端点,这些端点被查询,然后将工作委托给位于另一台计算机上的windows服务 当这个服务的工作完成时,我想使用signar向客户机发送一条消息,表明工作已经完成。因为这项服务是在另一台机器上进行的,所以这是相当棘手的 我曾尝试使用Azure Signal服务作为高于此级别的抽象级别。我的意图是使用REST功能调用这个Azure服务,让它从一个中心运行代码(我目前在web应用程序中定义并创建了该中心),然后向客户

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

当这个服务的工作完成时,我想使用signar向客户机发送一条消息,表明工作已经完成。因为这项服务是在另一台机器上进行的,所以这是相当棘手的

我曾尝试使用Azure Signal服务作为高于此级别的抽象级别。我的意图是使用REST功能调用这个Azure服务,让它从一个中心运行代码(我目前在web应用程序中定义并创建了该中心),然后向客户端广播一条消息

目前,我不确定这是否可行。注释指出,REST规定仅在库的asp.net核心版本中可用。我已经打电话给端点,并收到了一个已接受的响应,但运气不佳

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

机器1:

  • 运行定制代码的Windows服务需要不可预测的时间长度

  • 代码完成后,通过azure服务将消息发送到信号器中心

机器2:

  • 包含信号集线器定义和客户端逻辑的Webapp

实际上,您可以不用使用现有的Web应用程序就可以实现这一点。关键是创建一个端点,您的Windows服务将调用该端点,该端点链接到您的中心

因此,如果我在.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);
    }
}
公共类通知控制器:ApiController
{
语境;
公共通知控制器()
{
context=GlobalHost.ConnectionManager.GetHubContext();
}
公共HttpResponseMessage获取(字符串消息)
{
对象[]args={message};
context.Clients.All.Send(“Send”,args);
返回Request.CreateResponse(HttpStatusCode.OK);
}
}

在MVC和WebApi等框架中,使用REST端点将是最简单的,但如果您需要做的不仅仅是向客户端返回消息,还可以在两者之间添加消息传递服务(如service Bus)。

您实际上可以不使用现有的webapp来实现这一点。关键是创建一个端点,您的Windows服务将调用该端点,该端点链接到您的中心

因此,如果我在.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);
    }
}
公共类通知控制器:ApiController
{
语境;
公共通知控制器()
{
context=GlobalHost.ConnectionManager.GetHubContext();
}
公共HttpResponseMessage获取(字符串消息)
{
对象[]args={message};
context.Clients.All.Send(“Send”,args);
返回Request.CreateResponse(HttpStatusCode.OK);
}
}

在MVC和WebApi等框架中,使用REST端点将是最简单的,但如果您需要做的不仅仅是向客户端返回消息,还可以在两者之间添加消息传递服务(如service Bus)。

想要做类似的事情,请尝试了解这将如何工作。。。如果你有两个容器。。。。。运行前端代码,你可能知道。它如何在多个容器之间管理客户端?或者是想做类似事情的实例,试图理解这是如何工作的。。。如果你有两个容器。。。。。运行前端代码,你可能知道。它如何在多个容器之间管理客户端?或正在运行的实例