Окончательный вывод моей предварительно скомпилированной функции Azure на C # - запись в хранилище больших двоичных объектов в виде файла JSON. Я неправильно пишу в хранилище BLOB-объектов? Я ударил точки останова, установленные в фигурных скобках в конце функции, и похоже, что она выходит из функции. Примерно через 20 секунд я получаю исключение:
Исключительная ситуация при выполнении функции: ServiceBusTriggeredProcessAccepted. Microsoft.Azure.WebJobs.Host: ошибка при обработке параметра outboundStringForBlobStorage после возврата функции :. Microsoft.WindowsAzure.Storage: удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера.
Функция Azure является событием, вызванным служебной шиной. После сбоя обработки автопостановка элемента в очереди служебной шины выполняется автоматически и повторяется до 10 раз, прежде чем он перемещается в очередь недоставленных сообщений. Следует отметить, что объекты достаточно велики по размеру, поэтому обычные очереди слишком малы для них.
public class SomeObject
{
//15 Properties all string and boolean
public string Attachment{ get; set;}
public string AnotherProperty{ get; set;}
public bool IsConditionMet { get; set; }
//Maybe these aren't needed now since it's blob storage but it's part of the object currently
public string PartitionKey { get; set; }
public string RowKey { get; set; }
}
[FunctionName("ServiceBusTriggeredProcessAccepted")]
public static void Run([ServiceBusTrigger("accepted")]
SomeObject someObject,
TraceWriter log,
[Blob("accepted-attachments/{Attachment}", FileAccess.Read)] Byte[] blobContent
, [Blob("accepted-sent/{rand-guid}.json")] out string outboundStringForBlobStorage
)
{
someObject.PartitionKey = "email";
someObject.RowKey = Guid.NewGuid().ToString();
//Business Logic to execute here
SomeService.SomeFunctionToSendBlobFile(someObject, blobContent)
outboundStringForBlobStorage = JsonConvert.SerializeObject(someObject);
}
Я использую:
Пакет SDK NuGet для функций Azure 1.0.21
Microsoft.Azure.Webjobs 2.2.0
WindowsAzure.ServiceBus 5.0.0
DotNetFramework 4.6.1
Эмулятор хранилища Windows Azure 5.8.0.0
Runtime Version = 1.0.11702.0
Сериализация должна быть как-то продезинфицирована? В прошлом мне не приходилось проводить санитарную обработку, но данные в этом объекте изменились, и именно тогда начались проблемы. Я ожидаю, что файл будет немедленно записан в хранилище BLOB-объектов или немедленно выдаст исключение, а не через 20 секунд после выхода из функции.