我在angular.js,WebAPI和mongodb上运行了一个应用程序。我的目标是用signalr替换客户端轮询。由于mongodb不会在更改时触发事件,我仍然需要在服务器端进行轮询,如果我检测到更改,则使用信号器集线器进行广播。
有没有一种可行的方法可以做到这一点,而不会破坏IIS的重复性任务?
我尝试了什么:
答案 0 :(得分:2)
答案一如既往:“这取决于”。
HostingEnvironment.QueueBackgroundWorkItem。 .NET 4.5.2中的最新版本。不保证执行,请参阅post末尾的限制:
WebBackgrounder。来自Scott Hanselman的引用blog:“它的代码多年没有被触及,但WebBackgrounder NuGet软件包已下载了近50万次”。
迟发型。流行的开源项目,添加mongodb支持始终是一个受欢迎的PR:)
使用RavenDb而不是MongoDb。他们的Changes API非常酷。
第一个和第二个选项不保证作业执行,第三个和第四个选项依赖于数据存储。
答案 1 :(得分:0)
QueueBackgroundWorkItem是您考虑我们上面讨论过的最佳选择,但它不是100%防弹。应用程序池仍将循环使用。您可以创建一个Windows服务,通知Web应用程序轮询数据库。
无论如何,一旦你获得了信号(通过轮询或什么不是),你可以从那时开始使用事件驱动设计。好处是解耦域和可伸缩性。我已经为此创建了这个框架。
https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki