gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:11:01 25 4
gpt4 key购买 nike

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

当该服务的工作完成后,我想使用 SignalR 向客户端发送消息以表明工作已完成。由于该服务位于另一台计算机上,因此事实证明这非常棘手。

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

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

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

机器1:

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

  • 代码完成后,通过 Azure 服务向 SignalR 中心发送消息

机器2:

  • 包含 SignalR 中心定义和客户端逻辑的 Web 应用。

最佳答案

您实际上可以仅使用现有的 Web 应用程序来完成此任务,而无需使用该服务。关键是创建一个链接到您的集线器的端点,供您的 Windows 服务调用。

因此,如果我在 .Net 4.x 中创建一个简单的 SingalR 集线器:

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

我可以在 WebApi Controller 中访问它:

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 端点将是最简单的,但如果您需要做的不仅仅是向客户端返回消息,则可以在两者之间添加消息服务(例如服务总线)。

关于c# - 分布式系统上的 Asp.net Azure SignalR 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56676982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com