#c# #.net #azure-functions
#c# #.net #azure-функции
Вопрос:
Как мне указать привязки вывода, не будучи вынужденным присваивать им значение?
Я могу успешно использовать следующие атрибуты для привязки к 2 расположениям выходных двоичных объектов:
[Blob("processed/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string processedPayload,
[Blob("success/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string success,
Однако, поскольку я ничего не присваиваю этому значению out string success
, я получаю следующее исключение:
Как мне указать привязки вывода, не будучи вынужденным присваивать им значение? — В некоторых случаях я не хочу присваивать какое-либо значение, потому что я просто не хочу записывать в этот большой двоичный объект.
Моя полная функция ниже:
public static class OnSchedulingToMMMQueueTriggered
{
[FunctionName("OnSchedulingToMMMQueueTriggered")]
public static void Run(
[QueueTrigger("httpqueue", Connection = "OnSchedulingToMMMQueueTriggered:SourceQueueConnection")] Payload myQueueItem,
[Blob("processed/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string processedPayload,
[Blob("success/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string success,
ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem.Body}");
processedPayload = "this shoudl be the body of the string";
}
}
Ответ №1:
Если вы используете определенный параметр «out», он потребуется. Если вывод является условным, подумайте о том, чтобы просто создать привязку BlobContainer и использовать ее только в том случае, если вам это нужно. Для этого потребуется, чтобы вы сами создали большой двоичный объект, используя GetBlockBlobReference , но это всего лишь небольшой дополнительный код, чтобы обойти проблему. У меня не было возможности протестировать этот код ниже, поэтому вам, возможно, придется его немного подправить.
public static class OnSchedulingToMMMQueueTriggered
{
[FunctionName("OnSchedulingToMMMQueueTriggered")]
public static void Run(
[QueueTrigger("httpqueue", Connection = "OnSchedulingToMMMQueueTriggered:SourceQueueConnection")] Payload myQueueItem,
[Blob("processed/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string processedPayload,
[Blob("success", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString"))] CloudBlobContainer outputSuccessContainer,
ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem.Body}");
processedPayload = "this shoudl be the body of the string";
if (outputNeeded) {
var blockBlob = outputSuccessContainer.GetBlockBlobReference(CorrelationId ".txt");
await blockBlob.UploadText(processedPayload);
blockBlob.Properties.ContentType = "text/plain";
blockBlob.SetProperties();
}
}
}
Комментарии:
1. я предполагаю, что мне нужно будет выполнить
outputSuccessContainer.CreateIfNotExistsAsync();
сначала перед запускомUploadTextAsync()
?2. Да, если вы не можете быть уверены, что контейнер, на который вы ссылаетесь, уже существует, тогда было бы разумно вызвать
await outputSuccessContainer.CreateIfNotExistsAsync();