Диск Windows Azure - Исключение доступа запрещено - PullRequest
1 голос
/ 05 декабря 2011

Я пытаюсь написать тестовую службу WCF, которая записывает файлы изображений в хранилище Azure Drive:

Ниже приведен код, который я написал:

            var storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("DataConnectionString"));
            blobStorage = storageAccount.CreateCloudBlobClient();

            CloudBlobContainer container = blobStorage.GetContainerReference("mydrives");
            container.CreateIfNotExist();

            CloudPageBlob pageBlob = container.GetPageBlobReference("myvhd");
            CloudDrive drive = new CloudDrive(pageBlob.Uri, storageAccount.Credentials);

            try
            {
                drive.Create(100);
                driveLetter = drive.Mount(0, DriveMountOptions.None);
                var fileExtension = Path.GetExtension(file.FileName);
                var fileName = string.Format("{0:10}_{1}{2}", DateTime.Now.Ticks, Guid.NewGuid(), fileExtension);
                File.WriteAllBytes(driveLetter + "\\" + fileName, file.FileStream);
            }
            catch (CloudDriveException e)
            {
                System.Diagnostics.Debug.WriteLine(e.Message);
            }

file.FileStream - это байтовый массив, который я получаю от клиента Silverlight.

Этот код отлично работает, когда я запускаю его локально. Я даже мог видеть, как двоичные объекты и изображения загружались с помощью средства просмотра эмулятора хранилища.

Но как только я опубликую его в облаке и запускаю, я получаю следующее исключение:

<InnerException i:nil="true"/><Message>Access to the path 'd:\1634586886770888071_aa98357b-888d-4dde-a231-1ca5d5c73b49.jpeg' is denied.</Message><StackTrace>   
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)&#xD;
       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)&#xD;
       at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)&#xD;
       at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)&#xD;
       at System.IO.File.WriteAllBytes(String path, Byte[] bytes)&#xD;
       at ProcessService.FileService.UploadDCMToDrive(FileToTransfer file) in C:\Users\Vinod\Desktop\TestAzure_Vinod\ProcessService\FileService.svc.cs:line 68&#xD;
       at SyncInvokeUploadDCMToDrive(Object , Object[] , Object[] )&#xD;
       at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp; outputs)&#xD;
       at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)&#xD;
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)&#xD;
       at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace><Type>System.UnauthorizedAccessException</Type>

Я попытался запустить приложение с повышенными разрешениями (согласно this ), но я все еще получаю ту же ошибку. Кто-нибудь может пролить свет на это, пожалуйста?

ОБНОВЛЕНИЕ : я создал папку, используя следующий код:

DirectoryInfo di = new DirectoryInfo(driveLetter + "\\images");
if (!di.Exists)
  di.Create();

Теперь я получаю эту ошибку:

Could not find a part of the path 'd:\images\test.jpeg

Это действительно странно: - (

...