【问题标题】:Azure Service Bus - Data Transmission IssueAzure 服务总线 - 数据传输问题
【发布时间】:2014-04-30 22:07:41
【问题描述】:

我正在开展一个项目,我们希望通过 Azure 服务总线(主题)发送消息。在本例中,我设置了一个 C# 控制台应用程序和一个在它们之间发送和接收消息的 Java 应用程序。

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

【问题讨论】:

    标签: c# java azure


    【解决方案1】:

    a) 您不得使用 .NET 中的 AMQP。只有这样你才能获得 AMQP 编码。将 TransportType=Amqp 附加到连接字符串。然后使用 Apache Proton-J 的 JMS 提供程序。

    b) 如果您使用 Java 中的 HTTP,请尝试通过自序列化流(Stream 参数化构造函数)构造消息,或者使用例如带有 (object, XmlObjectSerializer) 参数化构造函数的 DataContractSerializer 显式构造消息。这将为您提供 XML 测试有效负载。默认情况下,我们使用 NetDataContractSerializer,它产生紧凑的编码,但仅适用于 .NET。

    【讨论】:

    • 有没有关于在 Azure 和 Java 中使用 Proton-J 的 JMS 的文档?即使遵循 MSDN 教程,我仍然会遇到错误,例如甚至无法从我导入的库中找到类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多