带有eventData对象的EventHubTrigger C#无法正常工作

时间:2018-10-18 10:18:30

标签: c# azure azure-functions azure-eventhub

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

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

https://docs.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?) 

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

当然,它必须与程序集有关,但是该文章指出,在在线门户编辑器中工作时,没有其他步骤可以做。

人先感谢

费利克斯

PS:

host.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 个答案:

答案 0 :(得分:1)

好吧,该示例适用于功能1.x。在2.x普遍可用之后,默认情况下,我们创建的函数在〜2运行时默认运行,如我们在host.json中看到的User.updateMany({}, { $pull: { customer: { _id: custid } } }, (err) => { ...

尝试下面的代码,元数据存储在"version":"2.0"的{​​{1}}中。

SystemProperties

还要注意,在C#中,我们需要对字符串使用双引号Microsoft.Azure.EventHubs.EventData,请参见代码中的#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}"); }