Мой сценарий: веб-сайт, размещенный в облаке, где каждый экземпляр создает подписку на тему шины обслуживания для себя, чтобы прослушивать сообщения.
Мой вопрос: как я программно создаю подписки?
...
Проблема: я привык использовать более старую библиотеку WindowsAzure. Теперь я использую.NET Standard, который не поддерживает старую библиотеку
Решение. Используйте пакет Microsoft.Azure.ServiceBus NuGet.
...
Проблема: он не поддерживает функции управления (например, создание подписки)
Решение. Также используйте библиотеку NuGet Microsoft.Azure.Management.ServiceBus
...
Проблема. Он не поддерживает использование строки подключения или ключей, предоставленных вам Azure Portal
Решение: https://github.com/Azure-Samples/service-bus-dotnet-management дает общую схему программирования.
...
Проблема: WTF - это {tenantId}, о котором он говорит?
Решение: Хорошо, что это найдено в разделе "Azure Active Directory" → "Свойства" и с осторожностью помечено как "Идентификатор каталога" вместо tenantId, как и следовало ожидать
...
Проблема: WTF - это {clientId} и {clientSecret}?
Решение: Еще проще. Из этой информации очевидно, что вы должны:
- Перейдите в "Azure Active Directory"
- Нажмите "Регистрация приложений"
- Нажмите "Создать новую регистрацию приложения"
- Назовите его, оставьте его как "Веб-приложение /API" и дайте ему знак по URL-адресу почти всего, что вы хотите, потому что это фактически не имеет значения, хотя оно обязательно
- Запишите "Идентификатор приложения", который, как всем известно, на самом деле означает {clientId}
- В новом приложении нажмите "Настройки",
- Нажмите "Ключи"
- Введите какое-то случайное описание в разделе "Пароли" и нажмите "Сохранить",
- Сохраните "Значение" там, потому что он тайно {clientSecret} (как умный! Cus it secret !!)
- Вернитесь в "Service Bus"
- Выберите "Контроль доступа (IAM)"
- Выберите роль, как Owner/Contributor
- Введите имя своего приложения и сохраните
...
Итак, работает ли первый шаг примера? AcquireTokenAsync возвращает токен доступа! YAYYYYYYYYYYYYY
result.AccessToken - это "токен", упомянутый на шаге 2, похоже.
Шаг 2, 3... нет проблем... на шаге 4. За исключением использования sbClient.Subscriptions.CreateOrUpdate вместо этого
{resourceGroupName} кажется достаточно простым - скопируйте с "Группы ресурсов" на портале
...
Проблема: что такое {namespaceName}?
Это имя сервисной шины? например {name}.servicebus.windows.net? Или это пространство имен, как {name.servicebus.windows.net}? Или он включает в себя схему типа {sb://name.servicebus.windows.net}??
...
Проблема. Независимо от того, что я здесь делаю, я заканчиваю тем, что "операция вернула недопустимый код состояния" NotFound "на вызове CreateOrUpdate.
И это, где я застрял. Где я ошибся?
И на сиднейте, snark отражает мое разочарование - мне действительно кажется, что мне нужно изучить большой стек технологии Azure, о котором я действительно не хочу ничего знать, просто для того, чтобы сделать что-то, что "должно быть простым" ". Как будто меня всасывают кроличью нору.
[РЕДАКТИРОВАТЬ №1] - "SubscriptionId" оказывается идентификатором подписки AZURE, найденным в разделе биллинга портала, не ссылаясь на подписку на служебную шину.
[EDIT # 2] - "namespaceName" не включает.servicebus.windows.net - просто само название
И с этими изменениями, после бесчисленных часов исследований, IT WORKS