2016-10-27 13 views
1

空きAppendBlobに書き込んでいます(.NETを使用しています)。許可されているブロックの最大数に達していれば、何かを追加する前に確認したいと思います追加する。 I have readその制限は50kですので、私はその数値を使用します。そのために私はこのAzure AppendBlobのプロパティAppendBlobCommittedBlockCountがnullになっています

public async Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages) 
{ 
    foreach (var message in messages) 
    { 
     try 
     { 
      if (_appendBlob.Properties.AppendBlobCommittedBlockCount == _maximumBlockNumberPerBlob) 
      { 
       CreateBlob(null); 
      } 
      ProcessMessage(message); 
     } 
     catch (Exception ex) 
     { 
      _log.Error("Failed Processing Message", ex); 
     } 
    } 

    await context.CheckpointAsync(); 
} 

をしようとしていた。しかし(私もそれを呼び出すためにTimer classを使用していて、それがその魚のnull引数を取る)AppendBlobCommittedBlockCountは常にnullとして来ているとCreateBlob方法は、単に新しいブロブを作成します。それがどうして起こるのか、これが方法でないなら、どうすればそれをチェックすることができるのでしょうか?

おかげ

UPDATE:

方法CreateBlobは以下の通りです:

public void CreateBlob(object _) 
{ 
    var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageAccount")); 
    var appendBlobReference = CloudConfigurationManager.GetSetting("appendBlobReference"); 
    var blobClient = storageAccount.CreateCloudBlobClient(); 
    var currentDate = DateTime.UtcNow; 
    var container = blobClient.GetContainerReferenc("testContainer"); 
    container.CreateIfNotExists(); 
    _appendBlob = container.GetAppendBlobReference($"{folderName}/{appendBlobReference}-{currentDate.ToString("yyyyMMddHHmm")}"); 
    _appendBlob.CreateOrReplace(); 
} 

ビーイング_appendBlobプライベートフィールドやフォルダ名とappendBlobReferenceはちょうど

すべてのこれらのメソッドは内部でされる文字列EventHubsからイベントをフェッチするためにIEventProcessorを実装するクラスです。したがって、基本的にTask ProcessEvenstAsyncはストリームに新しいものがあるときに呼び出されます。

また、CreateBlobを初めて呼び出すときは、タイマを使用してIEventProcessorを実装するクラスのコンストラクタ内にあります(完全であるかどうかに関係なく15分ごとに新しいものを作成します)。このビットは、私はちょうどCloudAppendBlob.CreateOrReplaceを使用してアペンドブロブを作成しようとしましたし、私が気づいたことは、これはAppendBlobCommittedBlockCountを返さないことであり、このプロパティの値はnull(デフォルトのままである理由です

_timer = new Timer(CreateBlob, null, TimeSpan.FromMilliseconds(0), TimeSpan.FromMinutes(int.Parse(CloudConfigurationManager.GetSetting("updateBlobNameIntervalInMinutes")))); 

と作成

+0

あなたが作成しているどのように共有してください。 '_appendBlob'。そのプロパティをどこにフェッチしていますか? –

+0

@ GauravMantri私はifステートメントの行ごとにそれらにアクセスすると思ったので、プロパティを取得する場所についてはわからないが、質問を更新した – mitomed

答えて

0

の作品値)。

この値を入力するには、blobのプロパティを再度取得する必要があります。あなたはブロブを作成した後、次のコード行を追加し、そこにnull以外の値が表示されるはずください

 _appendBlob.FetchAttributes(); 

だからあなたのコードは次のようになります。

_appendBlob = container.GetAppendBlobReference($"{folderName}/{appendBlobReference}-{currentDate.ToString("yyyyMMddHHmm")}"); 
    _appendBlob.CreateOrReplace(); 
    _appendBlob.FetchAttributes(); 
関連する問題