Aracılığıyla paylaş


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

Not

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ış bir platformlar arası 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ı ayarlamanıza, aktarım ilerlemesini izlemenize, iptal edilen aktarımı kolayca sürdürmenize ve çok daha fazlasına olanak 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:

  • Dosyaları ve dizinleri Blob Depolama'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'ya kopyalayın.
  • Blob Depolama'dan Blob Depolama'ya kopyalama.

Önkoşullar

Ayarlama

  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ğini belirleyin. Bir diğer istem de çözümlenmemiş bağımlılıkları geri yüklemektir. "Geri yükle" seçeneğini belirleyin.
  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üğmesini seçin. 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>

Uygulama çerçevesini ayarlama

İlk olarak uygulamamız için kod çerçevesini ayarlamamız gerekir. Bu kod bizden bir depolama hesabı adı ve hesap anahtarı ister ve bu kimlik bilgilerini kullanarak bir CloudStorageAccount nesne oluşturur. 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)
        {

        }
    }
}

Önemli

Bu kod örneği, depolama hesabınıza erişimi yetkilendirmek için bir bağlantı dizesi kullanır. Bu yapılandırma, örneğin amaçlar içindir. Uygulama kodunda bağlantı dizeleri ve hesap erişim anahtarları dikkatli kullanılmalıdır. Hesap erişim anahtarınız kaybolursa veya yanlışlıkla güvenli olmayan bir konuma yerleştirilirse, hizmetiniz güvenlik açığına maruz kalabilir. Erişim anahtarına sahip olan herkes, depolama hesabına yönelik istekleri yetkilendirebiliyor ve tüm verilere etkin bir şekilde erişim sahibi oluyor.

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 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ığı, veri aktarımı aktarım hızını artırmak için paralel işlem sayısını ayarlama olanağı sunar. 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.

Bu örnekte, paralel işlemlerin sayısını ayarlamamıza olanak tanıyan kod ekleyeceğiz. Ayrıca aktarımın tamamlanmasının ne kadar sürdüğünü zamanlayan bir kod da ekleriz.

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

Bir nesne oluşturarak TransferContext aktarım işlemi sırasında aktarımın ilerleme durumunu izleyebilirsiniz. TransferContext nesnesi iki biçimde gelir: SingleTransferContext tek dosya aktarımları ve DirectoryTransferContext dizin aktarımları için.

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 özellik de iptal edilen aktarımı sürdürme özelliğidir. Ardından, yazarak caktarımı geçici olarak iptal etmemize ve 3 saniye sonra aktarımı sürdürmemize olanak tanıyan bir kod ekleyeceğiz.

yöntemini TransferLocalFileToAzureBlobdeğiştirin:

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 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ığı, aşağıdaki örnekte gösterildiği gibi bir dosya dizinini ve tüm alt dizinlerini aktarmanıza olanak tanır.

İ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 Azure'a taşımanız gerektiği durumlardır. Kaynağa erişmenizi sağlayan bir URL'niz varsa 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ı Value Açıklama
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'ya bir başlangıç kopyalama 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 sağlanan bir diğer özellik de bir Azure Depolama kaynağından diğerine kopyalama özelliğidir.

yöntemini TransferAzureBlobToAzureBlobdeğiştirin:

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 yapılandırma, 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 Sanal Makinesinde 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.

İpucu

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.