2017-07-17 4 views
0

J'ai suivi le lien this, pour envoyer des données XML à la file d'attente de bus de service avec succès à l'aide du bus de service RESTAPI à partir du client API et du facteur de pos.comment envoyer/recevoir des données XML à la file d'attente du bus de service en utilisant l'API REST du bus de service en C#?

Ce sont les données XML que je veux envoyer à la file d'attente:

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

Ceci est le code C# je l'ai écrit, pour envoyer des données XML à la file d'attente. Mais chaque fois que j'essaie de recevoir le message de la file d'attente, j'ai eu les problèmes de désérialisation.

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(); 
    } 

Pouvez-vous s'il vous plaît me dire comment envoyer/recevoir des données XML à la file d'attente de bus de service en utilisant le service API de repos de bus en C#?

+0

"J'ai rencontré les problèmes de désérialisation." C'est marrant, je n'en vois pas. Peut-être que vous devriez [modifier] et ajouter des détails sur ce qui s'est passé. – Will

Répondre

1

Dans votre code de réception, message.GetBody<string>() ne renvoie pas seulement le message string comme vous le souhaitez. Au lieu de cela, il essaie de désérialiser votre message en utilisant DataContractSerializer avec un binaire XmlDictionaryWriter. Pour lire le corps du message tel quel, vous devez

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

Merci Mikhail, maintenant mon problème a été résolu. – pradeep