#azure-storage #azure-webjobs
#azure-хранилище #azure-webjobs
Вопрос:
У меня есть следующее определение метода:
public static void ProcessPackageRequestMessage(
[QueueTrigger(queues.PACKAGE)] PackageRequestMessage message,
[Blob(blobs.PACKAGE "/{RequestId}_{BlobFile}")] ICloudBlob blob,
[Table(tables.PACKAGE)] CloudTable table,
[Queue(queues.EMAIL)] out PackageEmailMessage packageEmailMessage)
Класс PackageRequestMessage определяется следующим образом:
public class PackageRequestMessage
{
public Guid RequestId { get; set; }
public Guid FactoryId { get; set; }
public string BlobFile { get; set; }
public string SKU { get; set; }
public string EmailAddress { get; set; }
}
В версии 0.2 SDK, когда сообщение PackageRequestMessage в формате JSON было отправлено в очередь, был вызван этот метод, и был найден соответствующий большой двоичный объект на основе параметров в PackageRequestMessage (RequestID и BlobFile), и все работало хорошо.
Теперь, в версии 0.3 SDK, я получаю следующую ошибку:
Система.Исключение InvalidOperationException: System.Исключение InvalidOperationException: параметр привязки исключения ‘blob’ —> System.Исключение InvalidOperationException: нет значения для параметра name ‘RequestID’ в Microsoft.Azure.Jobs .RouteParser.ApplyNamesWorker(String pattern, IDictionary 2 names, Boolean allowUnbound)
2 bindingData) в Microsoft.Azure.Jobs.Host.Blobs.Привязки.Привязка больших двоичных объектов.Привязка (контекст BindingContext) в Microsoft.Azure.Jobs.Host.Runners.TriggerParametersProvider
at Microsoft.Azure.Jobs.RouteParser.ApplyBindingData(String pattern, IReadOnlyDictionary 1.Bind()
2 parameters, TextWriter consoleOutput) в Microsoft.Azure.Jobs.Host.Runners.WebSitesExecuteFunction.Выполняйте без выходных журналов (запрос FunctionInvokeRequest, IReadOnlyDictionary
--- End of inner exception stack trace ---
at Microsoft.Azure.Jobs.Host.Runners.DelayedException.Throw()
at Microsoft.Azure.Jobs.Host.Runners.WebSitesExecuteFunction.ExecuteWithSelfWatch(MethodInfo method, ParameterInfo[] parameterInfos, IReadOnlyDictionary 2 parameters, TextWriter consoleOutput, CloudBlobDescriptor parameterLogger, IDictionary
2 parameterLogCollector) в Microsoft.Azure.Jobs.Host.Runners.WebSitesExecuteFunction.Выполните withlogmessage(запрос FunctionInvokeRequest, контекст RuntimeBindingProviderContext, сообщение FunctionStartedMessage, идентификатор `2 parameterLogCollector) в Microsoft.Azure.Jobs.Host.Runners.WebSitesExecuteFunction.Выполнить (запрос FunctionInvokeRequest, контекст RuntimeBindingProviderContext)
На панели мониторинга само сообщение отображается с действительным идентификатором запроса, присутствующим в JSON, поэтому я не уверен, почему оно пропало без вести.
Ответ №1:
pianomanjh, я смог воспроизвести проблему, которую вы описываете, и я отправил ошибку. Похоже, что этот сбой возникает только в шаблоне имен больших двоичных объектов, привязка параметров не затрагивается.
На данный момент обходным путем является использование string
вместо Guid
для типов свойств.
Комментарии:
1. спасибо, с нетерпением жду возможности получить правильный синтаксический анализ Guid.
Ответ №2:
Только что найдено решение проблемы с большими двоичными объектами i 0.3.0. По сравнению с версией 0.2.0, вы должны определить большой двоичный объект для FileAccess.Напишите, чтобы заставить его работать. Он исправил проблему, которую я описал выше, чтобы иметь возможность передавать поток в большой двоичный объект