在非Windows上通过Rest解码序列化的BrokeredMessage

时间:2016-01-28 03:09:44

标签: azure xamarin azure-servicebus-queues

我正在构建一个Xamarin客户端,它从Azure Service Bus读取消息。

我的REST代码可以成功地从服务总线中提取消息,但我得到的消息似乎是二进制的(如非文本...我知道它是二进制文件;)

这是Windows上的测试代码:

byte[] response = webClient.UploadData(fullAddress, "DELETE", new byte[0]);
MemoryStream ms = new MemoryStream(response);
BrokeredMessage bm = new BrokeredMessage(ms);
responseStr = bm.GetBody<string>();

我的问题在于Xamarin / Mono,我没有BrokeredMessage。

所以我的问题是如何手动反序列化BrokeredMessage?

以下是响应变量的前几个字节:

40 06 73 74 72 69 6e 67 08 33 68 74 74 70 3a 2f 2f 73 63 68

我发现所有的例子都说我应该回复XML ......它“几乎”看起来像XML,但06和08让我失望。

我确信我错过了一些简单的东西,但我找不到它。

欢迎任何指导。

1 个答案:

答案 0 :(得分:0)

我想通了,所以我发布了答案以防其他人遇到同样的问题。

response = webClient.UploadData(fullAddress, "DELETE", new byte[0]);
responseStr = System.Text.Encoding.UTF8.GetString(response);
Dictionary<string, object> result = new Dictionary<string, object>();
foreach (var headerKey in webClient.ResponseHeaders.AllKeys)
  result.Add(headerKey, webClient.ResponseHeaders[headerKey]);

MemoryStream ms = new MemoryStream(response);
DataContractSerializer serializer = new DataContractSerializer(typeof(string));
XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(ms, XmlDictionaryReaderQuotas.Max);
object deserializedBody = serializer.ReadObject(reader);
responseStr = (string)deserializedBody;
result.Add("body", responseStr);

BrokeredMessage属性存储在ResponseHeaders