Я пытаюсь подписаться на 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);
}
}
Вопросы:
- Можно ли вообще правильно подписаться на очередь служебной шины Azure с помощью Xamarin?
- Я что-то упустил?
- Есть ли у меня другой способ отправить объект JSON из служебной шины на телефон?