【问题标题】:How to update .xsl file by multiple users at the same time?如何同时更新多个用户的 .xsl 文件?
【发布时间】:2015-06-26 03:33:57
【问题描述】:

我正在开发一个应用程序,其中多个用户在处理过程中更新 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 文件?

【问题讨论】:

    标签: c# asp.net xml xslt xmldocument


    【解决方案1】:

    或者有一些替​​代方法来更新 xsl 文件?

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

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

    由于我看到您正在尝试传递 PDF 尺寸,因此您应该查看http://www.cloudformatter.com/CSS2Pdf.APIDoc.Usage 的代码。如果您查看该代码,您可以了解该转换背后的 XSL。所有适当的页面尺寸——页面大小、所有边距和许多很多东西都从 XML 传递到 XSL(从 HTML div 派生和/或在 Javascript 中指定并附加到发送到 XSL 的 XML )。

    无需任何人编辑该 XSL 即可获得各种信息——页面大小、边距、背景图像、页面边框、页面背景颜色等。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-12-16
        • 1970-01-01
        • 2011-12-28
        • 2014-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        相关资源
        最近更新 更多