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.
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
Följ snabbstart: Använd en ARM-mall för att distribuera Azure SignalR och skapa en SignalR Service-instans ASRS1
Följ snabbstart: Använd en ARM-mall för att distribuera Azure API Management och skapa en API Management-instans-APIM1
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 beWebSocket
orServerSentEvent
orLongPolling
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:
- ALTERNATIV före http-begäran för förhandling
- POST HTTP-begäran för förhandling
- WebSocket-begäran om anslutning
Nu ska vi konfigurera API Management från portalen.
- 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/
- Visningsnamn:
- Välj det skapade
SignalR negotiate
API:et, Spara med nedanstående inställningar:- På fliken Design
- Välj Lägg till åtgärd och Spara med följande parametrar:
- Visningsnamn:
negotiate preflight
- URL:
OPTIONS
/
- Visningsnamn:
- Välj Lägg till åtgärd och Spara med följande parametrar:
- Visningsnamn:
negotiate
- URL:
POST
/
- Visningsnamn:
- Välj Lägg till åtgärd och Spara med följande parametrar:
- Växla till fliken Inställningar och avmarkera Prenumeration som krävs för snabb demonstration
- På fliken Design
- 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/
- Visningsnamn:
- Välj det skapade
SignalR connect
API:et, Spara med nedanstående inställningar:- 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:
- ALTERNATIV före http-begäran för förhandling
- POST HTTP-begäran för förhandling
- ALTERNATIV för förhandsversionen av HTTP-begäran för anslutning
- POST HTTP-begäran om anslutning
- HÄMTA HTTP-begäran om anslutning
Nu ska vi konfigurera API Management från portalen.
- 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/
- Visningsnamn:
- Välj det skapade
SignalR
API:et, Spara med nedanstående inställningar:- På fliken Design
- Välj Lägg till åtgärd och Spara med följande parametrar:
- Visningsnamn:
negotiate preflight
- URL:
OPTIONS
/negotiate
- Visningsnamn:
- Välj Lägg till åtgärd och Spara med följande parametrar:
- Visningsnamn:
negotiate
- URL:
POST
/negotiate
- Visningsnamn:
- Välj Lägg till åtgärd och Spara med följande parametrar:
- Visningsnamn:
connect preflight
- URL:
OPTIONS
/
- Visningsnamn:
- Välj Lägg till åtgärd och Spara med följande parametrar:
- Visningsnamn:
connect
- URL:
POST
/
- Visningsnamn:
- Välj Lägg till åtgärd och Spara med följande parametrar:
- Visningsnamn:
connect get
- URL:
GET
/
- Visningsnamn:
- 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>
- Välj Lägg till åtgärd och Spara med följande parametrar:
- Växla till fliken Inställningar och avmarkera Prenumeration som krävs för snabb demonstration
- På fliken Design
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 ettClientEndpoint
avsnitt. - Kopiera anslutningssträngen
- Klientslutpunkt: Ange URL:en med hjälp av GATEWAY-URL:en för APIM1, till exempel
- På fliken Anslutningssträngar i ASRS1
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 mappenwwwroot
och leta upp koden närconnection
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.