如何使用服务总线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#中?

+0

“我得到了反序列化问题。”有趣,我没有看到任何。也许你应该[编辑]并添加关于发生的事情的细节。 – Will

在您的收到代码中,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