Jak używać usługi Azure SignalR Service z usługą Azure API Management
Usługa Azure API Management udostępnia hybrydową, wielochmurową platformę zarządzania dla interfejsów API we wszystkich środowiskach. W tym artykule pokazano, jak dodać możliwość czasu rzeczywistego do aplikacji za pomocą usług Azure API Management i Azure SignalR.
Ważne
Nieprzetworzone parametry połączenia są wyświetlane tylko w tym artykule w celach demonstracyjnych.
Parametry połączenia zawiera informacje o autoryzacji wymagane do uzyskania dostępu do usługi Azure SignalR Service przez aplikację. Klucz dostępu wewnątrz parametry połączenia jest podobny do hasła głównego usługi. W środowiskach produkcyjnych zawsze chroń klucze dostępu. Usługa Azure Key Vault umożliwia bezpieczne zarządzanie kluczami i obracanie ich oraz zabezpieczanie parametry połączenia przy użyciu identyfikatora Entra firmy Microsoft i autoryzowania dostępu za pomocą identyfikatora Entra firmy Microsoft.
Unikaj dystrybuowania kluczy dostępu do innych użytkowników, kodowania ich lub zapisywania ich w dowolnym miejscu w postaci zwykłego tekstu, który jest dostępny dla innych użytkowników. Obracanie kluczy, jeśli uważasz, że mogły one zostać naruszone.
Tworzenie zasobów
Postępuj zgodnie z przewodnikiem Szybki start: wdrażanie usługi Azure SignalR przy użyciu szablonu usługi ARM i tworzenie wystąpienia usługi SignalR Service ASRS1
Postępuj zgodnie z przewodnikiem Szybki start: wdrażanie usługi Azure API Management i tworzenie wystąpienia usługi API Management za pomocą szablonu usługi ARM1
Konfigurowanie interfejsów API
Ograniczenia
Istnieją dwa typy żądań dla klienta usługi SignalR:
-
żądanie negocjowania: żądanie HTTP
POST
do<APIM-URL>/client/negotiate/
-
żądanie połączenia: żądanie do
<APIM-URL>/client/
, może to byćWebSocket
lubServerSentEvent
LongPolling
zależy od typu transportu klienta SignalR
Typ żądania połączenia różni się w zależności od typu transportu klientów usługi SignalR. Co do tej pory usługa API Management nie obsługuje jeszcze różnych typów interfejsów API dla tego samego sufiksu. W przypadku korzystania z usługi API Management klient usługi SignalR nie obsługuje powrotu z WebSocket
typu transportu do innych typów transportu. Powrót z ServerSentEvent
do LongPolling
może być obsługiwany. W poniższych sekcjach opisano szczegółowe konfiguracje dla różnych typów transportu.
Konfigurowanie interfejsów API podczas nawiązywania połączenia przez klienta z transportem WebSocket
W tej sekcji opisano kroki konfigurowania usługi API Management, gdy klienci usługi SignalR łączą się z transportem WebSocket
. Gdy klienci usługi SignalR łączą się z transportem WebSocket
, są zaangażowane trzy typy żądań:
- OPCJE wstępne żądanie HTTP dotyczące negocjowania
- Żądanie HTTP POST dotyczące negocjowania
- Żądanie protokołu WebSocket dla połączenia
Skonfigurujmy usługę API Management z poziomu portalu.
- Przejdź do karty Interfejsy API w portalu dla interfejsu API Management APIM1, wybierz pozycję Dodaj interfejs API i wybierz pozycję HTTP, Utwórz przy użyciu następujących parametrów:
- Nazwa wyświetlana:
SignalR negotiate
- Adres URL usługi sieci Web:
https://<your-signalr-service-url>/client/negotiate/
- Sufiks adresu URL interfejsu API:
client/negotiate/
- Nazwa wyświetlana:
- Wybierz utworzony
SignalR negotiate
interfejs API, zapisz przy użyciu poniższych ustawień:- Na karcie Projektowanie
- Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
- Nazwa wyświetlana:
negotiate preflight
- Adres URL:
OPTIONS
/
- Nazwa wyświetlana:
- Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
- Nazwa wyświetlana:
negotiate
- Adres URL:
POST
/
- Nazwa wyświetlana:
- Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
- Przejdź do karty Ustawienia i usuń zaznaczenie pola wyboru Subskrypcja wymagana do szybkiego celu demonstracyjnego
- Na karcie Projektowanie
- Wybierz pozycję Dodaj interfejs API i wybierz pozycję WebSocket, Utwórz z następującymi parametrami:
- Nazwa wyświetlana:
SignalR connect
- Adres URL protokołu WebSocket:
wss://<your-signalr-service-url>/client/
- Sufiks adresu URL interfejsu API:
client/
- Nazwa wyświetlana:
- Wybierz utworzony
SignalR connect
interfejs API, zapisz przy użyciu poniższych ustawień:- Przejdź do karty Ustawienia i usuń zaznaczenie pola wyboru Subskrypcja wymagana do szybkiego celu demonstracyjnego
Teraz usługa API Management została pomyślnie skonfigurowana do obsługi klienta usługi SignalR z transportem WebSocket
.
Konfigurowanie interfejsów API podczas nawiązywania połączenia z klientem ServerSentEvents
lub LongPolling
transportu
W tej sekcji opisano kroki konfigurowania usługi API Management, gdy klienci usługi SignalR nawiązują połączenie z typem ServerSentEvents
transportu lub LongPolling
z nim. Gdy klienci usługi SignalR łączą się z usługą ServerSentEvents
SignalR lub LongPolling
transportują, są zaangażowane pięć typów żądań:
- OPCJE wstępne żądanie HTTP dotyczące negocjowania
- Żądanie HTTP POST dotyczące negocjowania
- OPCJE wstępne żądanie HTTP dla połączenia
- Żądanie HTTP POST dotyczące połączenia
- ŻĄDANIE HTTP GET dla połączenia
Teraz skonfigurujmy usługę API Management z poziomu portalu.
- Przejdź do karty Interfejsy API w portalu dla interfejsu API Management APIM1, wybierz pozycję Dodaj interfejs API i wybierz pozycję HTTP, Utwórz przy użyciu następujących parametrów:
- Nazwa wyświetlana:
SignalR
- Adres URL usługi sieci Web:
https://<your-signalr-service-url>/client/
- Sufiks adresu URL interfejsu API:
client/
- Nazwa wyświetlana:
- Wybierz utworzony
SignalR
interfejs API, zapisz przy użyciu poniższych ustawień:- Na karcie Projektowanie
- Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
- Nazwa wyświetlana:
negotiate preflight
- Adres URL:
OPTIONS
/negotiate
- Nazwa wyświetlana:
- Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
- Nazwa wyświetlana:
negotiate
- Adres URL:
POST
/negotiate
- Nazwa wyświetlana:
- Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
- Nazwa wyświetlana:
connect preflight
- Adres URL:
OPTIONS
/
- Nazwa wyświetlana:
- Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
- Nazwa wyświetlana:
connect
- Adres URL:
POST
/
- Nazwa wyświetlana:
- Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
- Nazwa wyświetlana:
connect get
- Adres URL:
GET
/
- Nazwa wyświetlana:
- Wybierz nowo dodaną operację pobierania połączeń i zmodyfikuj zasady zaplecza, aby wyłączyć buforowanie dla
ServerSentEvents
programu , sprawdź tutaj , aby uzyskać więcej szczegółów.<backend> <forward-request buffer-response="false" /> </backend>
- Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
- Przejdź do karty Ustawienia i usuń zaznaczenie pola wyboru Subskrypcja wymagana do szybkiego celu demonstracyjnego
- Na karcie Projektowanie
Teraz usługa API Management została pomyślnie skonfigurowana do obsługi klienta usługi SignalR z usługą SignalR lub LongPolling
transportemServerSentEvents
.
Uruchamianie czatu
Teraz ruch może dotrzeć do usługi SignalR Service za pośrednictwem usługi API Management. Użyjmy tej aplikacji do czatu jako przykładu. Zacznijmy od uruchamiania go lokalnie.
Nieprzetworzone parametry połączenia są wyświetlane tylko w tym artykule w celach demonstracyjnych. W środowiskach produkcyjnych zawsze chroń klucze dostępu. Usługa Azure Key Vault umożliwia bezpieczne zarządzanie kluczami i obracanie ich oraz zabezpieczanie parametry połączenia przy użyciu identyfikatora Entra firmy Microsoft i autoryzowania dostępu za pomocą identyfikatora Entra firmy Microsoft.
Najpierw uzyskajmy parametry połączenia usługi ASRS1
-
Na karcie Parametry połączenia usługi ASRS1
-
Punkt końcowy klienta: wprowadź adres URL przy użyciu adresu URL bramy interfejsu APIM1, na przykład
https://apim1.azure-api.net
. Jest to generator parametry połączenia podczas korzystania z odwrotnych serwerów proxy, a wartość nie jest zachowywana po następnym powrocie do tej karty. Po wprowadzeniu wartości parametry połączenia dołącza sekcjęClientEndpoint
. - Kopiowanie parametrów połączenia
-
Punkt końcowy klienta: wprowadź adres URL przy użyciu adresu URL bramy interfejsu APIM1, na przykład
-
Na karcie Parametry połączenia usługi ASRS1
Klonowanie repozytorium GitHub https://github.com/aspnet/AzureSignalR-samples
Przejdź do folderu samples/Chatroom:
Ustaw skopiowaną parametry połączenia i uruchom aplikację lokalnie, aby zobaczyć, że w
ClientEndpoint
sekcji ConnectionString znajduje się sekcja.cd samples/Chatroom dotnet restore dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-connection-string-with-client-endpoint>" dotnet run
Konfigurowanie typu transportu dla klienta
Otwórz
index.html
w folderzewwwroot
i znajdź kod podczasconnection
tworzenia, zaktualizuj go, aby określić typ transportu.Aby na przykład określić połączenie do używania zdarzeń wysyłanych przez serwer lub długie sondowanie, zaktualizuj kod do:
const connection = new signalR.HubConnectionBuilder() .withUrl( "/chat", signalR.HttpTransportType.ServerSentEvents | signalR.HttpTransportType.LongPolling ) .build();
Aby określić połączenie do używania obiektów WebSocket, zaktualizuj kod w celu:
const connection = new signalR.HubConnectionBuilder() .withUrl("/chat", signalR.HttpTransportType.WebSockets) .build();
Otwórz http://localhost:5000 w przeglądarce i użyj F12, aby wyświetlić ślady sieci, możesz zobaczyć, że połączenie zostało nawiązane za pośrednictwem usługi APIM1
Następne kroki
Teraz udało Ci się pomyślnie dodać możliwość czasu rzeczywistego do usługi API Management przy użyciu usługi Azure SignalR. Dowiedz się więcej o usłudze SignalR Service.