2014-04-30 47 views
0

我正在開發一個項目,我們希望通過Azure服務總線(主題)發送消息。在這個例子中,我設置了一個C#控制檯應用程序和一個在它們之間發送和接收消息的Java應用程序。Azure服務總線 - 數據傳輸問題

從C#發送消息時,我在Java中得到一個奇怪格式的字符串,其中包含「schema.microsoft.com/2003/10/serialisation」。更改消息內容類型沒有區別。

從Java發送數據到C#時,我得到一個異常。

發送/接收數據 - 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#堆棧跟蹤

{「發生錯誤反序列化類型System.String對象文件的意外結束之後。元素不關閉:「}

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

回答

0

a)您不能從.NET使用AMQP。只有這樣你才能獲得AMQP編碼。將TransportType = Amqp附加到連接字符串。然後使用Apache Proton-J的JMS提供程序。 b)如果您使用來自Java的HTTP,請嘗試通過自我序列化的流(Stream參數化構造函數)或使用(object,XmlObjectSerializer)參數化構造函數的DataContractSerializer顯式構造消息。這會給你一個XML測試有效載荷。默認情況下,我們使用NetDataContractSerializer,它產生一個緊湊的編碼,但僅限於.NET。

+0

是否有關於使用Proton-J的JMS與Azure和Java的任何文檔?即使遵循MSDN教程,我仍然遇到錯誤,比如甚至沒有從我導入的庫中找到類。 –