【问题标题】:System.Runtime.Serialization.SerializationException while receiving message from Azure Service BusSystem.Runtime.Serialization.SerializationException 从 Azure 服务总线接收消息
【发布时间】:2019-08-13 18:14:44
【问题描述】:

我在 .Net Framework 中有两个独立的应用程序,一个是 .Net Core。我在 .Net 核心控制台应用程序中创建了一个服务总线发送器。它使用最新的Microsoft.Azure.WebjobsMicrosoft.Azure.Webjobs.ServiceBus nuget 包向服务总线发送消息。这是发件人的示例代码。

var message = new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(request)));
var client = new TopicClient(connectionString, TopicName);
await client.SendAsync(message);

用 .NET Framework 4.7 编写的另一个应用程序正在侦听相同的服务总线。它使用 nuget 包 Microsoft.Azure.WebjobsMicrosoft.Azure.Webjobs.ServiceBus 都是 .Net Framework 的 2.3.0 版。下面的示例代码。

public class ListenJob
{
    public static void Listen([ServiceBusTrigger("%TopicName%", "%SubscriptionName%")] BrokeredMessage message)
    {
        var messageBody = message.GetBody<string>();
    }
}

关于从 .Net 核心控制台应用程序发送消息。另一个应用程序能够检测到该消息,但我在侦听器中的行 var messageBody = message.GetBody&lt;string&gt;(); 上收到以下错误。

执行函数时出现异常: 应用 Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常 执行功能时: 应用---> System.Runtime.Serialization.SerializationException :有一个 反序列化 System.String 类型的对象时出错。输入源 格式不正确。 ---> System.Xml.XmlException:输入 源格式不正确。

【问题讨论】:

    标签: c# .net-core azureservicebus brokeredmessage azure-webjobs-triggered


    【解决方案1】:

    在您的发送代码中,消息正文作为流发送(字节按原样发送且未编码)。用于接收旧版 Azure 服务总线库的代码需要从这些字节中反序列化字符串。在编码方面,您应该使用相同的发送和接收方法。 IE。您应该使用message.GetBody&lt;Stream&gt; 获得Stream 并从流中读取字节并在需要时进行反序列化。更多信息here.

    为了能够按原样使用message.GetBody&lt;string&gt; 作为字符串检索,您需要更改发件人的代码以发送 DataContract 二进制序列化字符串。请参阅here 了解如何操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多