我的网站写入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中。单身一词是否是 正确 - 如果是这样的话怎么样 实施
答案 0 :(得分:1)
呜呜,
我作弊,我的xml包含一个日期时间和锁定节点引用。为了避免死锁和覆盖,它使用这些元素。如果它被锁定,则返回“只读”。所有编辑都应用了日期时间戳。有许多缺陷,其中最重要的是编辑处于创纪录水平而不是现场。
现在对我的申请进行一些解释。这是一个管理办公室出勤的系统。它监控所有门的徽章活动,记录进出的情况。这是一种低延迟且活跃的自定义解决方案。所以在运行中,死锁并不是很常见。超过99%的数据完整性是一个奖励。因此它在这些参数中运行良好。如果要引起更高的交易压力,可能需要一个充当交通警察的子系统。
无论如何这对我有用:)
答案 1 :(得分:0)
单例用于您只想存在一次的对象。在这种情况下,您需要一个一次只能由一个用户访问的对象。
B是否希望确保它在开始处理之前获得A写的更新?
有可能,您不需要经常将此文档读写到文件系统。如果你想确保用户按顺序访问它,队列可能是你的答案,你可以创建一个单例对象,在内存中维护对XML的引用,并按顺序提供对它的访问(根据需要写出来)
单身是一种简单的模式;你使构造函数私有,并创建一个“getter”,返回对它的引用。 这里有一个很好的描述: http://www.dofactory.com/Patterns/PatternSingleton.aspx
我的建议是你创建一个类,负责控制对文件的访问。您不要将其设为单例,因为您需要为应用程序编辑的每个文件创建一个实例。它将保留对文件和更新请求队列的引用。然后创建一个单独的“库”,它保存这些文档对象的集合。你需要它,因为没有它你可以实例化指向同一文件的两个实例。应用程序仅与库交互,而不与文件访问对象交互。应用程序告诉库它要将哪些内容放入哪个文件中。该库查找处理该文件的实例,如果该文件不存在,则库会创建该文件。 然后它将请求添加到该对象的队列中,它将以FIFO顺序出现。
答案 2 :(得分:0)
以下link on SO解释了我发现的唯一一个与我认为应该如何完成的选项。它使用临时文件来指示XML文件是否已“锁定”。