如何使用服务总线REST API在C#中发送/接收xml数据到服务总线队列?
问题描述:
我跟着this链接,使用来自advance rest API客户端和邮递员的服务总线RESTAPI成功地将xml数据发送到服务总线队列。如何使用服务总线REST API在C#中发送/接收xml数据到服务总线队列?
这是我想给排队的XML数据:
<workItem>
<date>1408566000</date>
<duration>40</duration>
<desciption>test</desciption>
</workItem>
这是我写的C#代码,发送XML数据排队。但是,无论何时我试图从队列中接收消息,我都会遇到反序列化问题。
public static async void sendMessagesToQueueUsingRESTAPI(string SASToken)
{
try
{
var url = "https://<namespace>.servicebus.windows.net/queue/messages";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(envelope);
//request.ContentType = "application/atom+xml;type=entry;charset=utf-8";
request.ContentType = "text/xml; encoding='utf-8'";
//request.Headers.Add("Content-Type", "application/atom+xml;type=entry;charset=utf-8");
request.Headers.Add("Authorization", SASToken);
//request.ContentType = "application/json";
request.ContentLength = bytes.Length;
request.Method = "POST";
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.Created)
{
Stream responseStream = response.GetResponseStream();
string responseStr = new StreamReader(responseStream).ReadToEnd();
}
}
catch(Exception ex)
{
}
Console.ReadLine();
}
public static void receiveMessagesFromQueue()
{
//Receive messages from the queues
var client = QueueClient.CreateFromConnectionString(nsConnectionString, queuePath);
client.OnMessage(message =>
{
Console.WriteLine(String.Format("Receive Message body: {0}", message.GetBody<string>()));
Console.WriteLine(String.Format("Receive Message id: {0}", message.MessageId));
});
Console.WriteLine("Press ENTER to exit program");
Console.ReadLine();
}
你能告诉我如何发送/接收xml数据到服务总线队列中使用服务总线休息API在C#中?
答
在您的收到代码中,message.GetBody<string>()
不会像您期望的那样返回string
消息。相反,它试图使用DataContractSerializer
以二进制XmlDictionaryWriter
反序列化您的消息。要按原样阅读邮件正文,您需要
using (var stream = message.GetBody<Stream>())
using (var streamReader = new StreamReader(stream, Encoding.UTF8))
{
var body = streamReader.ReadToEnd();
}
+0
谢谢米哈伊尔,现在我的问题解决了。 – pradeep
“我得到了反序列化问题。”有趣,我没有看到任何。也许你应该[编辑]并添加关于发生的事情的细节。 – Will