Подключиться к теме с помощью MSI приложения-функции

Можно ли подключиться к теме служебной шины с помощью MSI приложения-функции службы приложений? Любая документация или примеры для выполнения этого с помощью шаблона ARM или.NET SDK (C#) были бы полезны.

1 ответ

Решение

См. Пример ниже:

пространства имен:

using Microsoft.Azure.ServiceBus;

using Microsoft.Azure.ServiceBus.Primitives;

Добавление сервисов в контейнер:

services.Configure<ServiceBusConfiguration>(Configuration.GetSection("ServiceBus"));

Основная реализация:

public class ServiceBusConfiguration
{
    public string Namespace { get; set; }
    public string Topic { get; set; }
}

public class HomeController : Controller
{
    public ServiceBusConfiguration Config { get; }

    public HomeController(IOptions<ServiceBusConfiguration> serviceBusConfig)
    {
       Config = serviceBusConfig.Value;
    }

    [HttpPost]
    public async Task<ActionResult> Send(ServiceBusMessageData messageInfo)
    {
      if (string.IsNullOrEmpty(messageInfo.MessageToSend))
      {
        return RedirectToAction("Index");
      }

      var tokenProvider = TokenProvider.CreateManagedServiceIdentityTokenProvider();
      var sendClient = new TopicClient($"sb://{Config.Namespace}.servicebus.windows.net/", Config.Topic, tokenProvider);
      await sendClient.SendAsync(new Message(Encoding.UTF8.GetBytes(messageInfo.MessageToSend)));
      await sendClient.CloseAsync();

      return RedirectToAction("Index");
   }
}

Дополнительные сведения см. В разделе Использование служебной шины из службы приложений с управляемым удостоверением службы.