Значение не может быть нулевым.Имя параметра: messageId - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь обновить содержимое очереди Azure, используя следующий код:

queue.UpdateMessage(new CloudQueueMessage(timestamp + "|" + encodedContent),TimeSpan.FromMinutes(0),MessageUpdateFields.Content, null, null);

Однако я продолжаю получать следующую ошибку «Значение не может быть пустым. Имя параметра: messageId».Пробовал поиск по интернету, но не смог найти никого, кто имел эту проблему.

Примечание. Мне необходимо использовать очередь Azure.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Обновление:

Вы можете передать идентификатор сообщения и PopReceipt своему методу:

        static void Main(string[] args)
        {

           CloudStorageAccount storageAccount = CloudStorageAccount.Parse(                
                     CloudConfigurationManager.GetSetting("StorageConnectionString"));

           // Create the queue client.
           CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

           // Retrieve a reference to a container.
           CloudQueue queue = queueClient.GetQueueReference("myqueue0905");

           //Retrieve the cached approximate message count.
           queue.FetchAttributes();
           int? cachedMessageCount = queue.ApproximateMessageCount;

           //get the message id and PopReceipt, or you can pass them from your api call.
           string _id = "";
           string _popreceipt = "";

           if (cachedMessageCount != null)
           {

            foreach (CloudQueueMessage message in queue.GetMessages(cachedMessageCount.Value, TimeSpan.FromMinutes(3)))
            {
                 _id = message.Id;
                 _popreceipt = message.PopReceipt;

                 Console.WriteLine("the id is:" + _id);
                 Console.WriteLine("the pop receipt is:" + _popreceipt);

             }

            }

          //update queue message by using message id and PopReceipt
          var msg = new CloudQueueMessage(_id, _popreceipt);
          msg.SetMessageContent("a test messge 123456");
          queue.UpdateMessage(msg, TimeSpan.FromSeconds(120.0),
                            MessageUpdateFields.Content | MessageUpdateFields.Visibility);            

          Console.WriteLine("complete update");
          Console.ReadLine();
       }

В вашем случае, предположим, что вы уже знаете идентификатор сообщения, затем вы можете обновить свое сообщение с помощьюИдентификатор.

Нам нужно перебрать все сообщения очереди, используя идентификатор сообщения, чтобы выбрать правильное сообщение, которое вы хотите обновить.

Код, подобный приведенному ниже:

using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Queue;
using System;

namespace ConsoleApp11
{
    class Program
    {
        static void Main(string[] args)
        {
            //assume you know the message id
            string message_id = "3798f6b6-1541-4421-b8de-79a8294edf49";

            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

            // Create the queue client.
            CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

            // Retrieve a reference to a container.
            CloudQueue queue = queueClient.GetQueueReference("myqueue0905");

            //Retrieve the cached approximate message count.
            queue.FetchAttributes();
            int? cachedMessageCount = queue.ApproximateMessageCount;

            //if the queue is not null
            if (cachedMessageCount != null)
            {

                foreach (CloudQueueMessage message in queue.GetMessages(cachedMessageCount.Value))
                {
                    if (message.Id == message_id)
                    {
                        message.SetMessageContent("test updated content again");
                        queue.UpdateMessage(message, TimeSpan.FromSeconds(5.0),
                            MessageUpdateFields.Content | MessageUpdateFields.Visibility);
                    }
                }

            }

            Console.ReadLine();
        }

    }
}
0 голосов
/ 26 октября 2018

Чтобы обновить сообщение, вам нужно сначала получить конкретное сообщение, а не создавать новое.

Для более подробной информации Изменить содержимое сообщения в очереди

...