我正在使用Azure事件中心,並且最初在發送數據以嘗試計算批量大小時,我的代碼與下面的代碼相似,將會調用EventData。 GetBytes爲什麼不能在發送之前調用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()兩次是重現同一異常的簡單方法,但單次調用將意味着EventData無法成功發送。
看起來有可能在Message下面使用了,如果調用Message.GetBody文檔多於一次,則設置爲拋出異常;然而,在EventData的方法GetBodyStream,GetBody w/serializer,GetBody或GetBytes中沒有這種效果的文檔。
我想這應該是記錄,或更正,因爲目前這是一個不愉快的驚喜在一個單獨的線程。
大多數網絡/ IPC相關對象不支持任何類型的查找/重讀/重寫,所以這種行爲應該是有點期待的。我不知道它是否記錄在這個特定類型的任何地方。 – 2014-12-02 04:23:40
這似乎是一個合理的折衷(如果有文件記錄)收到的消息,大大少於尚未發送的消息。 – cacsar 2014-12-02 05:21:40