Azure.Messaging.EventHubs与WindowsAzure.ServiceBus生成的消息是否有所不同?

问题描述

我有一个生产者将消息写入Azure事件中心,而一个消费者从事件中心读取消息。我将生产者升级到.Net核心,并在此过程中,从使用WindowsAzure.ServiceBus包切换到Azure.Messaging.EventHubs,以将消息写入事件中心。

旧生产者的事件仍在处理中,没有问题。但是,当消费者从新生产者那里收到任何消息时,我发现事件处理器在处理事件之前会抛出异常。

无法将类型为'System.Collections.Generic.List`1 [System.Diagnostics.Activity]'的对象强制转换为类型为'System.Collections.Generic.IEnumerable'1 [System.Diagnostics.Activity]'

此消息未显示在Azure的日志输出中,但确实显示在Application Insights中。 在本地计算机上运行时不会引发异常。

此问题已在官方的Azure Functions EventHub存储库中reported as a bug中发布。在评论中,用户提到该问题是在4.1.0版本中引入的,还原到4.0.1后可以解决此问题。

我恢复到4.0.1,它阻止了引发异常的发生,但是旧消息和新消息之间仍然存在差异。我正在使用Microsoft.Azure.Functions.Extensions进行依赖项注入。每当我收到一批完全旧的邮件时,就没有问题。但是,当我收到包含新消息的批处理时,依赖项注入范围没有配置服务

如果我在本地运行项目,则没有问题。只有当我部署到Azure Functions环境时,我才会遇到这些问题。

到目前为止,我有:

  • 以调试模式而不是发行版部署
  • 创建了一个新的Azure Function应用并重新部署
  • 将发布配置从“取决于框架”更改为“自包含”
  • 已将发布者更新为使用Microsoft.Azure.EventHubs,以便发布者和使用者使用相同的软件包

我试图考虑本地环境和Azure Functions环境之间的差异,以便让我看到行为上的差异。

本地

  • dotnet sdk 3.1.301
  • dotnet运行时3.1.7

天蓝色

  • dotnet sdk 3.1.302
  • dotnet运行时3.1.6

解决方法

根据原始海报的评论共享答案:

将使用者恢复为Microsoft.Azure.WebJobs.Extensions.EventHubs 4.0.1并将发布配置文件更改为<SelfContained>false</SelfContained>已解决了该问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...