Windows Azure - доступ запрещен по пути подтверждения - PullRequest
2 голосов
/ 18 января 2012

Я пытаюсь открыть файл (включенный в мой проект в качестве параметров Content и Copy Always), используя FileStream.Я получаю следующую ошибку:

***Access to the path 'E:\approot\PdataParsingRules.xml is denied.***

Я использую приведенный ниже код для получения пути к моему файлу:

Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + @"\", @"approot\PdataParsingRules.xml");

И я использую приведенный ниже код для сериализации моегоfile:

ParsingRules rules;
XmlSerializer serializer = new XmlSerializer(typeof(ParsingRules));
fileStream = new FileStream(rulePath, FileMode.Open);
rules = (ParsingRules)serializer.Deserialize(fileStream);
return rules;

Когда я выполняю RDC для одного из экземпляров моей рабочей роли (работает в режиме полного доверия), я вижу, что этот конкретный файл имеет права на чтение, чтение и выполнение для обычных пользователей на этой виртуальной машине,Администратор и Система имеют полный контроль над файлом.Моя де-сериализация работает нормально, если я вручную предоставляю полные права обычным пользователям, но это не решает проблему по очевидным причинам.

Буду признателен за любые идеи по этому поводу.

1 Ответ

3 голосов
/ 19 января 2012

Просматривая документацию для используемого вами конструктора , я вижу следующее:

Для конструкторов без параметра FileAccess, если для параметра режима установлено значение Append, Writeэто доступ по умолчанию.В противном случае доступ устанавливается на ReadWrite.

И по умолчанию, если вы не запускаете свою роль с повышенными правами доступа, ваш код не имеет доступа WRITE к файлам.Вы можете только читать их.Попробуйте использовать конструктор , который также определяет режим FileAccess , например:

fileStream = new FileStream(rulePath, FileMode.Open, FileAccess.Read); 

Я думаю, что это ключ к вашей проблеме.

** EDIT **

Теперь, когда я протестировал оба конструктора, я могу подтвердить, что это (то, что я описал) было вашей проблемой.Если вы хотите просто прочитать ваш файл, используйте конструктор, который я обновляю (включая параметр FileAccess).Если вы также хотите записать в свой файл, вам нужно включить задачу запуска, чтобы изменить права доступа к файлу.

Если вы для последнего, эта тема может оказаться реальной помощью!

...