35

Azure Service Bus で仲介メッセージを使用している場合は、.GetBody を呼び出してメッセージの本文を取得できます。コードは簡単です:

var msg = subscription.Receive();
MyPayload payload = msg.GetBody<MyPayload>();

しかし、body オブジェクトのクラスを明示的に知らずに Body を取得する方法はありますか?

var msg = subscription.Receive();
Type bodyType = Type.GetType( msg.ContentType);

var payload = msg.GetBody<bodyType>();
4

3 に答える 3

80

コンテンツに関係なくメッセージ本文のみを取得することが目的の場合は、ストリームとして取得できます。

Stream stream = message.GetBody<Stream>();
StreamReader reader = new StreamReader(stream);
string s = reader.ReadToEnd();
于 2013-03-15T21:05:21.517 に答える
31

仲介メッセージからデシリアライズする完全なコードは次のとおりです。

public T GetBody<T>(BrokeredMessage brokeredMessage)
{
  var ct = brokeredMessage.ContentType;
  Type bodyType = Type.GetType(ct, true);

  var stream = brokeredMessage.GetBody<Stream>();
  DataContractSerializer serializer = new DataContractSerializer(bodyType);
  XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(stream, XmlDictionaryReaderQuotas.Max);
  object deserializedBody = serializer.ReadObject(reader);
  T msgBase = (T)deserializedBody;
  return msgBase;
}
于 2013-03-27T16:44:59.780 に答える