Windows Azure Environment.GetEnvironmentVariable ("RoleRoot") ошибка доступа для чтения запрещена - PullRequest
2 голосов
/ 28 апреля 2011

У меня есть XML-файл, который я пытаюсь прочитать с

string xmlTemplatePath = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + @"\", @"approot\myxml.xml");

Используя XDocument doc = XDocument.Load(xmlTemplatePath), однако я получаю исключение об отказе в доступе как в облаке, так и в среде разработки.Есть идеи, почему в чтении отказано?

Ответы [ 2 ]

1 голос
/ 24 апреля 2012

Я знаю, старый поток ... но, тем не менее, ответ может быть полезен кому-то.

Похоже, что рабочий процесс Azure выполняется под пользовательским пользователем (отображается как GUID в taskmgr).Эта учетная запись пользователя выглядит довольно ограниченной и не имеет доступа для чтения к файловой системе (даже внутри каталога подходов).

Мое решение состояло в том, чтобы создать сценарий запуска для роли Azure (см. Статью msdn).), который использует icacls для добавления прав доступа к файлам.В этом случае я создал файл с именем startup \ Install.cmd в моем проекте, содержащий следующее:

@echo off

if "%EMULATED%"=="true" goto :EOF

echo Allowing access to files
cd directory_where_files_exist
icacls *.* /grant Everyone:F

В моем файле ServiceDefinition.csdef я указываю системе развертывания Azure запускать этот сценарий запуска во времяразвертывание, поместив его в определение роли (например, ):

<Startup>
  <Task executionContext="elevated" commandLine="startup\Install.cmd">
    <Environment>
      <Variable name="EMULATED">
        <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
      </Variable>
    </Environment>
  </Task>
</Startup>

Переменная «EMULATED» устанавливается при запуске эмулятора - обратите внимание, что в приведенном выше файле запуска / Install.cmd япропустите изменение разрешения при запуске в эмуляторе.

0 голосов
/ 29 апреля 2011

выглядит хорошо для меня.Я даже взял ваш код и поместил его в рабочую роль, вызвав его из OnStart () после создания myxml.xml в корне моего проекта, просто чтобы убедиться, что я не пропустил что-то очевидное.

Проверьте myxmlСвойства .xml: «Build Action» должно быть «Content», а «Copy to Output Directory» должно быть «Copy Always» или «Copy if newer».Если это не помогает, проверьте разрешения для этого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...