【问题标题】:Windows Service + Windows Forms application. One database. Advice on concurrencyWindows 服务 + Windows 窗体应用程序。一个数据库。关于并发的建议
【发布时间】:2013-04-14 10:27:24
【问题描述】:

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

Windows 窗体应用程序是供用户使用的。但我还将创建一个 Windows 服务来跟踪文件的任何更改。如果发生更改(重命名、移动、删除),服务必须相应地更新同一个数据库。而且我认为它应该立即进行,没有任何延迟。

现在这将是我第一次制作 WS 以及我第一次必须处理并发(理论上我知道线程等等)。

所以:

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

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

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

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

【问题讨论】:

  • 你听说过ACID吗?

标签: c# database winforms concurrency windows-services


【解决方案1】:

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

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

两层
本质上,您的系统具有直接与客户端通信的持久层 (DB)

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

【讨论】:

  • 我已经知道,如果并发没有问题(事实证明),这三层架构可能是要走的路。但由于我将第一次与 WCF 混淆,因此还有更多与此相关的问题。我将在另一个主题中讨论它们。或者我可以把它们放在这里吗?它会被认为是题外话吗?
【解决方案2】:

在并发方面,这将是非常直接的。 MSSQL 数据库引擎几乎可以处理所有这些问题(例如锁定和共享)。此外,如果您利用 SqlCommandBuilder 构建语句,语句将自动使用乐观并发。

至于 Windows 服务以及它如何获得通知,请使用 FileSystemWatcher,它会更高效,并且您不会在本地机器上发布某些服务端口。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多