FormatExcpetion от узла Azure Webjobs

Поймите, это пре-релиз :)

При попытке использовать QueueInput в веб-заданиях Azure и добавлении шестнадцатеричной строки хэша в сообщение.

public System.Guid GetOwner(CloudQueueMessage msg) 

Глядя на ilspy, кажется, что он пытается разобрать $AzureJobsParentId, а анализатор JSON выдает исключение, которое я могу обойти, закодировав свой хеш во фрагменте JSON, но я бы предпочел этого не делать. Это известная ошибка?


person Paul Miller    schedule 11.02.2014    source источник
comment
Не могли бы вы поделиться подписью вашей должностной функции? Какие типы параметров вы связываете?   -  person Victor Hurdugaci    schedule 11.02.2014
comment
У меня возникает точно такая же проблема. Каждые 2 минуты задания перезапускаются из-за этой ошибки, даже если в очередь не добавлено ни одного сообщения. Я тщательно следил за каждым шагом, чтобы создать веб-джоб, это меня действительно озадачило.   -  person PLT    schedule 13.03.2014


Ответы (1)


[QueueInput] обычно использует JSON.Net для десериализации полезных данных сообщения очереди в тип параметра. Поэтому, если сообщение очереди не является JSON, вы получите исключение (которое затем следует обернуть чем-то более дружественным).

Вы также можете обойти это, используя строковый параметр с [QueueInput], например:

    public static void Function([QueueInput] string testqueue)
    {
    }

Для строкового параметра пакет SDK предоставит вам QueueMessage.AsString напрямую, без какой-либо сериализации JSON.

К вашему сведению, $AzureJobsParentId — это специальное поле, помещаемое в полезные данные json, которое определяет, какой экземпляр функции поставил сообщение в очередь. Это используется, когда вы ставите сообщение в очередь с помощью [QueueOutput]. Затем вы можете просмотреть эту взаимосвязь на панели инструментов SDK (http://blogs.msdn.com/b/jmstall/archive/2014/01/27/getting-a-dashboard-for-local-development-with-the-webjobs-sdk.aspx)

person Mike S    schedule 11.02.2014
comment
На самом деле я использовал строковый параметр (точно лгал ваш код), так что это все еще может быть ошибкой в ​​​​альфе, но остальная часть вашей информации хороша. - person Paul Miller; 12.02.2014
comment
Исключение синтаксического анализатора должно быть перехвачено в SDK. Он возвращается к вашему коду? Другими словами, здесь беспокоит то, что sdk не должен генерировать исключения внутри себя. - person Mike S; 12.02.2014
comment
Единственное, чем я отличаюсь от вашего примера, Майк, это то, что я использую строковое сообщение [QueueInput(testqueue)]. Это может повлиять? - person PLT; 13.03.2014