我正在构建一个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让我失望。
我确信我错过了一些简单的东西,但我找不到它。
欢迎任何指导。
答案 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
中