2

我正在使用 Azure 事件中心,最初在发送数据以尝试计算批处理大小时,我有类似于下面的代码,它会调用EventData获取字节

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() 是重现相同异常的简单方法,但一次调用将意味着无法成功发送 EventData。

似乎有可能在下面使用了Message ,并且如果作为Message.GetBody文档多次调用,则将其设置为抛出异常;但是,在 EventData 的方法GetBodyStreamGetBody w/serializerGetBodyGetBytes中没有关于此效果的文档。

我想这应该被记录下来,或者更正,因为目前它在一个单独的线程中是一个令人不快的惊喜。

4

1 回答 1

3

您是否尝试过使用 EventData.SerializedSizeInBytes 来获取大小?这是获得批量计算大小的更准确的方法。

于 2015-04-02T17:25:12.547 回答