2010-07-26 34 views
0

我们正在使用asp.net 3.5 &作为数据库的Web应用程序构建,这个数据库非常庞大,大约有300个超级用户用于管理大约5000名员工。 现在我们正在将SMS功能应用到应用程序中,这意味着用户将能够发送和接收SMS。每隔两分钟,第三方的SMS服务器就会检查是否有新消息。此外,SMS也会保持在队列中,并且每隔15到30分钟发送一次。哪一个使用windows服务或线程

即使用户关闭浏览器窗口,我也希望此检查和发送过程始终在应用程序的后台运行。 我需要一些建议,我该如何做到这一点?

将使用线程将实现这个或我需要为它创建一个Windows服务还是有任何其他选项?


的更多信息:

我想在定时器来执行任务,如果我关闭浏览器窗口会发生什么,不会要完成的任务是不是这样。

例如,我在5分钟的时间间隔内将10条记录保存到数据库,这意味着每发生5分钟计时器滴答事件触发时,都会向数据库中插入一条记录。

如何关闭浏览器窗口,我该如何运行此任务?

我试着看看Windows服务,但我如何传递一个通用的数据集合给它进行处理。

+0

您是否期望计时器在服务器或浏览器上运行?如果它在服务器上运行,那么关闭浏览器窗口不需要影响服务器上正在发生的事情。 – djna 2010-07-28 05:50:19

回答

0

区分浏览器正在做什么和服务器端发生了什么。

您的Web应用程序正在服务器端等待来自任何浏览器可能正在运行的请求,并为这些请求提供服务,以便处理这些请求我想它可能会将消息放入队列中并查看数据库中的任何新消息。

您希望与第三方SMS通话的守护进程处理器由时间触发,而不是由浏览器功能触发。你的任何建议都可以工作:

  • 一个竞争独立的服务可以运行并对队列和数据库起作用。
  • 你的web应用程序,我假设已经是一个服务,可以生成一个线程

在这两种情况下,我们避免了浏览器的请求处理和后台程序之间的任何竞争条件的几个技术问题 - 但数据库和排队系统可以处理这个问题。

  1. 哪个更容易实现:

    所以我会独立的守护和后台线程这样的决定之间?我是一名Java EE开发人员,我知道在我的应用程序服务器中,我有一个API用于指定要根据计时器运行的代码,API处理线程问题。所以对我来说这很简单。我不知道你有什么可用的。定时器并不像它们可能出现的那么微不足道 - 因此拥有可靠的API是有益的。如果这是一个更为复杂的要求,守护程序代码粗糙且可能会干扰Web应用程序代码,那么我可能更愿意将其明显分开。

  2. 哪个更容易部署和管理?部署单独的Web App和守护进程,或部署一件事。在Java EE世界中,我们可以拥有包含所有代码的单个企业应用程序,因此这是部署,启动和控制的一件事情。

要考虑的另一件事:缩放和弹性。您可能选择运行多个网络应用程序副本,以提供故障转移功能或仅仅因为您需要额外的功能。在这种情况下,你会有多少守护进程?有两个守护进程运行会有问题吗?您可能需要一些额外的代码来在两个守护进程之间进行调解,例如在上次工作时登录数据库,每个守护进程可以说“哦,我的伙伴已经做好了10:30的工作,我会回去睡觉”

+0

感谢您的回复,我想让我的问题更清楚。 我想在一个计时器中执行一个任务,如果我关闭浏览器窗口会发生什么,这个任务将不会完成。 例如,我在5分钟的时间间隔内将10条记录保存到数据库,这意味着每发生5分钟计时器滴答事件触发时,就会向数据库中插入一条记录。 如何关闭浏览器窗口,我该如何运行此任务。 我试着看着Windows服务,但我如何传递一个通用的数据集合给它进行处理。 请给我一些关于如何做到这一点的见解。 – Vinay 2010-07-28 04:24:34

0

真的没有线程或服务选择,服务可以(通常是!)多线程,线程可以启动服务。

有可在三种基本的选择: -

不知何故启动另一个线程运行时,在用户登录 - 这可能是你想要的东西非常糟糕的选择,因为你不能真正保持它运行一次用户会话丢失。

编写一个完全成熟的Windows服务,它在OS启动时启动,并继续运行unitl服务器关闭。您可以依赖于SQLserver服务,因此它在数据库可用后启动。这是“最好”的解决方案,但可能是为了你的目的矫枉过正。此外,您需要知道服务API以正确编写它,因为您需要正确响应关闭和状态请求。

您可以使用Windows schedular或最好是内置到SQLServer的schedular来定期安排您的任务,我认为这将是最适合您需求的选项。