c# - 带有 eventData 对象的 EventHubTrigger C# 不起作用

标签 c# azure azure-functions azure-eventhub

按照以下文章中的说明进行操作后

https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure-function

https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs

我创建了一个 EventHubTrigger,如下所示:

using System;

public static void Run(string myEventHubMessage, ILogger log)
{
log.LogInformation($'C# Event Hub trigger function processed a message: {myEventHubMessage}');
}

这确实没有任何问题,但由于我确实需要其他元信息,因此我将代码更改为以下内容(在第二篇链接文章中描述):

#r 'Microsoft.ServiceBus'
using System.Text;
using System;
using Microsoft.ServiceBus.Messaging;

public static void Run(EventData myEventHubMessage, ILogger log)
{
log.LogInformation($'EnqueuedTimeUtc={myEventHubMessage.EnqueuedTimeUtc}');
log.LogInformation($'SequenceNumber={myEventHubMessage.SequenceNumber}');
log.LogInformation($'Offset={myEventHubMessage.Offset}');
} 

但是此代码会导致以下错误消息(顺便说一句,我还使用已弃用的 TraceWriter 而不是 ILogger 来完全遵循文章,但这会导致相同的错误)

2018-10-11T14:22:24.814 [Error] run.csx(1,1): error CS0006: Metadata file 'Microsoft.ServiceBus' could not be found 
2018-10-11T14:22:24.903 [Error] run.csx(4,17): error CS0234: The type or namespace name 'ServiceBus' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) 

现在我的问题是,有谁知道如何才能运行这一小段代码吗?

当然,它必须与程序集有关,但文章指出,在在线门户编辑器中工作时,无需执行进一步的步骤。

提前致谢

菲利克斯

附注:

主机.json:

{

  "version": "2.0"

}

extensions.csproj 的内容是:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>

    <TargetFramework>netstandard2.0</TargetFramework>

    <WarningsAsErrors />

  </PropertyGroup>

  <ItemGroup>

    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.EventHubs" Version="3.0.0" />

    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="3.0.0" />

    <PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.0.1" />

  </ItemGroup>

</Project>

最佳答案

嗯,该示例适用于函数 1.x。 2.x 普遍可用后,我们创建的函数默认在 ~2 运行时运行,正如我们在 host.json 中看到的 "version":"2.0"

尝试一下下面的代码,元数据存储在 Microsoft.Azure.EventHubs.EventDataSystemProperties 中。

#r "../bin/Microsoft.Azure.EventHubs.dll"

using System;
using Microsoft.Azure.EventHubs;

public static void Run(EventData myEventHubMessage, ILogger log)
{
    log.LogInformation($"EnqueuedTimeUtc={myEventHubMessage.SystemProperties.EnqueuedTimeUtc}");
    log.LogInformation($"SequenceNumber={myEventHubMessage.SystemProperties.SequenceNumber}");
    log.LogInformation($"Offset={myEventHubMessage.SystemProperties.Offset}");
}

另请注意,我们需要在 C# 中对字符串使用双引号 ",请参阅代码中的 '

关于c# - 带有 eventData 对象的 EventHubTrigger C# 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52871846/

相关文章:

c# - ASP.NET MVC 路由不适用于 .html 扩展

azure - SPARK:在将Azure Blob存储与Spark群集一起使用时,如何访问AzureFileSystemInstrumentation?

azure - 控制队列轮询时间

azure - 使用 CosmosDB 集合中筛选的文档类型触发 Azure Function

azure - 可以在 ARM 模板中获取 Azure Function 系统 key 吗?

c# - 文本对象 Unity 上的 onclick 事件

c# - xUnit 支持 "same tests, different setups"吗?或者我如何编写在本地为开发人员运行并在管道中测试部署的测试?

c# - 当类型仅在执行时已知时调用泛型函数

c# - 优化 RIA 服务的 Azure 存储查询

azure - 在 Azure 中,读者访问资源的真正含义是什么?