Dela via


Använda Azure SignalR Service med Azure API Management

Azure API Management-tjänsten tillhandahåller en hybridplattform för hantering av flera moln för API:er i alla miljöer. Den här artikeln visar hur du lägger till realtidsfunktioner i ditt program med Azure API Management och Azure SignalR-tjänsten.

Diagram som visar arkitekturen för att använda SignalR Service med API Management.

Viktigt!

Råa anslutningssträng visas endast i den här artikeln i demonstrationssyfte.

En anslutningssträng innehåller den auktoriseringsinformation som krävs för att ditt program ska få åtkomst till Azure SignalR Service. Åtkomstnyckeln i anslutningssträng liknar ett rotlösenord för din tjänst. Skydda alltid dina åtkomstnycklar i produktionsmiljöer. Använd Azure Key Vault för att hantera och rotera dina nycklar på ett säkert sätt och skydda dina anslutningssträng med hjälp av Microsoft Entra-ID och auktorisera åtkomst med Microsoft Entra-ID.

Undvik att distribuera åtkomstnycklar till andra användare, hårdkoda dem eller spara dem var som helst i oformaterad text som är tillgänglig för andra. Rotera dina nycklar om du tror att de har komprometterats.

Skapa resurser

Konfigurera API:er

Begränsningar

Det finns två typer av begäranden för en SignalR-klient:

  • förhandla om begäran: HTTP-begäran POST till <APIM-URL>/client/negotiate/
  • connect request: request to <APIM-URL>/client/, it could be WebSocket or ServerSentEvent or LongPolling depends on the transport type of your SignalR client

Typen av anslutningsbegäran varierar beroende på signalR-klienternas transporttyp. Api Management stöder ännu inte olika typer av API:er för samma suffix. Med den här begränsningen har signalR-klienten inte stöd för återställning från WebSocket transporttyp till andra transporttyper när du använder API Management. Återställning från ServerSentEvent till LongPolling kan stödjas. I avsnitten nedan beskrivs detaljerade konfigurationer för olika transporttyper.

Konfigurera API:er när klienten ansluter med WebSocket transport

I det här avsnittet beskrivs stegen för att konfigurera API Management när SignalR-klienterna ansluter med WebSocket transport. När SignalR-klienter ansluter med WebSocket transport ingår tre typer av begäranden:

  1. ALTERNATIV före http-begäran för förhandling
  2. POST HTTP-begäran för förhandling
  3. WebSocket-begäran om anslutning

Nu ska vi konfigurera API Management från portalen.

  1. Gå till fliken API:er i portalen för API Management-instansen APIM1, välj Lägg till API och välj HTTP, Skapa med följande parametrar:
    • Visningsnamn: SignalR negotiate
    • Webbtjänst-URL: https://<your-signalr-service-url>/client/negotiate/
    • API URL-suffix: client/negotiate/
  2. Välj det skapade SignalR negotiate API:et, Spara med nedanstående inställningar:
    1. fliken Design
      1. Välj Lägg till åtgärd och Spara med följande parametrar:
        • Visningsnamn: negotiate preflight
        • URL: OPTIONS /
      2. Välj Lägg till åtgärd och Spara med följande parametrar:
        • Visningsnamn: negotiate
        • URL: POST /
    2. Växla till fliken Inställningar och avmarkera Prenumeration som krävs för snabb demonstration
  3. Välj Lägg till API och välj WebSocket, Skapa med följande parametrar:
    • Visningsnamn: SignalR connect
    • Url för WebSocket: wss://<your-signalr-service-url>/client/
    • API URL-suffix: client/
  4. Välj det skapade SignalR connect API:et, Spara med nedanstående inställningar:
    1. Växla till fliken Inställningar och avmarkera Prenumeration som krävs för snabb demonstration

Nu har API Management konfigurerats för att stödja SignalR-klienten med WebSocket transport.

Konfigurera API:er när klienten ansluter till ServerSentEvents eller LongPolling transporterar

I det här avsnittet beskrivs stegen för att konfigurera API Management när SignalR-klienterna ansluter till ServerSentEvents eller LongPolling transporttypen. När SignalR-klienter ansluter till ServerSentEvents eller LongPolling transporterar berörs fem typer av begäranden:

  1. ALTERNATIV före http-begäran för förhandling
  2. POST HTTP-begäran för förhandling
  3. ALTERNATIV för förhandsversionen av HTTP-begäran för anslutning
  4. POST HTTP-begäran om anslutning
  5. HÄMTA HTTP-begäran om anslutning

Nu ska vi konfigurera API Management från portalen.

  1. Gå till fliken API:er i portalen för API Management-instansen APIM1, välj Lägg till API och välj HTTP, Skapa med följande parametrar:
    • Visningsnamn: SignalR
    • Webbtjänst-URL: https://<your-signalr-service-url>/client/
    • API URL-suffix: client/
  2. Välj det skapade SignalR API:et, Spara med nedanstående inställningar:
    1. fliken Design
      1. Välj Lägg till åtgärd och Spara med följande parametrar:
        • Visningsnamn: negotiate preflight
        • URL: OPTIONS /negotiate
      2. Välj Lägg till åtgärd och Spara med följande parametrar:
        • Visningsnamn: negotiate
        • URL: POST /negotiate
      3. Välj Lägg till åtgärd och Spara med följande parametrar:
        • Visningsnamn: connect preflight
        • URL: OPTIONS /
      4. Välj Lägg till åtgärd och Spara med följande parametrar:
        • Visningsnamn: connect
        • URL: POST /
      5. Välj Lägg till åtgärd och Spara med följande parametrar:
        • Visningsnamn: connect get
        • URL: GET /
      6. Välj den nyligen tillagda connect get-åtgärden och redigera serverdelsprincipen för att inaktivera buffring för ServerSentEvents. Mer information finns här .
        <backend>
            <forward-request buffer-response="false" />
        </backend>
        
    2. Växla till fliken Inställningar och avmarkera Prenumeration som krävs för snabb demonstration

Nu har API Management konfigurerats för att stödja SignalR-klienten med ServerSentEvents eller LongPolling transport.

Kör chatt

Nu kan trafiken nå SignalR Service via API Management. Vi använder det här chattprogrammet som exempel. Vi börjar med att köra den lokalt.

Råa anslutningssträng visas endast i den här artikeln i demonstrationssyfte. Skydda alltid dina åtkomstnycklar i produktionsmiljöer. Använd Azure Key Vault för att hantera och rotera dina nycklar på ett säkert sätt och skydda dina anslutningssträng med hjälp av Microsoft Entra-ID och auktorisera åtkomst med Microsoft Entra-ID.

  • Först ska vi ta anslutningssträng av ASRS1

    • På fliken Anslutningssträngar i ASRS1
      • Klientslutpunkt: Ange URL:en med hjälp av GATEWAY-URL:en för APIM1, till exempel https://apim1.azure-api.net. Det är en anslutningssträng generator när du använder omvända proxyservrar och värdet bevaras inte nästa gång du kommer tillbaka till den här fliken. När värdet anges lägger anslutningssträng till ett ClientEndpoint avsnitt.
      • Kopiera anslutningssträngen
  • Klona GitHub-lagringsplatsen https://github.com/aspnet/AzureSignalR-samples

  • Gå till exempel/chattrumsmapp:

  • Ange den kopierade anslutningssträng och kör programmet lokalt. Du kan se att det finns ett ClientEndpoint avsnitt i ConnectionString.

    cd samples/Chatroom
    dotnet restore
    dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-connection-string-with-client-endpoint>"
    dotnet run
    
  • Konfigurera transporttyp för klienten

    Öppna index.html under mappen wwwroot och leta upp koden när connection den skapas, uppdatera den för att ange transporttypen.

    Om du till exempel vill ange anslutningen för att använda server-sent-events eller lång avsökning uppdaterar du koden till:

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

    Om du vill ange anslutningen för att använda WebSockets uppdaterar du koden till:

    const connection = new signalR.HubConnectionBuilder()
      .withUrl("/chat", signalR.HttpTransportType.WebSockets)
      .build();
    
  • Öppna http://localhost:5000 från webbläsaren och använd F12 för att visa nätverksspårningarna. Du kan se att anslutningen upprättas via APIM1

Nästa steg

Nu har du lagt till realtidsfunktioner i API Management med Hjälp av Azure SignalR. Läs mer om SignalR Service.