Задайте заголовок в EventHubOutput в Azure FunctionMiddleware C#C#

Место общения программистов C#
Ответить
Anonymous
 Задайте заголовок в EventHubOutput в Azure FunctionMiddleware C#

Сообщение Anonymous »

Я хочу установить идентификатор корреляции в IFunctionsWorkerMiddleware для выходных данных триггера функции Azure, использующего EventHubOutput. Кажется, я не могу найти способ получить доступ к данным событий, которые отправляются обратно при использовании EventHubOutput.
Я пытался манипулировать InvokeResult, но то есть любой объект, возвращаемый триггером (без доступа к метаданным).
Я также пытался вернуть объект EventData из триггера, но он просто сериализуется в строку "Azure.Messaging.EventHubs.EventData" в теме EH, а не в реальном объекте EventData
Есть идеи, как установить заголовки/свойства в привязках EventHubOutput в Промежуточное программное обеспечение функции?
Использование InfectionResult
[Function("MyFunction")]
[EventHubOutput("output", Connection = "output-connection")]
public async Task Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req)
{
return "my payload";
}

public class CorrelationMiddleware : IFunctionsWorkerMiddleware
{
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
await next(context);

SetOutputCorrelation(context);
}

private void SetOutputCorrelation(FunctionContext context)
{
var correlationId = Guid.NewGuid().ToString();

var result = context.GetInvocationResult();

// result is just the string returned from trigger - no access to metadata
}
}

Возврат данных о событии
[Function("MyFunction")]
[EventHubOutput("output", Connection = "output-connection")]
public async Task Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req)
{
var payload = "my payload";
var eventData = new EventData(Encoding.UTF8.GetBytes(payload));
return eventData;
}

public class CorrelationMiddleware : IFunctionsWorkerMiddleware
{
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
await next(context);

SetOutputCorrelation(context);
}

private void SetOutputCorrelation(FunctionContext context)
{
var correlationId = Guid.NewGuid().ToString();

var result = context.GetInvocationResult();

if (result.Value is EventData eventData)
{
eventData.Properties["correlation-id"] = correlationId;
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... re-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»