Мой 'myQueueItem' в моей функции Azure выдает нулевое значение при срабатывании - PullRequest
0 голосов
/ 26 августа 2018

Я передаю сообщения в свою очередь служебной шины Azure следующим образом, где значение «MessageId» представляет собой строку числа ex. '345'. Я вижу его в очереди на панели мониторинга портала Azure, и когда я просматриваю сообщение в Service Bus Explorer, я вижу идентификатор сообщения как eventId, который я передаю.

 Message message = new Message
 {
     MessageId = eventId.ToString(), // passing it a value of '123'
     ScheduledEnqueueTimeUtc = enqueuedTime
 };

 var sendCodeSequence = await queueClient.ScheduleMessageAsync(message, new DateTimeOffset(enqueuedTime));

Но когда моя функция запускается, я получаю исключение, сообщающее, что myQueueItem из функции имеет значение 0 или null, в зависимости от того, какую функцию я вызываю.

Вот первая пара строк кода для одной из функций, которая дает мне эту проблему. Событие всегда равно нулю и выдает исключение, потому что myQueueItem всегда null или 0.

Раньше у меня это работало, но теперь я думаю, что были внесены изменения и выбрасывались исключения при каждом срабатывании моих функций!

Вопрос - не является ли myQueueItem сообщением, которое я передаю, когда создаю и помещаю сообщение в очередь?

[FunctionName("CancelEvent")]
    public static void Run([ServiceBusTrigger("canceleventqueue", AccessRights.Manage, Connection = "events2017_RootManageSharedAccessKey_SERVICEBUS")]string myQueueItem, TraceWriter log, ExecutionContext context)
    {
        try
        {
            log.Info($"Cancel event started id: {myQueueItem}");

            var eventId = Convert.ToInt32(myQueueItem);

            using (var dbContext = new EventContext(myDatabaseConnectionString))
            {
                var event = dbContext.Events.Where(i => i.EventId == eventId).FirstOrDefault();

                if (Event == null)
                    throw new Exception("no event with this id: " + myQueueItem);

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Я решил это, передав 'string messageId' в качестве параметра функции.Я думаю, что сообщения Azure используются иначе, чем BrokeredMessages.

0 голосов
/ 26 августа 2018

myQueueItem - это само сообщение.Строка myQueueItem на самом деле бесполезна, если вы использовали брокерское сообщение или сообщение служебной шины и добавили другую информацию, которую хотите использовать в функции.Вам следует заменить string myQueueItem на Microsoft.Azure.ServiceBus.Message myQueueItem.Также просмотрите реализацию в этом посте для получения другой полезной информации о сериализации / десериализации сообщения при необходимости: Сериализация / десериализация сообщений Azure ServiceBus

...