资源锁等待客户端 - 服务器解决方案中的用户交互

时间:2011-11-04 08:47:45

标签: c# long-running-processes

我有一个客户端 - 服务器进程,在长时间运行(2-5分钟)服务器端之后,要求用户确认或更改操作结果。

用户可能需要一个小时或更长时间来检查服务所做的工作,进行更改并将其发送回服务。

在完美的世界中,没有人会改变服务使用的源数据来构建运营结果。但这不是一个完美的世界!

如何锁定以防止损坏源数据?我不希望SQL表锁...我正在考虑一个软件机制,如内存表,包含我的所有操作请求和一些互锁条件,以便进入可能损坏其他操作数据的等待状态操作。

还有其他提示吗?

修改

有关此过程的更多信息可能是必要的..

我有一个带时间戳的实体,代表电网拓扑的时间点。 该实体包含所有未激活元素的列表。

调用时服务器进程必须获取尚未处理的所有实体,并为每个元素创建

列表
public class ElementRecord{
public string ElementName {get;set;}
public DateTime OffTimeStamp {get;set;}
public DateTime OnTimeStamp {get;set;}
}

根据一些业务规则,服务器进程聚合元素并等待用户确认或更改。

问题是在加载实体后,真实网络会发生变化,表格会发生变化;同时,在单个时间点,更多元素可以断电,因此服务器进程必须无效。 如果用户UI已经在更改数据,我必须尽快警告可能有些数据无效。

你会做什么?

2 个答案:

答案 0 :(得分:0)

我在过去的一个项目中遇到过类似的要求。 我们的解决方案是:在服务器完成所有操作之后,我们将需要用户确认的所有数据复制到某些临时数据表中,每个行都有时间戳。然后,发送邮件给用户询问确认,确认后,将临时数据表合并到我们的实际数据表中。我们无法锁定任何数据表,因为其他用户需要在线更改表。

答案 1 :(得分:0)

如何向表中添加额外的列以显示数据已经过验证。

然后忽略没有设置了验证字段的数据。在遗留系统中,这意味着创建新表并迁移数据,但之后您只需要确保只有设置了验证字段的结果才会返回到您的代码中。

修改

我的建议是,读取数据的过程只能使用已经过验证的数据。如果您的用户进程正在使用并更改已验证的数据,那么它必须在检索时设置未验证的数据,但如果已将数据标记为未验证,则无法检索该数据。

对于新数据,您只需使用默认数据创建一个新行,并在验证新数据之前返回行索引。然后,您的代码具有索引,因此用户可以根据他们的喜好来验证数据,如果没有,则可以使用索引以便删除已创建的数据。