【发布时间】:2012-08-13 11:08:27
【问题描述】:
我有多个 Windows 服务实例,每个实例都在不同的服务器上运行。当它在表中找到一条记录时,就会启动每个 Windows 服务。 现在预期的功能是 如果其中一个 Windows 服务选择了记录,那么其他 Windows 服务不应该选择相同的记录。 实际功能: 每个 Windows 服务都应该选择不同的记录。
所有实例都在同时拾取相同的记录和处理,这是一个问题。
任何人都可以提出解决上述问题的方法吗?
其他细节: 我已经添加了代码,我们正在检查数据集是否包含记录(我们之前插入的用于处理 Windows 服务的记录),然后我们执行一些业务,并发送邮件。问题是由于有多个 Windows 服务实例,我收到了多封不可取的邮件。
DataSet reportsDs = new DataSet();
int ReportID = 0;
int MastReptID = 0;
try
{
reportsDs = stored procedure to get the dataset in which the record is inserted
if (reportsDs != null && reportsDs.Tables[0].Rows.Count > 0)
{
ServiceName.isProcCompleted = false;
for (int rptcnt = 0; rptcnt < reportsDs.Tables[0].Rows.Count; rptcnt++)
{
//some business functions
//send a mail after finishing the above business process
}
}
}
【问题讨论】:
-
你能贴出“挑选记录”的代码吗?您的问题听起来像是同步问题,但没有代码我们只能猜测。
-
你在说什么类型的记录..?这是文件记录还是数据库表中的记录..?您是否有您正在使用的服务的代码示例..?您需要提供有关您的流程的更多详细信息
-
是数据库表记录。
-
您采用了什么机制来阻止多个节点获取相同的记录?您是否有事务性的“获取并删除”或“获取并标记为正在使用”?
-
我已经放置了一个从新开始的“状态”列,一旦记录正在处理状态更改为“进行中”,但问题是在状态更改为“进行中”之前,另一个Windows 服务实例正在获取记录。
标签: c# web-services windows-services