Как освободить дескриптор файла с помощью aspnet_wp.exe - PullRequest
1 голос
/ 01 декабря 2010

У меня есть служба WCF, размещенная в IIS, эта служба генерирует 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 голосов
/ 01 декабря 2010

Если у вас есть только тот код, который вы опубликовали, дескриптор файла фактически освобождается сразу же после вызова textWriter.Close() - попробуйте поместить этот же код сам по себе в фиктивный проект и выполните выполнение. Вы должны получить сообщение об ошибке при попытке удалить файл непосредственно перед вызовом textWriter.Close(), но должны иметь возможность удалить файл сразу после textWriter.Close().

Есть ли другие сервисы ввода / вывода в вашем сервисе?

EDIT

Не уверен, поможет ли это, но вы можете попробовать очистить поток перед вызовом закрытия:

serializer.Serialize(textWriter, batch);
textWriter.Flush();
textWriter.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...