2017-11-20 4 views
0

複数のコンテナを1つのAzure BLOBストレージアカウントから別のBLOBストレージアカウントにコピーしようとしています。Microsoft.WindowsAzure.Storage.DataMovement.TransferManagerのCopyDirectoryAsyncがいつ終了したかを確認するにはどうすればよいですか?

私はC#とTransferManager.CopyDirectoryAsyncの方法でMicrosoft.WindowsAzure.Storage.DataMovementライブラリを使用しています。

すべてのコンテナを検出するのに問題はありませんが、コンテナをコピーしようとすると、コピーされたブロブについてのフィードバックは得られません。私は数百万のブロブをコピーしたいので、これが終わったときのフィードバックがほしい。私は、非同期サーバー側のコピー、I.Eを使用しています。 isServiceCopy = true

私は

return await TransferManager.CopyDirectoryAsync(sourceDirectory, 
destinationDirectory, true, options, null).ConfigureAwait(false); 

を呼び出していると私は待っていますので、私はコピーが完了するまで、このラインから渡さないことを期待しています。しかし、それはほとんど直ちに通過し、のTransferStatus結果を調べると、常に0になります。 whileループで結果を繰り返しチェックしても、この数値は0から決して変更されません。しかし、Azureポータルをチェックインすると、予想されるすべてのファイルが正常にコピーされています。

DirectoryTransferContextProgressHandlerを設定しようとしましたが、数回呼び出されますが、すべてのプロパティは0です。

なぜ私はコピーからのフィードバックを得ていないのですか?

ありがとうございます。クリス

+0

コードは私の側ではうまくいきます。さらなるトラブルシューティングのために、より多くのコードスニペットを共有できますか? –

+0

こんにちは@ ZhaoxingLu - マイクロソフト、あなたの応答に感謝します。ここにコンソールアプリケーションコードをアップロードしましたhttps://gist.github.com/ChrisBellew/c4c938c6d5e2ddab4c8580503d1f890d問題は、実際にコピーを行わずに121行目の 'CopyDirectoryAsync'が完了し、97行目の' CountBlobsAsync'が常に0を返すことですおそらくコピーは実際には動作していないからです。ご協力いただきありがとうございます! – ChrisBellew

答えて

0

ブロブのCopyStateをポーリングすることができます。詳細についてはこれは間違っていhttps://stackoverflow.com/a/42255582

+0

あなたの応答をありがとうジョン、しかし私はこれを実行可能なことができるとは思わない。私は数百万のブロブをコピーしなければならず、これは非常に時間がかかることがあります。とにかくありがとう – ChrisBellew

+0

ああ、それは難しいです。あなたのニーズと予算に応じて、あなたはあなたの行き先のアカウントと同じ地域のVMをスピンアップして、そこにあなたのコピーコードを 'isServiceCopy = false'で走らせることができると思います。私。あなたは何が起こっているのかを見ることができますが、クラウドでコピーコードを実行することで、ローカルネットワーク接続を介してデータをドラッグする必要はありません。 –

+0

また、 'isServiceCopy = true'を実行することもできますが、元のリンクされたスレッドと同様に_repeatedly_をポーリングするのではなく、ちょっと待ってから各ブロブ_once_をポーリングしてからしばらく待ってから(例えば15分)それぞれのブロブ_once_は、まだ完了していないものだけをポーリングします。私。ポーリング頻度を管理しやすいものに減らすだけです。 –

1

を参照してください。Azureブロブストレージが実際のフォルダ階層を持っていないこと

CloudBlobDirectory sourceDirectory = sourceContainer.GetDirectoryReference("."); 
CloudBlobDirectory destinationDirectory = destinationContainer.GetDirectoryReference("."); 

注、ここでの引数は、実際にブロブコンテナ内のブロブの接頭辞です。したがって、コードを次のように変更してください。

CloudBlobDirectory sourceDirectory = sourceContainer.GetDirectoryReference(string.Empty); 
CloudBlobDirectory destinationDirectory = destinationContainer.GetDirectoryReference(string.Empty); 
+0

@ChrisBellewこの回答はあなたの問題を解決しますか?もしそうなら、それを受け入れてください、ありがとう! –

関連する問題