EventHubTrigger C # с объектом eventData не работает - PullRequest
0 голосов
/ 18 октября 2018

после того, как я следовал инструкциям в следующих статьях

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 голосов
/ 19 октября 2018

Хорошо, образец для функции 1.х.После того как версия 2.x станет общедоступной, функция, которую мы создаем, по умолчанию находится в режиме выполнения ~ 2, как мы видим "version":"2.0" в файле host.json.

Попробуйте код ниже, метаданные хранятся в SystemProperties из 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}");
}

Также обратите внимание, что нам нужно использовать двойные кавычки " для строки в C #, см. ' в вашем коде.

...