2014-04-30 6 views
0

Je travaille sur un projet dans lequel nous souhaitons envoyer des messages via un bus de service Azure (rubrique). Dans ce cas, j'ai configuré une application Console C# et une application Java qui envoie et reçoit des messages entre eux.Azure Service Bus - Transmission de données Problème

Lors de l'envoi d'un message à partir de C#, j'obtiens une chaîne étrangement formatée dans Java contenant «schema.microsoft.com/2003/10/serialisation». Changer le type de contenu du message ne fait aucune différence.

Lors de l'envoi de données de Java à C#, je reçois une exception.

Envoyer/Recevoir des données - C#

private static void SendMessages() 
    { 
     topicClient = TopicClient.Create(TopicName); 

     List<BrokeredMessage> messageList = new List<BrokeredMessage>(); 
     messageList.Add(CreateSampleMessage("1", "Test")); 

     Console.WriteLine("\nSending messages to topic..."); 

     foreach (BrokeredMessage message in messageList) 
     { 
      while (true) 
      { 
       try 
       { 
        topicClient.Send(message); 
       } 
       catch (MessagingException e) 
       { 
        if (!e.IsTransient) 
        { 
         Console.WriteLine(e.Message); 
         throw; 
        } 
        else 
        { 
         HandleTransientErrors(e); 
        } 
       } 
       Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); 
       break; 
      } 
     } 
     topicClient.Close(); 
    } 

    private static BrokeredMessage CreateSampleMessage(string messageId, string messageBody) 
    { 
     BrokeredMessage message = new BrokeredMessage(messageBody); 
     message.MessageId = messageId; 
     return message; 
    } 

C# Stacktrace

{ "Il y avait une erreur désérialisation l'objet de type System.String de fin de fichier inattendue suivant.. les éléments ne sont pas fermés:. "}

at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver) 
    at System.Runtime.Serialization.DataContractSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName) 
    at Microsoft.ServiceBus.Messaging.DataContractBinarySerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName) 
    at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver) 
    at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(XmlDictionaryReader reader) 
    at Microsoft.ServiceBus.Messaging.DataContractBinarySerializer.ReadObject(Stream stream) 
    at Microsoft.ServiceBus.Messaging.BrokeredMessage.GetBody[T](XmlObjectSerializer serializer) 
    at Microsoft.ServiceBus.Messaging.BrokeredMessage.GetBody[T]() 
    at Microsoft.Samples.MessagingWithTopics.program.ReceiveMessages() in d:\Downloads\Getting Started Messaging With Topics (1)\C#\MessagingWithTopics\program.cs:line 127 
    at Microsoft.Samples.MessagingWithTopics.program.Main(String[] args) in d:\Downloads\Getting Started Messaging With Topics (1)\C#\MessagingWithTopics\program.cs:line 39 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 

    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

Répondre

0

a) Vous ne pouvez pas utiliser AMQP à partir de .NET. Seulement alors vous obtenez l'encodage AMQP. Ajoutez TransportType = Amqp à la chaîne de connexion. Ensuite, utilisez le fournisseur JMS d'Apache Proton-J. B) Si vous utilisez HTTP à partir de Java, essayez de construire le message soit sur un flux auto-sérialisé (constructeur paramétré par flux) ou en utilisant par exemple l'explicitation DataContractSerializer avec le constructeur paramétré (objet, XmlObjectSerializer). Cela vous donnera une charge utile de test XML. Par défaut, nous utilisons NetDataContractSerializer qui génère un codage compact mais est uniquement .NET.

+0

Y a-t-il de la documentation sur l'utilisation de JMS de Proton-J avec Azure et Java? Même après les didacticiels MSDN, je rencontre toujours des erreurs, comme ne pas même trouver les classes des bibliothèques que j'ai importées. –

Questions connexes