Delen via


Gegevens overdragen met de bibliotheek voor gegevensverplaatsing

Notitie

Dit artikel bevat richtlijnen voor het werken met versie 2.0.XX van de Azure Storage-bibliotheek voor gegevensverplaatsing. Versie 2.0.XX bevindt zich momenteel in de onderhoudsmodus en de bibliotheek ontvangt alleen oplossingen voor gegevensintegriteit en beveiligingsproblemen. Er worden geen nieuwe functionaliteit of functies toegevoegd en nieuwe versies van de opslagservice worden niet ondersteund door de bibliotheek.

Bètaversies van een moderne bibliotheek voor gegevensverplaatsing zijn momenteel in ontwikkeling. Zie de Algemene clientbibliotheek voor Azure Storage-gegevensverplaatsing voor .NET op GitHub voor meer informatie.

De Azure Storage-bibliotheek voor gegevensverplaatsing is een platformoverschrijdende open source-bibliotheek die is ontworpen voor het uploaden, downloaden en kopiëren van blobs en bestanden. De bibliotheek voor gegevensverplaatsing biedt handige methoden die niet beschikbaar zijn in de Azure Storage-clientbibliotheek voor .NET. Met deze methoden kunt u het aantal parallelle bewerkingen instellen, de voortgang van de overdracht bijhouden, eenvoudig een geannuleerde overdracht hervatten en nog veel meer.

Deze bibliotheek maakt ook gebruik van .NET Core, wat betekent dat u deze kunt gebruiken bij het bouwen van .NET-apps voor Windows, Linux en macOS. Raadpleeg de .NET Core-documentatie voor meer informatie over .NET Core. Deze bibliotheek werkt ook voor traditionele .NET Framework-apps voor Windows.

In dit document ziet u hoe u een .NET Core-consoletoepassing maakt die wordt uitgevoerd in Windows, Linux en macOS en de volgende scenario's uitvoert:

  • Bestanden en mappen uploaden naar Blob Storage.
  • Definieer het aantal parallelle bewerkingen bij het overdragen van gegevens.
  • Voortgang van gegevensoverdracht bijhouden.
  • Geannuleerde gegevensoverdracht hervatten.
  • Kopieer het bestand van de URL naar Blob Storage.
  • Kopiëren van Blob Storage naar Blob Storage.

Vereisten

Instellingen

  1. Ga naar de .NET Core-installatiehandleiding om de .NET Core SDK te installeren. Wanneer u uw omgeving selecteert, kiest u de opdrachtregeloptie.
  2. Maak vanaf de opdrachtregel een map voor uw project. Navigeer naar deze map en typ dotnet new console -o <sample-project-name> vervolgens om een C#-consoleproject te maken.
  3. Open deze map in Visual Studio Code. Deze stap kan snel worden uitgevoerd via de opdrachtregel door in Windows te typen code . .
  4. Installeer de C#-extensie vanuit Visual Studio Code Marketplace. Start Visual Studio Code opnieuw.
  5. Op dit moment ziet u twee prompts. Een is voor het toevoegen van 'vereiste assets om te bouwen en fouten op te sporen'. Selecteer Ja. Een andere prompt is het herstellen van onopgeloste afhankelijkheden. Selecteer 'herstellen'.
  6. Wijzig launch.json onder .vscode om externe terminal als console te gebruiken. Deze instelling moet worden gelezen als "console": "externalTerminal"
  7. Met Visual Studio Code kunt u fouten opsporen in .NET Core-toepassingen. Druk F5 om uw toepassing uit te voeren en te controleren of uw installatie werkt. Als het goed is, ziet u dat 'Hallo wereld!' in de console wordt afgedrukt.

De bibliotheek voor gegevensverplaatsing toevoegen aan uw project

  1. Voeg de nieuwste versie van de bibliotheek voor gegevensverplaatsing toe aan de dependencies sectie van uw <project-name>.csproj bestand. Op het moment van schrijven is deze versie "Microsoft.Azure.Storage.DataMovement": "0.6.2"
  2. Er moet een prompt worden weergegeven om uw project te herstellen. Selecteer de knop Herstellen. U kunt uw project ook herstellen vanaf de opdrachtregel door de opdracht dotnet restore in de hoofdmap van de projectmap te typen.

Wijzigen <project-name>.csproj:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.Azure.Storage.DataMovement" Version="0.6.2" />
        </ItemGroup>
    </Project>

Het toepassingsframework instellen

Het eerste wat we doen is het codeframework voor onze toepassing instellen. Deze code vraagt ons om een opslagaccountnaam en accountsleutel en gebruikt deze referenties om een CloudStorageAccount object te maken. Dit object wordt gebruikt voor interactie met ons opslagaccount in alle overdrachtsscenario's. De code vraagt ons ook om het type overdrachtsbewerking te kiezen dat we willen uitvoeren.

Wijzigen Program.cs:

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;
using Microsoft.Azure.Storage.DataMovement;

namespace DMLibSample
{
    public class Program
    {
        public static void Main()
        {
            Console.WriteLine("Enter Storage account name:");
            string accountName = Console.ReadLine();

            Console.WriteLine("\nEnter Storage account key:");
            string accountKey = Console.ReadLine();

            string storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=" + accountName + ";AccountKey=" + accountKey;
            CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);

            ExecuteChoice(account);
        }

        public static void ExecuteChoice(CloudStorageAccount account)
        {
            Console.WriteLine("\nWhat type of transfer would you like to execute?\n1. Local file --> Azure Blob\n2. Local directory --> Azure Blob directory\n3. URL (e.g. Amazon S3 file) --> Azure Blob\n4. Azure Blob --> Azure Blob");
            int choice = int.Parse(Console.ReadLine());

            if(choice == 1)
            {
                TransferLocalFileToAzureBlob(account).Wait();
            }
            else if(choice == 2)
            {
                TransferLocalDirectoryToAzureBlobDirectory(account).Wait();
            }
            else if(choice == 3)
            {
                TransferUrlToAzureBlob(account).Wait();
            }
            else if(choice == 4)
            {
                TransferAzureBlobToAzureBlob(account).Wait();
            }
        }

        public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
        {

        }

        public static async Task TransferLocalDirectoryToAzureBlobDirectory(CloudStorageAccount account)
        {

        }

        public static async Task TransferUrlToAzureBlob(CloudStorageAccount account)
        {

        }

        public static async Task TransferAzureBlobToAzureBlob(CloudStorageAccount account)
        {

        }
    }
}

Belangrijk

In dit codevoorbeeld wordt een verbindingsreeks gebruikt om toegang tot uw opslagaccount te autoriseren. Deze configuratie is bijvoorbeeld bedoeld. Verbindingsreeksen en toegangssleutels voor accounts moeten met voorzichtigheid worden gebruikt in de toepassingscode. Als uw accounttoegangssleutel verloren gaat of per ongeluk op een onveilige locatie is geplaatst, kan uw service kwetsbaar worden. Iedereen met de toegangssleutel kan aanvragen voor het opslagaccount autoriseren en heeft effectief toegang tot alle gegevens.

Een lokaal bestand uploaden naar een blob

Voeg de methoden GetSourcePath toe en GetBlob aan Program.cs:

public static string GetSourcePath()
{
    Console.WriteLine("\nProvide path for source:");
    string sourcePath = Console.ReadLine();

    return sourcePath;
}

public static CloudBlockBlob GetBlob(CloudStorageAccount account)
{
    CloudBlobClient blobClient = account.CreateCloudBlobClient();

    Console.WriteLine("\nProvide name of Blob container:");
    string containerName = Console.ReadLine();
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    container.CreateIfNotExistsAsync().Wait();

    Console.WriteLine("\nProvide name of new Blob:");
    string blobName = Console.ReadLine();
    CloudBlockBlob blob = container.GetBlockBlobReference(blobName);

    return blob;
}

Wijzig de TransferLocalFileToAzureBlob methode:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    Console.WriteLine("\nTransfer started...");
    await TransferManager.UploadAsync(localFilePath, blob);
    Console.WriteLine("\nTransfer operation complete.");
    ExecuteChoice(account);
}

Deze code vraagt ons om het pad naar een lokaal bestand, de naam van een nieuwe of bestaande container en de naam van een nieuwe blob. De TransferManager.UploadAsync methode voert het uploaden uit met behulp van deze informatie.

Druk F5 om uw toepassing uit te voeren. U kunt controleren of het uploaden is uitgevoerd door uw opslagaccount te bekijken met Microsoft Azure Storage Explorer.

Het aantal parallelle bewerkingen instellen

De bibliotheek voor gegevensverplaatsing biedt de mogelijkheid om het aantal parallelle bewerkingen in te stellen om de doorvoer van gegevensoverdracht te verhogen. De bibliotheek voor gegevensverplaatsing stelt standaard het aantal parallelle bewerkingen in op 8 * het aantal kernen op uw computer.

Houd er rekening mee dat veel parallelle bewerkingen in een omgeving met lage bandbreedte de netwerkverbinding kunnen overbelasten en dat bewerkingen niet volledig kunnen worden voltooid. U moet experimenteren met deze instelling om te bepalen wat het beste werkt op basis van uw beschikbare netwerkbandbreedte.

In dit voorbeeld voegen we code toe waarmee we het aantal parallelle bewerkingen kunnen instellen. We voegen ook code toe die tijden toevoegt hoe lang het duurt voordat de overdracht is voltooid.

Voeg een SetNumberOfParallelOperations methode toe aan Program.cs:

public static void SetNumberOfParallelOperations()
{
    Console.WriteLine("\nHow many parallel operations would you like to use?");
    string parallelOperations = Console.ReadLine();
    TransferManager.Configurations.ParallelOperations = int.Parse(parallelOperations);
}

Wijzig de ExecuteChoice te gebruiken SetNumberOfParallelOperationsmethode:

public static void ExecuteChoice(CloudStorageAccount account)
{
    Console.WriteLine("\nWhat type of transfer would you like to execute?\n1. Local file --> Azure Blob\n2. Local directory --> Azure Blob directory\n3. URL (e.g. Amazon S3 file) --> Azure Blob\n4. Azure Blob --> Azure Blob");
    int choice = int.Parse(Console.ReadLine());

    SetNumberOfParallelOperations();

    if(choice == 1)
    {
        TransferLocalFileToAzureBlob(account).Wait();
    }
    else if(choice == 2)
    {
        TransferLocalDirectoryToAzureBlobDirectory(account).Wait();
    }
    else if(choice == 3)
    {
        TransferUrlToAzureBlob(account).Wait();
    }
    else if(choice == 4)
    {
        TransferAzureBlobToAzureBlob(account).Wait();
    }
}

Wijzig de TransferLocalFileToAzureBlob methode om een timer te gebruiken:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    Console.WriteLine("\nTransfer started...");
    Stopwatch stopWatch = Stopwatch.StartNew();
    await TransferManager.UploadAsync(localFilePath, blob);
    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Voortgang van overdracht bijhouden

U kunt de voortgang van de overdracht bijhouden tijdens de overdrachtsbewerking door een TransferContext object te maken. Het TransferContext object heeft twee vormen: SingleTransferContext voor bestandsoverdrachten met één bestand en DirectoryTransferContext voor mapoverdrachten.

Voeg de methoden GetSingleTransferContext toe en GetDirectoryTransferContext aan Program.cs:

public static SingleTransferContext GetSingleTransferContext(TransferCheckpoint checkpoint)
{
    SingleTransferContext context = new SingleTransferContext(checkpoint);

    context.ProgressHandler = new Progress<TransferStatus>((progress) =>
    {
        Console.Write("\rBytes transferred: {0}", progress.BytesTransferred );
    });

    return context;
}

public static DirectoryTransferContext GetDirectoryTransferContext(TransferCheckpoint checkpoint)
{
    DirectoryTransferContext context = new DirectoryTransferContext(checkpoint);

    context.ProgressHandler = new Progress<TransferStatus>((progress) =>
    {
        Console.Write("\rBytes transferred: {0}", progress.BytesTransferred );
    });

    return context;
}

Wijzig de TransferLocalFileToAzureBlob te gebruiken GetSingleTransferContextmethode:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    Console.WriteLine("\nTransfer started...\n");
    Stopwatch stopWatch = Stopwatch.StartNew();
    await TransferManager.UploadAsync(localFilePath, blob, null, context);
    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Een geannuleerde overdracht hervatten

Een andere functie die wordt aangeboden door de bibliotheek voor gegevensverplaatsing, is de mogelijkheid om een geannuleerde overdracht te hervatten. Vervolgens voegen we code toe waarmee we de overdracht tijdelijk kunnen annuleren door te typen cen de overdracht 3 seconden later te hervatten.

Wijzig de methode TransferLocalFileToAzureBlob:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    try
    {
        task = TransferManager.UploadAsync(localFilePath, blob, null, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetSingleTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.UploadAsync(localFilePath, blob, null, context);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Tot nu toe is onze checkpoint waarde ingesteld op null. Als we de overdracht annuleren, halen we het laatste controlepunt van onze overdracht op, dan gebruiken we dit nieuwe controlepunt in onze overdrachtscontext.

Een lokale map overdragen naar Blob Storage

Met de bibliotheek voor gegevensverplaatsing kunt u een map met bestanden en alle bijbehorende submappen overdragen, zoals wordt weergegeven in het volgende voorbeeld.

Voeg eerst de methode GetBlobDirectory toe aan Program.cs:

public static CloudBlobDirectory GetBlobDirectory(CloudStorageAccount account)
{
    CloudBlobClient blobClient = account.CreateCloudBlobClient();

    Console.WriteLine("\nProvide name of Blob container. This can be a new or existing Blob container:");
    string containerName = Console.ReadLine();
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    container.CreateIfNotExistsAsync().Wait();

    CloudBlobDirectory blobDirectory = container.GetDirectoryReference("");

    return blobDirectory;
}

Wijzig TransferLocalDirectoryToAzureBlobDirectoryvervolgens:

public static async Task TransferLocalDirectoryToAzureBlobDirectory(CloudStorageAccount account)
{
    string localDirectoryPath = GetSourcePath();
    CloudBlobDirectory blobDirectory = GetBlobDirectory(account);
    TransferCheckpoint checkpoint = null;
    DirectoryTransferContext context = GetDirectoryTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    UploadDirectoryOptions options = new UploadDirectoryOptions()
    {
        Recursive = true
    };

    try
    {
        task = TransferManager.UploadDirectoryAsync(localDirectoryPath, blobDirectory, options, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetDirectoryTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.UploadDirectoryAsync(localDirectoryPath, blobDirectory, options, context);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Er zijn enkele verschillen tussen deze methode en de methode voor het uploaden van één bestand. We gebruiken TransferManager.UploadDirectoryAsync nu de methode die getDirectoryTransferContext we eerder hebben gemaakt. Daarnaast bieden we nu een options waarde voor onze uploadbewerking, waarmee we kunnen aangeven dat we submappen in onze upload willen opnemen.

Een bestand kopiëren van URL naar een blob

Nu gaan we code toevoegen waarmee we een bestand van een URL naar een Azure Blob kunnen kopiëren.

Wijzigen TransferUrlToAzureBlob:

public static async Task TransferUrlToAzureBlob(CloudStorageAccount account)
{
    Uri uri = new Uri(GetSourcePath());
    CloudBlockBlob blob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    try
    {
        task = TransferManager.CopyAsync(uri, blob, CopyMethod.ServiceSideAsyncCopy, null, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetSingleTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.CopyAsync(uri, blob, CopyMethod.ServiceSideAsyncCopy, null, context, cancellationSource.Token);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Een belangrijke use case voor deze functie is wanneer u gegevens van een andere cloudservice naar Azure moet verplaatsen. Als u een URL hebt die u toegang geeft tot de resource, kunt u die resource eenvoudig met behulp van de TransferManager.CopyAsync methode naar Azure Blobs verplaatsen. Deze methode introduceert ook een CopyMethod-parameter . In de volgende tabel ziet u de beschikbare opties voor deze parameter:

De naam van lid Weergegeven als Beschrijving
SyncCopy 0 Download gegevens van bron naar geheugen en upload de gegevens van het geheugen naar de bestemming. Momenteel alleen beschikbaar voor het kopiëren van de ene Azure Storage-resource naar de andere.
ServiceSideAsyncCopy 1 Verzend een aanvraag voor het kopiëren van een start naar Azure Storage om het kopiëren uit te voeren; controleer de voortgang van de kopieerbewerking totdat het kopiëren is voltooid.
ServiceSideSyncCopy 2 Kopieer inhoud van elk segment met Put Block From URL, Append Block From URL of Put Page From URL.

Een blob kopiëren

Een andere functie van de bibliotheek voor gegevensverplaatsing is de mogelijkheid om van de ene Azure Storage-resource naar de andere te kopiëren.

Wijzig de methode TransferAzureBlobToAzureBlob:

public static async Task TransferAzureBlobToAzureBlob(CloudStorageAccount account)
{
    CloudBlockBlob sourceBlob = GetBlob(account);
    CloudBlockBlob destinationBlob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    try
    {
        task = TransferManager.CopyAsync(sourceBlob, destinationBlob, CopyMethod.SyncCopy, null, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetSingleTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.CopyAsync(sourceBlob, destinationBlob, CopyMethod.SyncCopy, null, context, cancellationSource.Token);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

In dit voorbeeld stellen we de booleaanse parameter in TransferManager.CopyAsync om aan te CopyMethod.SyncCopy geven dat we een synchrone kopie willen uitvoeren. Deze configuratie betekent dat de resource eerst naar onze lokale computer wordt gedownload en vervolgens naar Azure Blob wordt geüpload. De synchrone kopieeroptie is een uitstekende manier om ervoor te zorgen dat uw kopieerbewerking een consistente snelheid heeft. De snelheid van een asynchrone kopie aan de serverzijde is daarentegen afhankelijk van de beschikbare netwerkbandbreedte op de server, die kan fluctueren. Synchrone kopie kan echter extra kosten voor uitgaand verkeer genereren in vergelijking met asynchrone kopie. De aanbevolen methode is om synchrone kopie te gebruiken in een virtuele Azure-machine die zich in dezelfde regio bevindt als uw bronopslagaccount om uitgaande kosten te voorkomen.

De toepassing voor gegevensverplaatsing is nu voltooid. Het volledige codevoorbeeld is beschikbaar op GitHub.

Volgende stappen

Referentiedocumentatie voor azure Storage-bibliotheek voor gegevensverplaatsing.

Tip

Azure Blob Storage-resources beheren met Azure Storage Explorer. Azure Storage Explorer is een gratis, zelfstandige app van Microsoft waarmee u Azure Blob Storage-resources kunt beheren. Met Behulp van Azure Storage Explorer kunt u visueel blobcontainers en -blobs maken, lezen, bijwerken en verwijderen, en de toegang tot uw blobs-containers en -blobs beheren.