Сообщения уведомлений Azure никогда не попадают в очередь уведомлений с помощью служб мультимедиа.

В настоящее время я добавляю видеосервисы в приложение, используя мультимедийные сервисы Azure и службу хранилища Azure с веб-API C#. Процесс загрузки, кажется, работает правильно, и я вижу, где задание успешно завершается от администратора. приставка.

Однако, если я запускаю приложение под отладчиком, я вижу, где сообщения добавляются в очередь для фактической обработки видео, но я никогда не получаю никаких сообщений в очереди уведомлений. Я продолжаю просматривать код, но не вижу ничего, что могло бы показаться неправильным. Кто-нибудь сталкивался с этим раньше или знает, в чем может быть проблема? В настоящее время я тестирую в режиме отладки с моими строками подключения, установленными на UseDevelopmentStorage=true.

// create a NotificationEndPoint queue based on the endPointAddress
string endPointAddress = "queuename";

// setup the notificationEndPoint based on the queue and endPointAddress
this.notificationEndPoint = this._context.NotificationEndPoints.Create(Guid.NewGuid().ToString(), NotificationEndPointType.AzureQueue, endPointAddress);

if (this.notificationEndPoint != null)
{
     job.JobNotificationSubscriptions.AddNew(NotificationJobState.All, this.notificationEndPoint);
     await job.SubmitAsync().ConfigureAwait(false);
      .
      .
      .



Here is the message object:
public class VideoJobNotificationMessage : AzureQueueMessage
{
// MessageVersion is used for version control. 
public string MessageVersion { get; set; }

// Type of the event. Valid values are 
// JobStateChange and NotificationEndpointRegistration.
public string EventType { get; set; }

// ETag is used to help the customer detect if 
// the message is a duplicate of another message previously sent.
public string ETag { get; set; }

// Time of occurrence of the event.
public string TimeStamp { get; set; }

// Collection of values specific to the event.
public IDictionary<string, object> Properties { get; set; }
}

person user1790300    schedule 11.05.2015    source источник


Ответы (1)


Просто запустите проверочный тест ShouldReceiveNotificationsForCompeletedJob из https://github.com/Azure/azure-sdk-for-media-services/blob/dev/test/net/Scenario/JobTests.cs, который проверяет рабочий процесс уведомлений. Тестирование проходит в дата-центре US WEST.

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

Вставка кода, связанного с созданием очереди:

 string endPointAddress = Guid.NewGuid().ToString();
                CloudQueueClient client = CloudStorageAccount.Parse(WindowsAzureMediaServicesTestConfiguration.ClientStorageConnectionString).CreateCloudQueueClient();
                CloudQueue queue = client.GetQueueReference(endPointAddress);
                queue.CreateIfNotExists();
                string endPointName = Guid.NewGuid().ToString();
                INotificationEndPoint notificationEndPoint = _mediaContext.NotificationEndPoints.Create(endPointName, NotificationEndPointType.AzureQueue, endPointAddress);
                Assert.IsNotNull(notificationEndPoint);
 job.JobNotificationSubscriptions.AddNew(NotificationJobState.All, notificationEndPoint);

.......

            job.Submit();

            Assert.IsTrue(job.JobNotificationSubscriptions.Count > 0);

            WaitForJob(job.Id, JobState.Finished, VerifyAllTasksFinished);
            Thread.Sleep((int)TimeSpan.FromMinutes(5).TotalMilliseconds);

            Assert.IsNotNull(queue);
            Assert.IsTrue(queue.Exists());
            IEnumerable<CloudQueueMessage> messages = queue.GetMessages(10);
            Assert.IsTrue(messages.Any());
            Assert.AreEqual(4, messages.Count(), "Expecting to have 4 notifications messages");
person George Trifonov    schedule 11.05.2015
comment
Должен ли я добавить этот файл и связанные файлы в мой тестовый проект? - person user1790300; 12.05.2015
comment
Вы можете просто клонировать репозиторий. Добавьте сведения об учетной записи мультимедиа и конечную точку очереди в app.config и отладьте ее. Или вы можете добавить проверку в свой код, чтобы убедиться, что вы создаете очередь, если она не существует, и добавить несколько минут сна, прежде чем проверять, что уведомление было получено. Как я уже упоминал, вы не должны ожидать мгновенного уведомления после завершения работы, уведомление может начать появляться через несколько минут. Статья с описанием функции уведомлений — azure. microsoft.com/en-us/documentation/articles/ - person George Trifonov; 12.05.2015
comment
В этой строке по-прежнему не работает Assert.IsTrue(messages.Any()). Похоже, что сообщения не попадают в очередь. Я даже поставил задержку Thread.Sleep на 10 минут, все равно сообщений в очереди нет. Что может быть причиной этого? - person user1790300; 12.05.2015
comment
Когда я захожу в админ. сайт, в разделе контента я вижу загруженный контент, но URL-адрес публикации установлен как не опубликованный. Может ли это быть проблемой, и если да, то что должно произойти программно, чтобы опубликовать видео? - person user1790300; 12.05.2015
comment
Можете ли вы выполнить отладку с помощью теста, загруженного на github? Если да - видите ли вы там сообщения? Сообщения создаются во время задания кодирования, и публикация не должна влиять на уведомления. - person George Trifonov; 12.05.2015
comment
Я загрузил код с github и могу запустить его из теста ShouldReceiveNotificationsForCompeletedJob, я не вижу никаких сообщений об ошибках в окне вывода, он просто терпит неудачу, когда доходит до этой строки: IEnumerable‹CloudQueueMessage› messages = queue.GetMessages( 10); Assert.IsTrue(сообщения.Any()); - person user1790300; 12.05.2015
comment
Свяжитесь со мной через твиттер-сообщение twitter.com/GEOTRIF, и мы посмотрим. - person George Trifonov; 12.05.2015