Azure служебная шина в формах Xamarin - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь подписаться на Azure очередь служебной шины с помощью форм Xamarin. (Честно говоря, я не уверен, что это вообще возможно.)

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

Редко он работает нормально, и я получаю сообщение (правда, через 1-2 минуты), но он выдает ошибку Microsoft.Azure.ServiceBus.ServiceBusTimeoutException: 'The operation did not complete within the allocated time 00:00:59.9923240 for object dispose.' , когда пытается завершить сообщение на этой строке await queueClient.CompleteAsync(message.SystemProperties.LockToken);

В других случаях он не работает, даже не получая никакого сообщения, и выдает эту ошибку The operation did not complete within the allocated time 00:00:56.2875140 for object session5..

Вот мой код:

    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        static IQueueClient queueClient;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());

            var serviceBusConnectionString = "myConnectionString";
            var queueName = "myqueueName";

            var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler);
            messageHandlerOptions.AutoComplete = false;
            messageHandlerOptions.MaxConcurrentCalls = 1;

            queueClient = new QueueClient(serviceBusConnectionString, queueName);
            queueClient.RegisterMessageHandler(ProcessMessageAsync, messageHandlerOptions);
        }

        private static async Task ProcessMessageAsync(Message message, CancellationToken token)
        {
            var result = Encoding.UTF8.GetString(message.Body);
            await queueClient.CompleteAsync(message.SystemProperties.LockToken);
        }
}

Вопросы:

  1. Можно ли вообще правильно подписаться на очередь служебной шины Azure с помощью Xamarin?
  2. Я что-то упустил?
  3. Есть ли у меня другой способ отправить объект JSON из служебной шины на телефон?

1 Ответ

0 голосов
/ 01 июля 2020

В дополнение к моему комментарию, я обнаружил, что при реализации аналогичного шаблона подписки в приложении Xamarin Signal R работал лучше, и его очень легко и легко реализовать. Это субъективно, но я нашел способ согласования подключения более аккуратным, чем прямое подключение к Azure конечной точке служебной шины

...