Share via


Veri Taşıma kitaplığıyla veri aktarma

Dekont

Bu makale, Azure Depolama Veri Taşıma kitaplığının 2.0.XX sürümüyle çalışmaya yönelik yönergeler içerir. Sürüm 2.0.XX şu anda bakım modundadır ve kitaplık yalnızca veri bütünlüğü ve güvenlik sorunları için düzeltmeler alır. Yeni işlevsellik veya özellik eklenmez ve kitaplık tarafından yeni depolama hizmeti sürümleri desteklenmez.

Modern veri taşıma kitaplığının beta sürümleri şu anda geliştirme aşamasındadır. Daha fazla bilgi için bkz. GitHub'da .NET için Azure Depolama Veri Taşıma Ortak istemci kitaplığı.

Azure Depolama Veri Taşıma kitaplığı, blobların ve dosyaların yüksek performanslı karşıya yüklenmesi, indirilmesi ve kopyalanması için tasarlanmış platformlar arası bir açık kaynak kitaplığıdır. Veri Taşıma kitaplığı, .NET için Azure Depolama istemci kitaplığında bulunmayan kullanışlı yöntemler sağlar. Bu yöntemler paralel işlemlerin sayısını ayarlama, aktarım ilerlemesini izleme, iptal edilen aktarımı kolayca sürdürme ve çok daha fazlasını yapabilme olanağı sağlar.

Bu kitaplık ayrıca .NET Core kullanır. Bu, Windows, Linux ve macOS için .NET uygulamaları oluştururken kullanabileceğiniz anlamına gelir. .NET Core hakkında daha fazla bilgi edinmek için .NET Core belgelerine bakın. Bu kitaplık, Windows için geleneksel .NET Framework uygulamaları için de çalışır.

Bu belge, Windows, Linux ve macOS üzerinde çalışan ve aşağıdaki senaryoları gerçekleştiren bir .NET Core konsol uygulamasının nasıl oluşturulacağını gösterir:

  • Blob Depolama dosyaları ve dizinleri karşıya yükleyin.
  • Veri aktarırken paralel işlemlerin sayısını tanımlayın.
  • Veri aktarımı ilerleme durumunu izleyin.
  • İptal edilen veri aktarımını sürdür.
  • Dosyayı URL'den Blob Depolama'a kopyalayın.
  • Blob Depolama Blob Depolama kopyalayın.

Ön koşullar

Kurulum

  1. .NET Core SDK'sını yüklemek için .NET Core Yükleme Kılavuzu'nu ziyaret edin. Ortamınızı seçerken komut satırı seçeneğini belirleyin.
  2. Komut satırından projeniz için bir dizin oluşturun. Bu dizine gidin ve bir C# konsol projesi oluşturmak için yazın dotnet new console -o <sample-project-name> .
  3. Bu dizini Visual Studio Code'da açın. Bu adım, Windows'da yazarak code . komut satırı aracılığıyla hızlı bir şekilde gerçekleştirilebilir.
  4. Visual Studio Code Market'ten C# uzantısını yükleyin. Visual Studio Code'un yeniden başlatılması.
  5. Bu noktada iki istem görmeniz gerekir. Bunlardan biri "derlemek ve hata ayıklamak için gerekli varlıklar" eklemektir. "Evet" seçeneğine tıklayın. Bir diğer istem de çözümlenmemiş bağımlılıkları geri yüklemektir. "Geri yükle"ye tıklayın.
  6. dış terminali konsol olarak kullanmak için altında .vscode değiştirinlaunch.json. Bu ayar şu şekilde okunmalıdır: "console": "externalTerminal"
  7. Visual Studio Code, .NET Core uygulamalarında hata ayıklamanıza olanak tanır. Uygulamanızı çalıştırmak ve kurulumunuzun çalıştığını doğrulamak için tuşuna basabilirsiniz F5 . Konsolda "Merhaba Dünya!" ifadesinin yazdırıldığını görmeniz gerekir.

Veri Taşıma kitaplığını projenize ekleme

  1. Veri Taşıma kitaplığının dependencies en son sürümünü dosyanızın <project-name>.csproj bölümüne ekleyin. Bu sürüm, yazma sırasında "Microsoft.Azure.Storage.DataMovement": "0.6.2"
  2. Projenizi geri yüklemek için bir istem görüntülenmelidir. "Geri yükle" düğmesine tıklayın. Komutunu proje dizininizin köküne yazarak da komut satırından dotnet restore projenizi geri yükleyebilirsiniz.

Değiştir <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>

Uygulamanızın iskeletini ayarlama

İlk olarak uygulamamızın "iskelet" kodunu ayarlayacağız. Bu kod, bir Depolama hesap adı ve hesap anahtarı ister ve bir nesne oluşturmak CloudStorageAccount için bu kimlik bilgilerini kullanır. Bu nesne, tüm aktarım senaryolarında Depolama hesabımızla etkileşim kurmak için kullanılır. Kod ayrıca yürütmek istediğimiz aktarım işleminin türünü seçmenizi ister.

Değiştir 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)
        {

        }
    }
}

Bloba yerel dosya yükleme

ve GetBlob yöntemlerini GetSourcePath ekleyinProgram.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;
}

TransferLocalFileToAzureBlob Yöntemini değiştirin:

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);
}

Bu kod bizden yerel bir dosyanın yolunu, yeni veya var olan bir kapsayıcının adını ve yeni bir blobun adını ister. TransferManager.UploadAsync yöntemi bu bilgileri kullanarak karşıya yüklemeyi gerçekleştirir.

Uygulamanızı çalıştırmak için hit tuşuna basabilirsiniz F5 . Microsoft Azure Depolama Gezgini ile Depolama hesabınızı görüntüleyerek karşıya yüklemenin gerçekleştiğini doğrulayabilirsiniz.

Paralel işlemlerin sayısını ayarlama

Veri Taşıma kitaplığı tarafından sunulan bir özellik, veri aktarımı aktarım hızını artırmak için paralel işlemlerin sayısını ayarlayabilme özelliğidir. Varsayılan olarak, Veri Taşıma kitaplığı paralel işlem sayısını makinenizdeki çekirdek sayısını 8 * olarak ayarlar.

Düşük bant genişliğine sahip bir ortamdaki birçok paralel işlemin ağ bağlantısını bunaltabileceğini ve aslında işlemlerin tamamen tamamlanmasını engelleyebileceğini unutmayın. Kullanılabilir ağ bant genişliğinize göre en uygun olanı belirlemek için bu ayarı denemeniz gerekir.

Paralel işlemlerin sayısını ayarlamamıza olanak tanıyan bazı kodlar ekleyelim. Şimdi aktarımın tamamlanmasının ne kadar sürdüğünü gösteren bir kod da ekleyelim.

için Program.csbir SetNumberOfParallelOperations yöntem ekleyin:

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);
}

ExecuteChoice yöntemini kullanacak SetNumberOfParallelOperationsşekilde değiştirin:

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();
    }
}

TransferLocalFileToAzureBlob Yöntemini zamanlayıcı kullanacak şekilde değiştirin:

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);
}

Aktarım ilerleme durumunu izleme

Verilerin aktarılmasının ne kadar sürdüğünü bilmek yararlı olur. Ancak aktarım işlemi sırasında aktarımın ilerleme durumunu görebilmek daha da iyi olacaktır. Bu senaryoya ulaşmak için bir TransferContext nesne oluşturmamız gerekir. TransferContext nesnesi iki biçimde gelir: SingleTransferContext ve DirectoryTransferContext. İlki tek bir dosyayı aktarmaya, ikincisi ise bir dosya dizinini aktarmaya yöneliktir.

ve GetDirectoryTransferContext yöntemlerini GetSingleTransferContext ekleyinProgram.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;
}

TransferLocalFileToAzureBlob yöntemini kullanacak GetSingleTransferContextşekilde değiştirin:

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);
}

İptal edilen aktarımı sürdürme

Veri Taşıma kitaplığı tarafından sunulan bir diğer kullanışlı özellik de iptal edilen aktarımı sürdürme özelliğidir. yazarak aktarımı cgeçici olarak iptal etmemize olanak tanıyan bir kod ekleyelim ve 3 saniye sonra aktarımı sürdürelim.

Değiştir 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);
}

Şimdiye kadar değerimiz checkpoint her zaman olarak nullayarlanmıştır. Şimdi aktarımı iptal ettiğimizde aktarımımızın son kontrol noktasını alır ve aktarım bağlamımızda bu yeni denetim noktasını kullanırız.

Yerel dizini Blob depolamaya aktarma

Veri Taşıma kitaplığının aynı anda yalnızca bir dosya aktarabilmiş olması hayal kırıklığı olur. Neyse ki, durum bu değil. Veri Taşıma kitaplığı, bir dosya dizinini ve tüm alt dizinlerini aktarma olanağı sağlar. Şimdi bunu yapmamıza olanak tanıyan bazı kodlar ekleyelim.

İlk olarak yöntemini GetBlobDirectory öğesine Program.csekleyin:

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;
}

Ardından, öğesini değiştirin TransferLocalDirectoryToAzureBlobDirectory:

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);
}

Bu yöntemle tek bir dosyayı karşıya yükleme yöntemi arasında birkaç fark vardır. Şimdi ve getDirectoryTransferContext daha önce oluşturduğumuz yöntemi kullanıyoruzTransferManager.UploadDirectoryAsync. Buna ek olarak, artık karşıya yükleme işlemimize bir options değer sağlıyoruz ve bu da karşıya yüklememize alt dizinler eklemek istediğimizi belirtmemize olanak tanır.

URL'den bloba dosya kopyalama

Şimdi url'den Azure Blob'a dosya kopyalamamıza olanak tanıyan kod ekleyelim.

Değiştir 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);
}

Bu özelliğin önemli kullanım örneklerinden biri, verileri başka bir bulut hizmetinden (örneğin AWS) Azure'a taşımanız gerektiği durumlardır. Kaynağa erişmenizi sağlayan bir URL'niz olduğu sürece yöntemini kullanarak TransferManager.CopyAsync bu kaynağı Kolayca Azure Bloblarına taşıyabilirsiniz. Bu yöntem ayrıca bir CopyMethod parametresini de tanıtır. Aşağıdaki tabloda bu parametre için kullanılabilir seçenekler gösterilmektedir:

Üye adı Değer Tanım
SyncCopy 0 Verileri kaynaktan belleğe indirin ve bellekten hedefe yükleyin. Şu anda yalnızca bir Azure Depolama kaynağından diğerine kopyalama için kullanılabilir.
ServiceSideAsyncCopy 1 Kopyalamayı yapmasına izin vermek için Azure Depolama'a bir kopyalama başlatma isteği gönderin; kopyalama işlemi tamamlanana kadar kopyalama işleminin ilerleme durumunu izleyin.
ServiceSideSyncCopy 2 Url'den Blok Koy, Url'den Blok Ekle veya URL'den Sayfa Koy ile her öbek içeriğini kopyalayın.

Blob kopyalama

Veri Taşıma kitaplığı tarafından benzersiz olarak sağlanan bir diğer özellik de bir Azure Depolama kaynağından diğerine kopyalama özelliğidir.

Değiştir 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);
}

Bu örnekte, zaman uyumlu bir kopya yapmak istediğimizi belirtmek için CopyMethod.SyncCopy boole TransferManager.CopyAsync parametresini olarak ayarlayacağız. Bu, kaynağın önce yerel makinemize indirilip ardından Azure Blob'a yüklendiği anlamına gelir. Zaman uyumlu kopyalama seçeneği, kopyalama işleminizin tutarlı bir hıza sahip olduğundan emin olmak için harika bir yoldur. Buna karşılık, zaman uyumsuz bir sunucu tarafı kopyasının hızı, sunucudaki kullanılabilir ağ bant genişliğine bağlıdır ve bu da dalgalanabilir. Ancak zaman uyumlu kopya, zaman uyumsuz kopyaya kıyasla ek çıkış maliyeti oluşturabilir. Önerilen yaklaşım, çıkış maliyetini önlemek için kaynak depolama hesabınızla aynı bölgede yer alan bir Azure VM'de zaman uyumlu kopya kullanmaktır.

Veri taşıma uygulaması artık tamamlandı. Tam kod örneği GitHub'da kullanılabilir.

Sonraki adımlar

Azure Depolama Veri Taşıma kitaplığı başvuru belgeleri.

Bahşiş

azure blob depolama kaynaklarını Azure Depolama Gezgini ile yönetin. Azure Depolama Gezgini, Azure Blob depolama kaynaklarını yönetmenize olanak tanıyan ücretsiz, tek başına bir Microsoft uygulamasıdır. Azure Depolama Gezgini kullanarak blob kapsayıcıları ve blobları görsel olarak oluşturabilir, okuyabilir, güncelleştirebilir ve silebilir, ayrıca blob kapsayıcılarınıza ve bloblarınıza erişimi yönetebilirsiniz.