フォーム デザイナーとして機能する Web サイト アプリケーションがあります。
フォームデータは XML ファイルに保存されます。各フォームには独自の xml ファイルがあります。
フォームを編集するときは、基本的に XML ファイルを再作成します。
public void Save(Guid form_Id, IEnumerable<FormData> formData)
{
XDocument doc = new XDocument();
XElement formsDataElement = new XElement("FormsData");
doc.Add(formsDataElement);
foreach (FormData data in formData)
{
formsDataElement.Add(new XElement("FormData",
new XAttribute("Id", data.Id)
new XAttribute("Name", data.Name)
// other attributes
));
}
doc.Save(formXMLFilePath);
}
これはうまく機能しますが、2 人のユーザーが同時に XML ファイルを更新しないようにしたいと考えています。どうにかしてロックしたい。
各ファイルの保存プロセスを個別にロックするにはどうすればよいですか?
以下のように保存機能をロックすることもできますが、別の XML ファイルを保存したとしても、すべてのユーザーがロックされます。
private static readonly object _lock = new object();
public void Save(Guid form_Id, IEnumerable<FormData> formData)
{
lock(_lock)
{
XDocument doc = new XDocument();
foreach (FormData data in formData)
{
// Code
}
doc.Save(formXMLFilePath);
}
}