2017-04-07 4 views
1

Ich verwende FileSystemOperationsExtensions.Open Methode, die Stream zurückgibt und ich kann daraus lesen. Manchmal, wenn Dienst große Dateien aus dem Stream zu lesen (~ 150-300 Mb) Service erhält folgende Ausnahmen:Azure Data Lake Store - Fehler beim Lesen von Datei

System.IO.IOException: The read operation failed, see inner exception. ---> System.Net.WebException: The request was aborted: The request was canceled. 
at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size) 
at System.Net.Http.HttpClientHandler.WebExceptionWrapperStream.Read(Byte[] buffer, Int32 offset, Int32 count) 

"ClassName": "System.IO.IOException", 
"Message": "Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host." 
at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)\r\n 
at System.Net.Http.HttpClientHandler.WebExceptionWrapperStream.Read(Byte[] buffer, Int32 offset, Int32 count) 

Und es tritt zufällig auf. Außerdem erstelle ich ein Objekt der DataLakeStoreFileSystemManagementClient Klasse mit 60 Minuten Timeout, aber diese Fehler treten davor auf. Es kann 3, 10, 20 oder was auch immer Minuten dauern. Natürlich kann ich Stream mit Offset erneut lesen, aber es erfordert zusätzliche Zeit für die Entwicklung. Vielleicht gibt es eine andere Möglichkeit, diese Ausnahmen zu vermeiden. Kann mir jemand dabei helfen?

+0

Antwort auf diese Frage: http://stackoverflow.com/questions/43400730/azure-data- see-store-existing-connection-wurde-forcibly-closed-by-the-remote-ho –

Antwort

1

Ich mache einen Demo-Test mit 270M + Datei 3 mal, es funktioniert immer richtig für mich. Versuchen Sie bitte, den folgenden Code zu verwenden, um es zu testen. Wir können auch mehr DataLake Store Demo-Code von data lake store get started net sdk bekommen.

enter image description here

Demo-Code:

var applicationId = "Application Id"; 
       var secretKey = "secretkey"; 
       var tenantId = "tenant id"; 
       var adlsAccountName = "Account name"; 
       var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, applicationId, secretKey).Result; 
       var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds,clientTimeoutInMinutes:60); 
       var srcPath = "/mytempdir/ForDemoCode.zip"; 
       var destPath = @"c:\tom\ForDemoCode1.zip"; 

       Stopwatch stopWatch = new Stopwatch(); 
       stopWatch.Start(); 
       using (var stream = adlsFileSystemClient.FileSystem.Open(adlsAccountName, srcPath)) 
       using (var fileStream = new FileStream(destPath, FileMode.Create)) 
       { 
        stream.CopyTo(fileStream); 
       } 
       var file = new FileInfo(destPath); 
       Console.WriteLine($"File size :{file.Length}"); 
       stopWatch.Stop(); 
       // Get the elapsed time as a TimeSpan value. 
       TimeSpan ts = stopWatch.Elapsed; 
       // Format and display the TimeSpan value. 
       string elapsedTime = $"{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds/10:00}"; 
       Console.WriteLine("RunTime " + elapsedTime); 
       Console.ReadKey(); 

Paket-Konfigurationsdatei:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Microsoft.Azure.Management.DataLake.Store" version="2.1.1-preview" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.DataLake.StoreUploader" version="1.0.0-preview" targetFramework="net452" /> 
    <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.13.8" 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.0-preview" targetFramework="net452" /> 
    <package id="Newtonsoft.Json" version="9.0.2-beta1" targetFramework="net452" /> 
</packages> 
+0

, Was ist der Namespace für ** ApplicationTokenProvider.LoginSilentAsync **. Ich habe diesen folgenden Fehler erhalten. ** "Der Name 'ApplicationTokenProvider' existiert nicht im aktuellen Kontext" ** –

+0

Im Namespace 'Microsoft.Rest.Azure.Authentication' habe ich ihn auch im Dateiabschnitt packages.config erwähnt. Bitte verweisen Sie auf die folgende .dll-Datei 'Microsoft.Rest.ClientRuntime.Azure.Authentication' –

+0

, Danke, es funktioniert für mich. –

Verwandte Themen