如何通过aspnet_wp.exe释放文件句柄

时间:2010-12-01 17:46:39

标签: c# wcf

我在IIS中托管了WCF服务,该服务使用以下代码生成xml文件:

XmlSerializer serializer = new XmlSerializer(typeof(Batch));
using (TextWriter textWriter = new StreamWriter(ConfigurationManager.AppSettings["SFTPDirectoryPath"] + "\\" + bundle.Name.Replace("dat", "xml")))
{
    serializer.Serialize(textWriter, batch);
    textWriter.Close();
}

在磁盘上写入XML文件之后,如果我尝试更改文件的内容,或者如果我尝试删除该文件,则会收到另一个进程正在使用该文件的错误消息,关闭所有程序使用该文件。我下载了一个名为“ofview”的应用程序,该应用程序显示哪个进程持有该文件的句柄并锁定它。它表明aspnet_wp持有XML文件的锁。 ofview允许我释放这个句柄,然后我可以更改文件或删除它。

我的问题是:一旦我在代码中写完文件,我怎样才能以编程方式释放句柄?我错过了什么吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

如果您只有您发布的代码,那么在您调用textWriter.Close()后,文件句柄实际上会立即释放 - 尝试将相同的代码单独放在虚拟项目中并逐步执行。在调用textWriter.Close()之前尝试删除文件时应该收到错误,但应该能够在textWriter.Close()之后立即删除该文件。

您的服务中是否还有其他I / O?

修改

不确定这是否会有所帮助,但您可以尝试在关闭呼叫之前刷新流:

serializer.Serialize(textWriter, batch);
textWriter.Flush();
textWriter.Close();