2014-01-17 3 views
0

У меня есть хост, средний уровень доверия, im, использующий пакет imageresizer nuget для моих процессов изображения. Поэтому, когда я пытаюсь с помощью ImageBuilder.Build я получил эту ошибку:Threading.Timer File Создать проблему

Access to the path '(path)' is denied. 
System.UnauthorizedAccessException: Access to the path '(path)' is denied. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) 
    at ImageResizer.ImageBuilder.BuildJob(ImageJob job) 
    at ImageResizer.ImageBuilder.Build(ImageJob job) 
    at ImageResizer.ImageBuilder.Build(Object source, Object dest, ResizeSettings settings, Boolean disposeSource, Boolean addFileExtension) 
    at ImageResizer.ImageBuilder.Build(Object source, Object dest, ResizeSettings settings, Boolean disposeSource) 
    at _10oy.UI.Web.Imager.Models.Downloader.SaveAndSetDimension(String path, Int32 width, Int32 height) 

КСТАТИ: (путь) 's отредактирован мной.

Я исследую ошибку, но я не нашел эффективного результата.

вот мой код (я звоню его в threading.timer, это может быть проблема?)

public void SaveAndSetDimension(string path, int width, int height) 
    { 
     try 
     { 
      ImageBuilder.Current.Build(_MainStream, path, new ResizeSettings() { MaxWidth = width, MaxHeight = height }, false); 
     } 
     catch (Exception ex) 
     { 
      Results.Failed++; 
      DAL.Classes.Log.Write(
      message: ex.Message, 
      innerexcepition: ex.InnerException != null ? ex.InnerException.ToString() : ex.ToString(), 
      user: "Saver", 
      interfaces: 4 //Imager 
      ); 
     } 
    } 

и я попытался создать обычный файл в действии

public ContentResult CreateFile() 
    { 
     System.IO.File.Create(Server.MapPath("~/myfile.txt")); 

     return Content("File Created"); 
    } 

и его работы ,

спасибо.

Редактировать: Когда я называю это обычным действием, он отлично работает, но при вызове по таймеру я получил эту ошибку.

+0

Может ли ваш метод CreateFile() записать в тот же самый путь, который пытается выполнить ImageResizer? – christofr

+0

Да, я попробую. И это сработало. – alim

+0

Хм, сложно. Возможно, ImageResizer отдает работу подключаемому модулю, который требует больше привилегий. Вы используете какие-либо плагины? – christofr

ответ

0

Я нахожу его. Thread использовал другой идентификатор Windows, потому что он не может создать файл или удалить или что-то еще. Я это исправляю;

Получите идентификатор от application_start и т. Д., Как это.

 identity = System.Security.Principal.WindowsIdentity.GetCurrent(); 

после этого вызвать его до процесса

 identity.Impersonate(); 

файла и его работа.

0

Вы говорите, что вы звоните с таймера - возможно, у вас есть предыдущий запуск таймера? Попытайтесь использовать уникальный файл каждый раз, когда запускается таймер, чтобы убедиться, что ваша программа не блокирует файл против себя.

+0

вы можете быть уверены, всегда создавайте разные файлы. поэтому его уникальный – alim

+0

и его работающий на моем компьютере (полное доверие) при попытке работать на хосте я получаю эту ошибку. Я предоставляю все разрешения от хост-сайта (write-read) ко всем файлам. Также я даю разрешение ftp от filezilla – alim

Смежные вопросы