azure - 尝试通过主题/订阅接收 Azure 服务总线消息时出现序列化异常

标签 azure azureservicebus azure-sdk-.net azure-servicebus-queues

当我尝试解析订阅 Azure 服务总线主题时收到的消息时,收到序列化异常。有人看到我缺少什么吗?我正在使用 Microsoft.ServiceBus.Samples.Messaging 作为 Silverlight 代码。

我有一个包含以下代码的网络服务:

public void PushCommand(Command command, int posLocationId)
{
    var topicName = "topicName";
    var topicClient = TopicClient.CreateFromConnectionString(ConnectionString, topicName);

    try
    {
         var message = new BrokeredMessage("test");
         topicClient.Send(message);
    }
    ...
}

我有一个包含以下代码的 SilverLightClient:

private void OnReceiveMessageCompleted(IAsyncResult result)
{
     var subscriptionClient = (SubscriptionClient)result.AsyncState;
     try
     {
         var message = subscriptionClient.EndReceive(result);

         if (message != null)
         {
             String s = message.GetBody<string>();
         }

         // prep for next message
         subscriptionClient.BeginReceive(this.OnReceiveMessageCompleted, subscriptionClient);

     }
     catch (Exception e)
     {
        //unknown error
     }
}

捕获了 SerializationException 反序列化 System.String 类型的对象时出错。根级别的数据无效。第 1 行,位置 1。

堆栈跟踪:

at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName)
at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(XmlDictionaryReader reader)
at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(Stream stream)
at Microsoft.Samples.ServiceBus.Messaging.BrokeredMessage.GetBody[T]()
at Common.SubscriptionManager.OnReceiveMessageCompleted(IAsyncResult result)

最佳答案

问题不在于您的 SL 代码,而在于您的发件人代码。发送消息时,默认实现使用二进制消息序列化器,但 SL 实现使用 DataContractSerializer,它依赖于 XML 格式的消息。要解决此问题,您发送的消息需要执行以下操作:

DataContractSerializer ser = new DataContractSerializer(typeof(string));
queueClient.Send(new BrokeredMessage("test", ser));

在服务总线上,正文内容几乎是一包字节——发送者和接收者需要就如何编码/解码这些内容达成一致。

关于azure - 尝试通过主题/订阅接收 Azure 服务总线消息时出现序列化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16283307/

相关文章:

java - 将 war 映射到根 - JAVA Azure Web 角色

azure - 如何以编程方式创建 Azure AD B2C 资源?

git - 使用 azure blob 存储进行 git lfs

Azure 事件中心 SAS token 不会过期

visual-studio - "Build deployment package"不见了! Azure SDK 的错?

azure - 通过 ARM 模板将节点池添加到现有 AKS 集群

azure - azure adf web Activity Rest api中执行输出的长度超出限制(当前约为1M)

c# - 当 Service Bus Explorer 添加垃圾时如何读取消息正文 C# 重新提交消息时 http ://schemas. microsoft.com/2003/10/Serialization -

.net - Azure 服务总线队列接收器是否有超时限制?

.net-core - 如何将 EventProcessorClient 配置为仅读取特定分区键(而不是分区 ID)的事件?