【发布时间】:2012-03-22 19:25:58
【问题描述】:
首先,我将讨论一些遗留代码,我们会尽量避免对其进行更改。另外,我在 Windows 服务和 WCF 方面的经验有点有限,所以有些问题可能有点新手。只是为了在问题之前提供一些背景信息。
我们有一个现有的循环服务。它通过数据库调用检查是否有要处理的记录。如果没有找到任何记录,它会休眠 30 秒,然后重新唤醒以重试。
我想向该服务添加一个入口点,除了处理数据库中的记录外,它还允许我向该服务传递一条记录。所以基本流程是。
循环
* 从数据库中读取记录
* 如果数据库中没有记录,则处理通过入口点传入的所有记录。
* 完全没有记录,休眠 30 秒。
我担心的是这个。是否可以在一项服务中实现这一点,以便我有循环过程,但我也允许随时调用,并将其他项目添加到可以在循环中处理的队列中。我关心的是并发性以及防止循环和监听器相互踩踏。
我知道这个问题的措辞可能不太正确,但我正在处理这个问题。任何帮助将不胜感激。
【问题讨论】:
-
什么样的“入口点” - 什么会发出这个入口点的信号,它是如何做到的?如果尽可能少地更改遗留代码很重要,您是否可以不将这个“事件”数据添加到数据库表中?顺便说一句,“事件”数据可以很容易地通过 TCP/管道发送到服务并排队到处理线程,该处理线程通常在队列上等待 30 秒超时。如果是我,我会很想添加一个存储过程/触发器,它会排队一个条目以立即告诉服务记录可用,但我想这已经结束了:(
标签: c# multithreading wcf windows-services