2011-04-28 4 views
2

나는 그러나 나는 구름과 개발 환경에 액세스 거부 예외를 모두 얻을, 내가 노력 XDocument doc = XDocument.Load(xmlTemplatePath)를 사용Windows Azure Environment.GetEnvironmentVariable ("RoleRoot") 읽기 액세스 거부 오류

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

에서 읽을 수있는 MA xml 파일이 있습니다. 읽기가 거부 된 이유는 무엇입니까?

+0

동일한 문제가 있습니다. File.Open (filename, FileMode.Open)은 액세스 거부 예외를 발생시킵니다. 파일은 확실히 존재합니다 (File.Exists (filename)은 true를 반환합니다). 이 문제를 해결할 수 있었습니까? –

답변

0

나에게 잘 보입니다. 나는 코드를 포착하여 프로젝트 루트에 myxml.xml을 생성 한 후 OnStart()에서 호출하여 작업자 역할로 가져갔습니다. 단지 확실한 것을 놓치지 않았는지 확인하기 위해서였습니다.

myxml.xml 속성을 확인하십시오. "Build Action"은 "Content"이어야하고 "Copy to Output Directory"는 "Copy always"또는 "Copy if more"이어야합니다. 그래도 해결되지 않으면 해당 파일에 대한 사용 권한을 확인하십시오.

1

나는 오래된 스레드를 알고 있지만 대답은 누군가에게 유용 할 수 있습니다.

하늘색 작업자 프로세스가 사용자 정의 사용자 (taskmgr에서 GUID로 표시됨)에서 실행되는 것으로 보입니다. 이 사용자 계정은 상당히 제한적이며 파일 시스템에 대한 읽기 액세스 권한이 없습니다 (approot 디렉토리 내에서도).

내 솔루션은 icacls를 사용하여 파일에 액세스 할 수있는 하늘색 역할 (msdn article 참조)에 대한 시작 스크립트를 만드는 것이 었습니다. 이 경우, 나는 들어, 내 프로젝트에 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 파일에서 I에 의해 배포 중에이 시작 스크립트를 실행하는 푸른 배포 시스템에 지시 (예를 들어 <WorkerRole>) 역할 정의 내에서이 퍼팅 :

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

"에뮬레이트"변수가 에뮬레이터가 실행 중일 때 설정 - 시작에 점에 유의/INSTALL.CMD 위의 파일을, 나는 권한을하고 건너 뛰기 에뮬레이터에서 실행중인 경우 변경하십시오.