Контекст : в документации MSDN об очередях служебной шины и сеансах сообщений говорится: «Когда объект MessageSession принят, и пока он удерживается клиентом, этот клиент имеет эксклюзивную блокировку всех сообщений с SessionId этого сеанса».которые существуют в очереди или подписке, а также во всех сообщениях с этим SessionId, которые все еще поступают во время удержания сеанса.
Блокировка снимается при вызове Close или CloseAsync, или когда истекает срок блокировкив случаях, когда приложение не может выполнить операцию закрытия"
Моя интерпретация : я интерпретирую вышеизложенное, чтобы означать, что MessageSession заблокирован в сеансе очередиИменно поэтому другие клиенты не могут вызвать AcceptMessageSessionAsync с тем же SessionID - они получат SessionCannotBeLockedException.
Вопрос : Предполагая, что моя интерпретация точна, что контролирует , когда блокировка MessageSession истекает в тех случаях, когда приложениене можете выполнить операцию закрытия?Я знаю, что LockDuration в очереди не не выполняет это, потому что я попробовал это.
Пример кода :
var sessionClient = new SessionClient(ServiceBusConnectionString, QueueName, ReceiveMode.PeekLock);
var session = await sessionClient.AcceptMessageSessionAsync("0");
// ReceiveAsync seems to wait for 60 seconds,
// even if the LockDuration on the queue is 30 seconds.
var message = await session.ReceiveAsync();
// Once ReceiveAsync returns, I'd expect to receive a SessionLockLost
// exception at some point since the lock should expire, according to MSDN
Console.ReadKey();