【问题标题】:BrokeredMessage send and Message consumer in Azure Function v2Azure Function v2 中的 BrokeredMessage 发送和消息使用者
【发布时间】:2018-09-20 07:03:39
【问题描述】:

我有模拟 azure web 作业,它会定期将 BrokeredMessage 推送到服务总线主题,就像这样

public void Simulate(
            [TimerTrigger("0 */30 * * * *", RunOnStartup = true)]
            TimerInfo timerInfo,
            [ServiceBus("%topic%")]
            out BrokeredMessage message)
        {
            message = new BrokeredMessage(
                new AwesomeContract()
                {

                });
        }

在 azure 函数 V2 中,我尝试使用 Message 类来使用它。

public static void Integrate(
            [ServiceBusTrigger(
                "%topic%",
                "%subscribtion%",
                Connection = "ServiceBusConnection")] Message message,
            TraceWriter log,
            ExecutionContext context)
        {
            try
            {
              message.GetBody<AwesomeContract>();
            }
        }

GetBody&lt;&gt; 我收到DataContractSerialization 异常“反序列化类型的对象时出错。输入源的格式不正确。

BrokeredMessageMessage 在 azure 函数 v1 和 v2 中是否兼容?有什么建议吗?

【问题讨论】:

    标签: c# azure azure-functions azureservicebus


    【解决方案1】:

    BrokeredMessage 是库 WindowsAzure.ServiceBus 中的消息对象,其中Message 是库 Microsoft.Azure.ServiceBus 中的对象。

    即使这些库之间的对象类型不同,将消息正文作为Stream 发送将有助于在读取正文时克服异常。

    message = new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes([message_body]));
    

    如上构造消息会有所帮助。

    【讨论】:

    • 我无法让它工作。同样的错误
    【解决方案2】:

    我在尝试为类似问题寻求帮助时偶然发现了以下互操作类:Microsoft.Azure.ServiceBus.Extensions.MessageInterOpExtensions.cs 注意:文档中的示例都假定您可以访问消息接收器,而您很可能无法访问位于 Azure 函数中的消息接收器。

    根据那里的评论,您的特定配置应该可以工作,但显然那里有一些未知错误 - 您可能需要推出自己的扩展程序,或者看看您是否可以使用 message.Body byte[] 属性

    自定义对象的 BrokeredMessage 构造函数表示它正在使用带有二进制 XmlDictionaryWriter 的 DataContractSerializer,因此如果我们知道 Content-Type 是什么,我们或许能够看到 DataContractSerializer 失败的原因。

    如果一切都失败了,或者直到这个明显的错误得到修复,你可能需要看看你是否可以使用 Body 属性中的字节数组并滚动你自己的序列化器/扩展方法。

    【讨论】:

    • Microsoft.Azure.ServiceBus 包现在被标记为已弃用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多