У меня есть веб-приложение.Он отправляет серию изображений на сервер (без проблем), а затем использует код из этого руководства для создания презентации PowerPoint.Презентация сохраняется в каталоге на веб-сервере, и пользователю возвращается URL-адрес.
Однако файл все еще используется, и при попытке доступа к нему в IIS 7.5 возникает ошибка 500.0.
Если я открою диспетчер задач и уничтожу процесс w3wp.exe, принадлежащий пользователю NETWORK SERVICE, все будет работать так, как задумано (файл можно скачать и просмотреть).У меня также есть другой процесс w3wp, принадлежащий DefaultAppPool, но он, похоже, не вызывает проблемы.
Я новичок в этом .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) препятствует правильному открытию файла?Есть ли какой-нибудь способ заставить его освободить этот файл?