2014-03-25 80 views
0

我有一个ASP.Net MVC应用程序,需要从Windows服务查询某些状态信息,然后用新的状态信息更新客户端。从Windows服务定期查询状态

如何在ASP.Net中最好地实现定期查询?我可能会使用SignalR之类的东西来更新客户端的状态信息。

但我需要的解决方案是对Windows服务的轮询。

这个ASP.Net MVC应用程序使用C#。

+0

我们在谈论什么类型的状态信息?也许可以使用性能计数器公开的东西? – sisve

+0

我不确定这些信息是否可以通过性能计数器公开。但我试图解决的实际问题是从ASP.Net应用程序中定期查询此信息的正确方法。 – Saibal

+0

你能否定期从windows服务向ASP.NET应用发布该状态? –

回答

0

我不知道有什么办法可以做到这一点,而无需轮询服务您的MVC应用程序。当服务状态发生变化时,您可以使用SignalR来联系您的Web应用程序的状态发生变化的客户端。

1

您可以在Windows服务中托管WCF服务并从ASP.NET MVC应用程序连接到它。 How to: Host a WCF Service in a Managed Windows Service

如果服务已写入,则可以使用CacheItemRemovedCallback:easy-background-tasks-in-aspnet

希望它有帮助。

+0

该服务已经写入并运行。服务中的状态信息会周期性变化。我想了解的是如何在ASP.Net MVC中正确实现后台任务,该任务将定期查询服务的状态信息 – Saibal

+0

@Saibal,或许本文可以帮助你:[easy-background-tasks-in-aspnet]( http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/) –

0

我现在可以很快思考3种解决方案。

  1. 使用一个简单的文本文件来存储状态信息。用Windows Service编写它,并从ASP.NET应用程序中读取它。 PRO:非常原始且实施简单,并且具有最小的开销。 CON:如果状态查询变得更复杂,那么实现可能会变得更加复杂。

  2. 使用共享数据库将这些信息存储在特定的表中。 PRO:更独立于平台的解决方案,可随时随地查询;更容易维护或扩展。 CON:更大的开销。

  3. 实现一个非常简单的WCF服务,将其托管在Windows服务中,并从任何地方查询状态信息。查看更多信息here。 PRO:易于维护或未来扩展。 CON:难以实施,特别是如果您没有任何WCF经验;对于简单的状态信息来说这是一个太大的枪支。

在客户端最好的,最简单的办法是恕我直言周期性微小的AJAX请求来轮询从Web应用程序的状态信息,并将其呈现给用户。

UPDATE

如果您想查询从ASP.NET MVC应用程序的服务在后台周期性地检查WebBackgrounder项目。但是,除非您真的需要某些特殊需求,否则我不认为这是一种好的做法。

更好的方法是在需要的时候提供这些信息,当某个控制器的某些操作发出请求时。如果请求太频繁,您也可以将ASP.NET缓存应用于它。然后在客户端,您可以通过AJAX进行定期请求。

UPDATE2

如果你不喜欢周期性AJAX请求,你可以检查出AJAX推工艺,例如here。我虽然没有任何经验,并且不能给你更多的观点。我仍然认为经常进行民意调查可能会令人满意,因为这些数据传输我认为是非常小的。

+0

该服务已经写好,可以正常工作。服务中的状态信息会周期性变化。我想了解的是如何在ASP.Net MVC中正确实现后台任务,它将周期性地查询服务的状态信息 – Saibal

+0

啊我看到了。为什么你需要定期查询状态?在用户请求出现时查询它没有意义吗?无论如何,我会相应地更新我的答案。 –

+0

谢谢... AJAX查询是我现在正在做的事情。问题是状态信息可能在不同的时间发生变化。我想知道只有当状态信息发生变化时才能通知客户端。 – Saibal