2

私はAzure Event Hubsを使用していますが、最初にデータを送信してバッチサイズを計算しようとすると、EventDataを呼び出す以下のようなコードがありました。GetBytes

EventHubClient client;//initialized before the relevant code

EventData curr = new EventData(data);
//Setting a partition key, and other operations.
long itemLength = curr.GetBytes().LongLength;
client.SendAsync(curr);

残念ながら、SDK コードで例外が発生します。

メッセージ本文を複数回読み取ることはできません。再利用するには、読み取り後に値を保存します。

GetBytes への最終的に不要な呼び出しを削除したことで、メッセージを送信できるようになりましたが、この例外が発生する理由はかなり不可解です。GetBytes() を連続して 2 回呼び出すと、同じ例外を簡単に再現できますが、1 回呼び出すと、EventData を正常に送信できません。

Messageの下で使用されている可能性が高く、これはMessage.GetBodyドキュメントとして複数回呼び出された場合に例外をスローするように設定されています。ただし、EventData のメソッドGetBodyStreamGetBody w/serializerGetBody、またはGetBytesには、この効果に関するドキュメントはありません。

これは文書化するか、修正する必要があると思います。現在、これは別のスレッドで不愉快な驚きであるためです。

4

1 に答える 1

3

EventData.SerializedSizeInBytes を使用してサイズを取得しようとしましたか? これは、バッチ計算のサイズを取得するより正確な方法です。

于 2015-04-02T17:25:12.547 に答える