c# - w3wp.exe(NETWORK SERVICE 用户)正在锁定新创建的文件并阻止访问它

标签 c# .net iis powerpoint w3wp.exe

我有一个 Web 应用程序。它向服务器发送一系列图像(没问题),然后使用来自 this tutorial 的代码创建 PowerPoint 演示文稿。演示文稿保存在 Web 服务器上的一个目录中,并将 URL 返回给用户。

但是,该文件仍在使用中,尝试访问它会在 IIS 7.5 中生成 500.0 错误。

如果我打开任务管理器并终止属于 NETWORK SERVICE 用户的 w3wp.exe 进程,一切都会按预期进行(可以下载和查看该文件)。我还有另一个属于 DefaultAppPool 的 w3wp 进程,但它似乎没有引起问题。

我是这个 .Net 编码的新手,所以我很可能忘记在代码中关闭某些东西。有什么想法吗?

编辑:这是从编码为字符串的图像数据创建一系列 png 的方法。它使用 Guid 创建目录路径的唯一位,并检查以确保它不存在,然后创建目录并将图像放在那里。

看起来有问题的方法是这个:

所以有问题的方法是这个:

    public void createImages(List<String> imageStrings)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        Decoder decoder = encoding.GetDecoder();

        Guid id = Guid.NewGuid();
        String idString = id.ToString().Substring(0, 8);

        while (Directory.Exists(imageStorageRoot + idString))
        {
            id = Guid.NewGuid();
            idString = id.ToString().Substring(0, 8);
        }

        String imageDirectoryPath = imageStorageRoot + idString + "\\";
        DirectoryInfo imagePathInfo = Directory.CreateDirectory(imageDirectoryPath);

        for (int i = 0; i < imageStrings.Count; i++)
        {
            String imageString = imageStrings[i];
            Byte[] binary = Convert.FromBase64String(imageString);

            using (FileStream stream = new FileStream(imageDirectoryPath + idString + i.ToString() + ".png", FileMode.Create))
            {
                using (BinaryWriter writer = new BinaryWriter(stream))
                {
                    writer.Write(binary);
                }
            }
        }
    }

编辑 2:如果有更好的做事方式,请告诉我。我正在努力学习这里!

编辑 3:因此,经过进一步检查,我可以注释掉所有这些代码。事实上,w3wp.exe 的第二个实例在浏览器访问网站后立即启动。我现在想知道这是否与我们的堆栈有其他关系?它是一个 Flex 应用程序,使用 WebOrb 远程处理某些 C# 类。

有谁知道为什么 w3wp.exe 的第二个打开实例(由 NETWORK SERVICE 所有)会阻止文件正常打开?有什么方法可以让它释放它对相关文件的保留吗?

最佳答案

确保在使用文件后关闭文件(最好将访问文件的代码放在 using 语句中)。如果您需要帮助找出问题所在,请发布一些代码。

关于c# - w3wp.exe(NETWORK SERVICE 用户)正在锁定新创建的文件并阻止访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510443/

相关文章:

c# - MVVM DialogService替代品

c# - 确定两个数据表包含相同数据的最快方法?

iis - 如何通过 PowerShell 在 azure VM 上安装 ARR?

c# - ASP .NET 5 应用程序部署

.net - 温莎城堡 : good sources for documentation, 教程

ssl - Youtube Embed 和 Google-Fonts 无法在具有自签名证书的 "localhost"上运行

c# - ListView 不刷新其项目

c# - MSBuild SonarQube Runner Resharper 插件收到跳过信息错误文件不在 sonarqube 中

c# - 自 dll 更新后 VS 无法打开控件

c# - Bing map 在使用自定义图钉时需要大量性能