如何在 C# 中使用服务总线 REST API send/receive xml 数据到服务总线队列?

how to send/receive xml data to service bus queue using service bus REST API in C#?

我遵循 this link,使用服务总线 RESTAPI 从 advance rest API 客户端成功地将 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();
    }

你能告诉我如何在 C# 中使用服务总线休息 API send/receive xml 数据到服务总线队列吗?

在您的接收代码中,message.GetBody<string>() 并不像您期望的那样只是 return string 消息。相反,它试图使用 DataContractSerializer 和二进制 XmlDictionaryWriter 来反序列化您的消息。要按原样阅读邮件正文,您需要

using (var stream = message.GetBody<Stream>())
using (var streamReader = new StreamReader(stream, Encoding.UTF8))
{
    var body = streamReader.ReadToEnd();
}