我有一个ASP.Net MVC应用程序,它需要从Windows服务查询某些状态信息,然后使用新的状态信息更新客户端。
如何在ASP.Net中最好地实现定期查询?我可能会使用像SignalR这样的东西来更新客户端的状态信息。
但我需要一个解决方案是轮询Windows服务。
此ASP.Net MVC应用程序使用C#。
答案 0 :(得分:1)
您可以在Windows服务中托管WCF服务,并从ASP.NET MVC应用程序连接到它。 How to: Host a WCF Service in a Managed Windows Service
如果已写入服务,则可以使用CacheItemRemovedCallback:easy-background-tasks-in-aspnet。
希望有所帮助。
答案 1 :(得分:0)
如果不轮询MVC应用程序的服务,我不知道有什么方法可以做到这一点。当服务状态发生更改时,您可以使用SignalR联系Web应用程序中状态更改的客户端。
答案 2 :(得分:0)
我现在可以很快想到3种解决方案。
使用简单的文本文件存储状态信息。使用Windows服务编写它,并从ASP.NET应用程序中读取它。 PRO:非常原始且易于实现,并且开销最小。 CON:如果状态查询变得更复杂,实现可能会变得更加复杂。
使用共享数据库将这些信息存储在特定的表中。 PRO:可以从任何地方查询更多独立于平台的解决方案;更容易维护或扩展。 CON:开销更大。
实施一个非常简单的WCF服务,在Windows服务中托管它,并从任何地方查询状态信息。查看更多信息here。 PRO:将来易于维护或扩展。 CON:更难实现,特别是如果您没有任何WCF经验;只有简单的州信息才有点大枪。
在客户端,最好和最简单的方法是恕我直言,定期微小的AJAX请求从您的Web应用程序轮询状态信息,并将其呈现给用户。
更新
如果要在后台定期从ASP.NET MVC应用程序轮询服务,请检查WebBackgrounder项目。但是,除非你真的需要,否则我认为这不是一个好习惯。
更好的方法是在需要时提供此信息,当某个控制器的某些操作中有请求时。如果请求过于频繁,您也可以对其应用ASP.NET缓存。然后在客户端,您可以通过AJAX执行定期请求。
UPDATE2
如果您不喜欢定期的AJAX请求,可以查看AJAX推送技术,例如here。我虽然没有任何经验,也无法给你更多积分。我仍然相信频繁的轮询可能会令人满意,因为我猜这些数据传输确实很小。