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

时间:2013-04-14 10:27:25

标签: c# database winforms concurrency windows-services

我有SQL Server数据库,包含文件信息 - 我说的是自定义属性。这些是每个文件的类别和描述。

Windows窗体应用程序适用于用户。但是我也会制作一个Windows服务来跟踪文件的任何变化。如果发生更改(重命名,移动,删除),则服务必须相应地更新同一数据库。而且我认为它应该马上做,不要拖延。

现在这将是我第一次使用WS plus第一次处理并发(理论上我知道线程等等)。

所以:

  • 首先,如果一个进程正在更新另一个进程可能同时使用的数据库,是否可以?你需要首先处理这种情况吗? (可能是我们日常“用户生活”中的fx,我们无法在另一个进程使用时修改文件)

  • 这两个想法共享一个数据源好吗?

  • 如果是,那么如何处理并发?我可以使用WCF来处理两者之间的消息,但是解决方案是否与WCF有关?因为我也是第一次使用它:D。

感谢任何帮助。提前感谢您的时间!

2 个答案:

答案 0 :(得分:1)

由于MS SQL是事务性的,所以没有什么大不了的。您只需要注意可能由一个进程读取和更新的数据 - 可能需要使用事务范围(这是.NET类;))。

从软件架构的角度来看,您应该考虑使用三层而不是两层应用程序:

两层
基本上你的系统与持久层(DB)直接与客户端进行通信

三层: 持久层< - >逻辑层(例如,处理app逻辑的WCF服务)< - >客户端(服务和表单 - 触发应用程序逻辑并显示结果)

答案 1 :(得分:0)

谈到并发性,它将非常直接。 MSSQL数据库引擎几乎处理所有这些(例如锁定和共享)。此外,如果您利用SqlCommandBuilder构建语句,语句将自动使用乐观并发。

对于Windows服务以及如何通知它,使用FileSystemWatcher,它会更高效,并且您不会在本地框上发布某个服务端口。

我通常会给你一些很好的代码示例,但我正在通过手机回答这个问题。