如何由多个用户同时更新.xsl文件

本文关键字:更新 xsl 文件 用户 | 更新日期: 2023-09-27 17:59:44

我正在开发一个应用程序,其中多个用户在处理过程中更新xsl。此文件位于部署web应用程序的服务器上的文件夹中。

以下代码用于更新xsl文件。

XmlDocument doc = new XmlDocument();
doc.Load(ConfigurationManager.AppSettings["XSLPdfDimensions"]);
XmlNode root = doc.DocumentElement;
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
root.SelectSingleNode(marginTop, nsmgr).Attributes["select"].Value = Convert.ToString(top);
root.SelectSingleNode(marginBottom, nsmgr).Attributes["select"].Value = Convert.ToString(bottom);
doc.Save(ConfigurationManager.AppSettings["XSLPdfDimensions"]);

当用户同时访问此文件时,发生以下异常

"The process cannot access the file 'C:'XSL'Dimensions.xsl'because it is being used by another process"

如何通过最小化功能延迟来解决这个问题,或者有其他方法来更新xsl文件?

如何由多个用户同时更新.xsl文件

或者有其他方法可以更新xsl文件?

为什么不将marginTop和marginBottom作为参数通过代码传递呢。这样,您就有了一个XSL,不需要任何修改,所有用户都可以得到他们想要的。

或者修改XML以传入这些值,并重写XSL以使用XML中的这些值。在设计良好的系统中,用户不应该修改XSL。传递给转换的XML或参数都可以处理该变量信息。

既然我看到你正在尝试传递PDF维度,你应该看看这里的代码http://www.cloudformatter.com/CSS2Pdf.APIDoc.Usage.如果您仔细研究这些代码,就可以了解转换背后的XSL。所有适当的页面尺寸——页面大小、所有页边距以及许多更多的东西——都从XML(从HTMLdiv派生和/或在Javascript中指定并附加到发送到XSL的XML)传递到XSL中。

任何人都不需要编辑XSL来获得各种东西——页面大小、页边距、背景图像、页面边框、页面背景颜色等。

我猜当两个或多个用户尝试调用doc.Save方法时,您会看到此错误。当一个用户开始写入文件时,操作系统会锁定该文件,防止其他用户同时更改。您可能需要在锁内使用它——他们会确保在同一时刻只有一个线程会尝试向它写入。

另一种选择是重新设计您的应用程序,以避免并发写入文件系统——正是因为并发问题,这是一项有风险的业务。