问题描述
我有一个生产者将消息写入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>
已解决了该问题。