编写xml文件 - 需要多个用户的模式

时间:2011-03-04 11:24:44

标签: c# xml

我的网站写入XML文件 这是写入任务xml的一个例子。

/// <summary>
/// The name of the xml file containing the tasks data.
/// </summary>
private string tasksFile;

/// <summary>
/// The Xml Document that stores the contents of the tasks
/// xml file in memory once loaded.
/// </summary>
private XDocument tasksXml;

........

/// <summary>
/// Writes the xml task file to the disk
/// </summary>
private void SaveTask()
{
    this.tasksXml.Save(this.tasksFile);
}

加载tasksXml XDocument,然后进行处理,然后使用Save方法保存。

由于多个用户可以尝试同时写入该文件,因此用户A可能会覆盖用户B执行的更改。

修改: 试图避免用户A打开,用户B打开,编辑,然后保存他们的更改(所以只有一个赢)

  • 一个。我如何确保多重 用户不会互相覆盖 工作

  • B中。单身一词是否是 正确 - 如果是这样的话怎么样 实施

3 个答案:

答案 0 :(得分:1)

呜呜,

我作弊,我的xml包含一个日期时间和锁定节点引用。为了避免死锁和覆盖,它使用这些元素。如果它被锁定,则返回“只读”。所有编辑都应用了日期时间戳。有许多缺陷,其中最重要的是编辑处于创纪录水平而不是现场。

现在对我的申请进行一些解释。这是一个管理办公室出勤的系统。它监控所有门的徽章活动,记录进出的情况。这是一种低延迟且活跃的自定义解决方案。所以在运行中,死锁并不是很常见。超过99%的数据完整性是一个奖励。因此它在这些参数中运行良好。如果要引起更高的交易压力,可能需要一个充当交通警察的子系统。

无论如何这对我有用:)

答案 1 :(得分:0)

单例用于您只想存在一次的对象。在这种情况下,您需要一个一次只能由一个用户访问的对象。

B是否希望确保它在开始处理之前获得A写的更新?

有可能,您不需要经常将此文档读写到文件系统。如果你想确保用户按顺序访问它,队列可能是你的答案,你可以创建一个单例对象,在内存中维护对XML的引用,并按顺序提供对它的访问(根据需要写出来)

单身是一种简单的模式;你使构造函数私有,并创建一个“getter”,返回对它的引用。 这里有一个很好的描述: http://www.dofactory.com/Patterns/PatternSingleton.aspx

我的建议是你创建一个类,负责控制对文件的访问。您不要将其设为单例,因为您需要为应用程序编辑的每个文件创建一个实例。它将保留对文件和更新请求队列的引用。然后创建一个单独的“库”,它保存这些文档对象的集合。你需要它,因为没有它你可以实例化指向同一文件的两个实例。应用程序仅与库交互,而不与文件访问对象交互。应用程序告诉库它要将哪些内容放入哪个文件中。该库查找处理该文件的实例,如果该文件不存在,则库会创建该文件。 然后它将请求添加到该对象的队列中,它将以FIFO顺序出现。

答案 2 :(得分:0)

以下link on SO解释了我发现的唯一一个与我认为应该如何完成的选项。它使用临时文件来指示XML文件是否已“锁定”。