C# 在ASP.NET MVC 5.2中使用SignalR在长时间运行的操作完成时发送消息

C# 在ASP.NET MVC 5.2中使用SignalR在长时间运行的操作完成时发送消息,c#,asp.net,asp.net-mvc,signalr,C#,Asp.net,Asp.net Mvc,Signalr,我想在ASP.NET MVC 5.2中使用SignalR,因为我认为它是满足我需求的正确选择: 用户可以从web门户启动长时间运行的操作(由唯一ID标识)。操作完成后,我想更新web门户上的状态(在本例中使用SignalR) 长时间运行的作业本身不是由ASP.NET MVC代码执行的。它在一个完全不同的系统中,但是,在操作结束时,我可以做任何我想做的事情(调用URL、更新DB等等) 我想到了两种解决方案: 在操作完成时将状态写入数据库。监视ASP.NET MVC代码中的数据库,并在检测到数据库中

我想在ASP.NET MVC 5.2中使用SignalR,因为我认为它是满足我需求的正确选择:

用户可以从web门户启动长时间运行的操作(由唯一ID标识)。操作完成后,我想更新web门户上的状态(在本例中使用SignalR)

长时间运行的作业本身不是由ASP.NET MVC代码执行的。它在一个完全不同的系统中,但是,在操作结束时,我可以做任何我想做的事情(调用URL、更新DB等等)

我想到了两种解决方案:

在操作完成时将状态写入数据库。监视ASP.NET MVC代码中的数据库,并在检测到数据库中的正确状态时发送信号器消息

我认为这不是一个好的解决方案,因为我不认为直接在web门户中创建那种“监视后台线程”是最佳做法,IIS可以在没有web请求的情况下停止池,等等

在长时间运行的操作结束时调用特定URL

当客户端从web页面启动操作时,我将其添加到一个以唯一操作ID命名的文件中

我在ASP.NET MVC项目上创建一个特定的
操作
,并在操作完成时调用相应的URL(从外部系统),同时提供操作的唯一ID以查找正确的组。因此,我可以使用如下方式将消息发送给想要的客户端:

var hub = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hub.Clients.Group(groupName).signalOperationCompleted();
var hub=GlobalHost.ConnectionManager.GetHubContext();
hub.Clients.Group(groupName).signalOperationCompleted();
在这种情况下,我需要适当地保护此操作,以防止客户端发送虚假的完成消息


您对这些解决方案有何看法?还有其他推荐的吗?

用户是否必须通过转到特定的“结果URL”亲自检查状态或者他是否有一个仪表板实时告诉他这个状态?你/你的团队是否有可能创建一个微服务,负责将通知推送到你的mvc应用程序?@RobertHarvey我不希望用户浏览/刷新页面,状态应该是真实的-time@Kiril1512我不太明白,与操作相比,微服务的好处是什么?对于应用程序的任何其他需要,您可以使用signer通知您需要的其他事件和其他场景。这只是一个建议,不是对您问题的回答。用户是否必须通过转到特定的“结果URL”亲自检查状态或者他是否有一个仪表板实时告诉他这个状态?你/你的团队是否有可能创建一个微服务,负责将通知推送到你的mvc应用程序?@RobertHarvey我不希望用户浏览/刷新页面,状态应该是真实的-time@Kiril1512我不太明白,与操作相比,微服务的好处是什么?对于应用程序的任何其他需要,您可以使用signer通知您需要的其他事件和其他场景。这只是一个建议,不是对你问题的回答。