如何在C#中使用service bus REST API向service bus队列发送/接收xml数据?

如何在C#中使用service bus REST API向service bus队列发送/接收xml数据?,c#,azure,azureservicebus,azure-servicebus-queues,C#,Azure,Azureservicebus,Azure Servicebus Queues,我遵循链接,使用来自AdvanceRESTAPI客户端和postman的服务总线RESTAPI成功地将xml数据发送到服务总线队列 这是我要发送到队列的XML数据: <workItem> <date>1408566000</date> <duration>40</duration> <desciption>test</desciption> </workItem> 1408566000 40 测试

我遵循链接,使用来自AdvanceRESTAPI客户端和postman的服务总线RESTAPI成功地将xml数据发送到服务总线队列

这是我要发送到队列的XML数据:

<workItem>
<date>1408566000</date>
<duration>40</duration>
<desciption>test</desciption>
</workItem>

1408566000
40
测试

这是我编写的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();
    }
public静态异步void sendmagestoqueueusingrestapi(字符串SASToken)
{
尝试
{
变量url=”https://.servicebus.windows.net/queue/messages";
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(url);
字节[]字节;
字节=System.Text.Encoding.ASCII.GetBytes(信封);
//request.ContentType=“application/atom+xml;type=entry;charset=utf-8”;
request.ContentType=“text/xml;encoding='utf-8';
//Add(“内容类型”,“应用程序/atom+xml;类型=条目;字符集=utf-8”);
添加(“授权”,SASToken);
//request.ContentType=“application/json”;
request.ContentLength=字节.Length;
request.Method=“POST”;
Stream requestStream=request.GetRequestStream();
requestStream.Write(字节、0、字节、长度);
requestStream.Close();
HttpWebResponse;
response=(HttpWebResponse)request.GetResponse();
if(response.StatusCode==HttpStatusCode.Created)
{
Stream responseStream=response.GetResponseStream();
字符串responsest=新的StreamReader(responseStream).ReadToEnd();
}
}
捕获(例外情况除外)
{
}
Console.ReadLine();
}
public static void receiveMessagesFromQueue()
{
//从队列接收消息
var client=QueueClient.CreateFromConnectionString(nsConnectionString,queuePath);
client.OnMessage(message=>
{
WriteLine(String.Format(“接收消息体:{0}”,Message.GetBody());
WriteLine(String.Format(“接收消息id:{0}”,Message.MessageId));
});
控制台写入线(“按回车键退出程序”);
Console.ReadLine();
}

您能告诉我如何使用C#?

中的service bus rest API将xml数据发送/接收到service bus队列吗?在您的接收代码中,
message.GetBody()
并不像您期望的那样只返回
string
消息。相反,它尝试使用带有二进制
xmldirectionarywriter
DataContractSerializer
反序列化消息。要按原样阅读邮件正文,您需要

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

在您的接收代码中,
message.GetBody()
并不像您期望的那样只返回
string
消息。相反,它尝试使用带有二进制
xmldirectionarywriter
DataContractSerializer
反序列化消息。要按原样阅读邮件正文,您需要

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

“我遇到了反序列化问题。”有趣的是,我没有看到任何问题。也许你应该把发生的事情详细地描述一下。“我得到了反序列化的问题。”有趣的是,我没有看到任何问题。也许你应该补充一下发生的事情的细节。