Sdílet prostřednictvím


Jak používat službu Azure SignalR se službou Azure API Management

Služba Azure API Management poskytuje hybridní multicloudovou platformu pro správu pro rozhraní API ve všech prostředích. V tomto článku se dozvíte, jak do aplikace přidat funkce v reálném čase pomocí služby Azure API Management a služby Azure SignalR.

Diagram znázorňující architekturu používání služby SignalR se službou API Management

Důležité

Nezpracované připojovací řetězec se v tomto článku zobrazují jenom pro demonstrační účely.

Připojovací řetězec obsahuje autorizační informace potřebné pro vaši aplikaci pro přístup ke službě Azure SignalR. Přístupový klíč uvnitř připojovací řetězec je podobný kořenovému heslu pro vaši službu. V produkčních prostředích vždy chraňte přístupové klíče. Pomocí služby Azure Key Vault můžete bezpečně spravovat a obměňovat klíče a zabezpečit připojovací řetězec pomocí ID Microsoft Entra a autorizovat přístup pomocí Microsoft Entra ID.

Vyhněte se distribuci přístupových klíčů ostatním uživatelům, jejich pevnému kódování nebo jejich uložení kdekoli ve formátu prostého textu, který je přístupný ostatním uživatelům. Otočte klíče, pokud se domníváte, že mohly být ohroženy.

Vytvoření zdrojů

Konfigurace rozhraní API

Omezení

Pro klienta SignalR existují dva typy požadavků:

  • žádost negotiate: Požadavek HTTP POST na <APIM-URL>/client/negotiate/
  • connect request: request to <APIM-URL>/client/, it could or WebSocketServerSentEventLongPolling depends on transport type of your SignalR client

Typ žádosti o připojení se liší v závislosti na typu přenosu klientů SignalR. Zatím api Management zatím nepodporuje různé typy rozhraní API pro stejnou příponu. S tímto omezením klient SignalR při použití služby API Management nepodporuje náhradní typ WebSocket přenosu do jiných typů přenosu. Náhradní řešení ServerSentEventLongPolling může být podporováno. Níže uvedené části popisují podrobné konfigurace pro různé typy přenosu.

Konfigurace rozhraní API při připojení klienta k WebSocket přenosu

Tato část popisuje postup konfigurace služby API Management, když se klienti SignalR připojují k WebSocket přenosu. Když se klienti SignalR připojují k WebSocket přenosu, jsou zapojeny tři typy požadavků:

  1. Předběžný požadavek HTTP OPTIONS pro vyjednání
  2. Požadavek POST HTTP pro vyjednávání
  3. Požadavek protokolu WebSocket na připojení

Pojďme nakonfigurovat službu API Management z portálu.

  1. Přejděte na kartu Rozhraní API na portálu pro instanci APIM1 služby API Management, vyberte Přidat rozhraní API a zvolte HTTP, Vytvořte s následujícími parametry:
    • Zobrazovaný název: SignalR negotiate
    • Adresa URL webové služby: https://<your-signalr-service-url>/client/negotiate/
    • Přípona adresy URL rozhraní API: client/negotiate/
  2. Vyberte vytvořené SignalR negotiate rozhraní API a uložte ho s následujícím nastavením:
    1. Karta Návrh
      1. Vyberte Přidat operaci a uložte s následujícími parametry:
        • Zobrazovaný název: negotiate preflight
        • Adresa URL: OPTIONS/
      2. Vyberte Přidat operaci a uložte s následujícími parametry:
        • Zobrazovaný název: negotiate
        • Adresa URL: POST/
    2. Přepnutí na kartu Nastavení a zrušení zaškrtnutí políčka Předplatná vyžadovaná pro rychlý ukázkový účel
  3. Vyberte Přidat rozhraní API a zvolte WebSocket, Vytvořit s následujícími parametry:
    • Zobrazovaný název: SignalR connect
    • Adresa URL protokolu WebSocket: wss://<your-signalr-service-url>/client/
    • Přípona adresy URL rozhraní API: client/
  4. Vyberte vytvořené SignalR connect rozhraní API a uložte ho s následujícím nastavením:
    1. Přepnutí na kartu Nastavení a zrušení zaškrtnutí políčka Předplatná vyžadovaná pro rychlý ukázkový účel

Teď je služba API Management úspěšně nakonfigurovaná tak, aby podporovala klienta SignalR s přenosem WebSocket .

Konfigurace rozhraní API při připojení klienta nebo ServerSentEventsLongPolling přenosu

Tato část popisuje postup konfigurace služby API Management, když se klienti SignalR připojují k ServerSentEvents typu přenosu nebo LongPolling se k němu připojují. Když se klienti SignalR připojují k ServerSentEvents přenosu nebo LongPolling se připojují, týká se pět typů požadavků:

  1. Předběžný požadavek HTTP OPTIONS pro vyjednání
  2. Požadavek POST HTTP pro vyjednávání
  3. Předběžný požadavek HTTP OPTIONS pro připojení
  4. Požadavek POST HTTP pro připojení
  5. Požadavek GET HTTP pro připojení

Teď nakonfigurujeme službu API Management z portálu.

  1. Přejděte na kartu Rozhraní API na portálu pro instanci APIM1 služby API Management, vyberte Přidat rozhraní API a zvolte HTTP, Vytvořte s následujícími parametry:
    • Zobrazovaný název: SignalR
    • Adresa URL webové služby: https://<your-signalr-service-url>/client/
    • Přípona adresy URL rozhraní API: client/
  2. Vyberte vytvořené SignalR rozhraní API a uložte ho s následujícím nastavením:
    1. Karta Návrh
      1. Vyberte Přidat operaci a uložte s následujícími parametry:
        • Zobrazovaný název: negotiate preflight
        • Adresa URL: OPTIONS/negotiate
      2. Vyberte Přidat operaci a uložte s následujícími parametry:
        • Zobrazovaný název: negotiate
        • Adresa URL: POST/negotiate
      3. Vyberte Přidat operaci a uložte s následujícími parametry:
        • Zobrazovaný název: connect preflight
        • Adresa URL: OPTIONS/
      4. Vyberte Přidat operaci a uložte s následujícími parametry:
        • Zobrazovaný název: connect
        • Adresa URL: POST/
      5. Vyberte Přidat operaci a uložte s následujícími parametry:
        • Zobrazovaný název: connect get
        • Adresa URL: GET/
      6. Vyberte nově přidanou operaci získání připojení a upravte zásady back-endu tak, aby se zakázaly ukládání ServerSentEventsdo vyrovnávací paměti , podívejte sem , kde najdete další podrobnosti.
        <backend>
            <forward-request buffer-response="false" />
        </backend>
        
    2. Přepnutí na kartu Nastavení a zrušení zaškrtnutí políčka Předplatná vyžadovaná pro rychlý ukázkový účel

Teď je služba API Management úspěšně nakonfigurovaná tak, aby podporovala klienta SignalR s přenosemServerSentEvents.LongPolling

Spuštění chatu

Provoz se teď může spojit se službou SignalR prostřednictvím služby API Management. Tuto chatovací aplikaci použijeme jako příklad. Začněme tím, že ho spustíme místně.

Nezpracované připojovací řetězec se v tomto článku zobrazují jenom pro demonstrační účely. V produkčních prostředích vždy chraňte přístupové klíče. Pomocí služby Azure Key Vault můžete bezpečně spravovat a obměňovat klíče a zabezpečit připojovací řetězec pomocí ID Microsoft Entra a autorizovat přístup pomocí Microsoft Entra ID.

  • Nejprve získáme připojovací řetězec ASRS1.

    • Na kartě Připojovací řetězce služby ASRS1
      • Koncový bod klienta: Zadejte adresu URL pomocí adresy URL brány apiM1, například https://apim1.azure-api.net. Jedná se o generátor připojovací řetězec při použití reverzních proxy serverů a hodnota se při příštím návratu na tuto kartu nezachová. Po zadání hodnoty připojí připojovací řetězec ClientEndpoint oddíl.
      • Zkopírování připojovacího řetězce
  • Klonování úložiště GitHub https://github.com/aspnet/AzureSignalR-samples

  • Přejděte na ukázky nebo složku Chatroom:

  • Nastavte zkopírovaný připojovací řetězec a spusťte aplikaci místně, můžete vidět, že v připojovacímstringu je ClientEndpoint oddíl.

    cd samples/Chatroom
    dotnet restore
    dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-connection-string-with-client-endpoint>"
    dotnet run
    
  • Konfigurace typu přenosu pro klienta

    Otevřete index.html pod složkou wwwroot a vyhledejte kód, který connection se vytvoří, aktualizujte ho tak, aby určil typ přenosu.

    Pokud chcete například zadat připojení k použití událostí odesílaných serverem nebo dlouhých dotazování, aktualizujte kód na:

    const connection = new signalR.HubConnectionBuilder()
      .withUrl(
        "/chat",
        signalR.HttpTransportType.ServerSentEvents |
          signalR.HttpTransportType.LongPolling
      )
      .build();
    

    Chcete-li zadat připojení pro použití webSocket, aktualizujte kód na:

    const connection = new signalR.HubConnectionBuilder()
      .withUrl("/chat", signalR.HttpTransportType.WebSockets)
      .build();
    
  • Otevřete http://localhost:5000 v prohlížeči a pomocí F12 zobrazte trasování sítě. Uvidíte, že se připojení naváže přes APIM1.

Další kroky

Teď jste úspěšně přidali do služby API Management funkci v reálném čase pomocí Azure SignalR. Přečtěte si další informace o službě SignalR.