2017-03-21 2 views
0

Azure Data Lake Storeファイルから内容を読み取ろうとしています。問題を認識することができませんC#コードを使用してData Lake Storeからファイルの内容を読み取る

Exception of type 'Microsoft.Rest.Azure.CloudException' was thrown. 

:接続中でも/接続自体を開くこと&例外は次のように例外を取得

var stream = _adlsFileSystemClient.FileSystem.Open(_adlsAccountName, "/folder1/"+file.PathSuffix); 

スローされ失敗します。 この問題を解決するにはどうすればよいですか?

は、それが基本的な例外情報であるあなた

答えて

3

Exception of type 'Microsoft.Rest.Azure.CloudException' was thrown.

ありがとうございます。だから、詳細なエラー情報をキャッチするために、フィドラーツールを使用しようとしてください。

あなたのコードによると、ファイルが見つからないか、または認可例外です。

1. 404エラーの場合:次の形式を使用して、紺碧のポータルからファイルを確認してください。それは、許可例外がある2.Ifは

var srcPath = "/mytempdir/tomtest.txt"; 
var stream = adlsFileSystemClient.FileSystem.Open(adlsAccountName, srcPath); 

enter image description here

し、クライアントシークレットとサービス・ツー・サービス認証を使用している場合。ファイルを操作するには、azure ADアプリケーションに許可を割り当ててください。詳細はdocumentを参照してください。

enter image description here

enter image description here

次は私のテストコードとスクリーンショットです:

var applicationId = "your application Id"; 
var secretKey = "secret Key"; 
var tenantId = "Your tenantId"; 
var adlsAccountName = "adls account name"; 
var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, applicationId, secretKey).Result; 
var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds); 
var srcPath = "/mytempdir/tomtest.txt"; 
var destPath = @"F:\tom\testfile.txt"; 
using (var stream = adlsFileSystemClient.FileSystem.Open(adlsAccountName, srcPath)) 
using (var fileStream = new FileStream(destPath, FileMode.Create)) 
{ 
    stream.CopyTo(fileStream); 
} 

enter image description here

Packages.config

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Hyak.Common" version="1.0.2" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Common" version="2.1.0" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Common.Dependencies" version="1.0.0" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.DataLake.Store" version="1.0.4" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.DataLake.StoreFileSystem" version="0.9.6-preview" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.DataLake.StoreUploader" version="1.0.1-preview" targetFramework="net452" /> 
    <package id="Microsoft.Bcl" version="1.1.9" targetFramework="net452" /> 
    <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net452" /> 
    <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net452" /> 
    <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.28.3" targetFramework="net452" /> 
    <package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net452" /> 
    <package id="Microsoft.Rest.ClientRuntime" version="2.3.5" targetFramework="net452" /> 
    <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.5" targetFramework="net452" /> 
    <package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" version="2.2.12" targetFramework="net452" /> 
    <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" /> 
</packages> 
+0

ありがとうございました...トム・サン....問題が解決しました。実際には、私はアクセスコントロール(IAM)を介してADLSの「リーダー」としてAADへのアクセスを提供しました。それ以来、コードは正しく動作し始めました。 – Amruta

+0

ファイルの内容を読み込んで、文字列の最初の行/行を取得します。ドキュメントには、ある宛先から別の宛先にコピーする例があります。ファイルの内容が正しい形式である場合にのみ、私はファイルをコピーしたいです。この条件を追加する必要があります。どのようにファイルからコンテンツを取得/読み込みますか? – Amruta

関連する問題