Windows服务+Windows窗体应用程序。一个数据库。并发性建议。

3
我有一个SQL Server数据库,里面存储了文件信息, 我说的是自定义属性。这些属性包括每个文件的类别和描述。
Windows窗体应用程序是为用户设计的。但我也会创建一个Windows服务来跟踪文件的任何更改。如果发生更改(重命名、移动、删除)该服务必须相应地更新同一数据库。而且我认为应该立即更新,不要有任何延迟。
现在这将是我第一次制作WS,也是我第一次处理并发(理论上我知道线程等等)。
那么:
首先,如果一个进程正在更新另一个进程可能同时使用的数据库,这样可以吗?您需要在第一时间处理这种情况吗?(可能在我们日常的“用户生活”中,当另一个进程正在使用文件时,我们无法修改文件)
这两者共享一个数据源的想法好吗?
如果是,那么如何处理并发?我可以使用WCF在两者之间传递消息,但这个解决方案是否与WCF有关呢?因为这也是我第一次使用WCF。
感谢您的帮助。提前感谢您的时间!

你听说过ACID吗? - Hamlet Hakobyan
2个回答

1
由于 MS SQL 是事务性的,所以不会有大问题。您只需要注意可能被一个进程读取和更新的数据 - 在这种情况下可能需要使用事务范围(这是一个.NET类 ;))。
从软件架构的角度来看,您应该考虑使用三层而不是两层应用程序:
两层: 基本上是您的系统与持久化层(DB)直接通信的客户端。
三层: 持久化层 <-> 逻辑层(例如处理应用程序逻辑的 WCF 服务)<-> 客户端(服务和表单 - 触发应用程序逻辑并显示结果)。

我已经知道,如果并发没有问题(事实证明确实如此),这种三层架构可能是正确的选择。但由于我将第一次涉及WCF,还有更多相关问题需要解决。我会在另一个主题中解决它们。或者我可以把它们放在这里吗?这会被视为离题吗? - Ilian Vasilev Kulishev

0

当涉及到并发时,它将非常直接。MSSQL数据库引擎处理几乎所有内容(例如锁定和共享)。此外,如果利用SqlCommandBuilder构建语句,则语句将自动使用乐观并发。

至于Windows服务以及如何得到通知,使用FileSystemWatcher会更有效率,而且您不必在本地计算机上发布某些服务端口。

我通常会给您一些好的代码示例,但我现在是用手机回答这个问题。


是的,FSWatcher。我已经在这个问题上有一个主题了http://stackoverflow.com/questions/15764439/monitoring-of-multiple-files-starting-from-windows-boot 但是,如果你有什么可以补充的,欢迎你这样做 :) 谢谢。 - Ilian Vasilev Kulishev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接