0

Azure トピック/サブスクリプションを介してメッセージを処理するために、cloudx フレームワークのパブリッシャー サブスクライバー メカニズムを使用しています。

期限切れのメッセージの一部は DeadletterQueue に移動されます。MessageReceiver を使用してデッドレター メッセージを読み取ろうとすると、シリアル化エラーが発生します。

var msgReceiver = msgFactory.CreateMessageReceiver(deadletterPath);
BrokeredMessage msg = msgReceiver.Peek(); 
UserExitMessage deadLetterObject = msg.GetBody<UserExitMessage>();   

cloudfx フレームワークがメッセージを変更 (またはエンコード) しているため、適切に逆シリアル化できないようです。

私はかなりの時間から立ち往生しているので、どんな助けもいただければ幸いです。

PS - この問題は、topicClient コードを使用して送信されたデッドレター メッセージが正常に機能するため、cloudfx を使用して発行されたメッセージでのみ発生します。

4

2 に答える 2

0

エンコーディングについてはよくわかりません

var messageBody = new StreamReader(msg.GetBody<Stream>(), Encoding.UTF8).ReadToEnd();

ただし、これにより、サービス バスからエンコードされたメッセージが取得されます。

于 2014-08-18T09:09:19.343 に答える
0

デフォルトでは、CloudFx はメッセージをトピックに公開するときに圧縮シリアライザーを使用します。これは、最適なメッセージ ペイロード サイズを確保するためです。このシリアライザーは、クラスによって実装されCloudStorageEntitySerializerます。カスタム シリアライザーを提供しない場合、SB トピックにパブリッシュされたすべてのメッセージは、前述の標準シリアライザーを通過します。

SB API を直接使用してメッセージを消費するには、メッセージの本文を Stream として読み取り、返されたストリームを によって提供される Deserialize メソッドに渡しCloudStorageEntitySerializerます。これにより、望ましい結果が得られるはずです。

于 2014-08-18T20:48:57.750 に答える