Операция Azure Datalake вернула недопустимый код состояния, запрещенный - PullRequest
0 голосов
/ 21 мая 2018

Я пишу простой файл в Azure Datalake, чтобы узнать, как использовать это для других средств, но у меня возникают проблемы, и при попытке записи я получаю следующее сообщение об ошибке

21/5/2018 9:03:27 AM] Executed 'NWPimFeederFromAws' (Failed, Id=39adba4b-9c27-4078-b560-c25532e8432e)
[21/5/2018 9:03:27 AM] System.Private.CoreLib: Exception while executing function: NWPimFeederFromAws. Microsoft.Azure.Management.DataLake.Store: One or more errors occurred. (Operation returned an invalid status code 'Forbidden'). Microsoft.Azure.Management.DataLake.Store: Operation returned an invalid status code 'Forbidden'.

Кодвопрос в следующем:

static void WriteToAzureDataLake() {

    // 1. Set Synchronization Context
    SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

    // 2. Create credentials to authenticate requests as an Active Directory application
    var clientCredential = new ClientCredential(clientId, clientSecret);

    //var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientCredential).Result;
    var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientCredential).Result;

    // 2. Initialise Data Lake Store File System Client
    adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);

    // 3. Upload a file to the Data Lake Store
    var source = "c:\\nwsys\\source.txt";
    var destination = "/PIMRAW/destination.txt";
    adlsFileSystemClient.FileSystem.UploadFile(adlsAccountName, source, destination, 1, false, true);

    // FINISHED
    Console.WriteLine("6. Finished!");
}

Я добавил приложение из моей Azure AD в список доступа к этой конкретной папке, в которую я пытаюсь записать следующее:

Azure portal showing the correct rights

clientID и clientSecret в моем коде взяты из этого приложения, поэтому я немного растерялся из-за того, почему мне запретили.

Я забыл что-нибудь еще?

Может быть, что loginAsync еще не закончил, прежде чем я попытаюсь создать клиента?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Предоставили ли вы администратору приложения / службы доступ к родительским папкам по пути к определенной папке, в которую записывает приложение?Это необходимо для обхода пути к папке, см. Здесь несколько примеров: https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-access-control#common-scenarios-related-to-permissions.

0 голосов
/ 22 мая 2018

Может быть, что loginAsync еще не закончил, прежде чем я попытаюсь создать клиента?

Это не связано с loginAsync.Основываясь на моем тесте, он работает правильно на моей стороне, если я назначаю разрешения для папки.

enter image description here

Результат теста:

enter image description here

Если это возможно, вы можете создать новую учетную запись Datalake или новую папку и повторить попытку.Я рекомендую вам использовать fiddler для получения подробной информации об исключении.

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