我有一个运行在Asp.net 4.7.2上的Web应用程序。该应用程序包含一些REST端点,这些端点将被查询,然后将工作委托给位于另一台计算机上的Windows服务。
此服务的工作完成时,我想使用SignalR向客户端发送消息以指示工作已完成。因为此服务在另一台计算机上,所以这非常棘手。
我尝试使用Azure SignalR服务作为高于此的抽象级别。我的意图是使用REST功能来调用此Azure服务,让它从集线器(我目前在Web应用程序中已定义和创建)中运行代码,然后向客户端广播消息。
目前,我不确定这是否可行。注释指出,REST规定仅在库的asp.net CORE版本中可用。我已经致电端点并收到了接受的响应,但是没有运气。
那么,我的问题是,如何在我的条件下运行以下体系结构?如果不能,您还有其他建议吗?
机器1:
运行定制代码的Windows服务花费了不可预测的时间
代码完成后,通过azure服务将消息发送到SignalR集线器
机器2:
答案 0 :(得分:0)
实际上,您可以仅使用现有的Webapp来完成此服务。关键是创建一个与Windows Hub链接的Windows服务要调用的端点。
因此,如果我在.Net 4.x中创建一个简单的SingalR集线器:
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端点将是最简单的,但是,如果您需要做的不仅仅是向客户端返回消息,还可以在诸如Service Bus之类的之间添加消息传递服务。