Udostępnij za pośrednictwem


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.

Diagram przedstawiający architekturę korzystania z usługi SignalR Service z usługą API Management.

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

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 lub ServerSentEventLongPolling 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ń:

  1. OPCJE wstępne żądanie HTTP dotyczące negocjowania
  2. Żądanie HTTP POST dotyczące negocjowania
  3. Żądanie protokołu WebSocket dla połączenia

Skonfigurujmy usługę API Management z poziomu portalu.

  1. 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/
  2. Wybierz utworzony SignalR negotiate interfejs API, zapisz przy użyciu poniższych ustawień:
    1. Na karcie Projektowanie
      1. Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
        • Nazwa wyświetlana: negotiate preflight
        • Adres URL: OPTIONS/
      2. Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
        • Nazwa wyświetlana: negotiate
        • Adres URL: POST/
    2. Przejdź do karty Ustawienia i usuń zaznaczenie pola wyboru Subskrypcja wymagana do szybkiego celu demonstracyjnego
  3. 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/
  4. Wybierz utworzony SignalR connect interfejs API, zapisz przy użyciu poniższych ustawień:
    1. 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ń:

  1. OPCJE wstępne żądanie HTTP dotyczące negocjowania
  2. Żądanie HTTP POST dotyczące negocjowania
  3. OPCJE wstępne żądanie HTTP dla połączenia
  4. Żądanie HTTP POST dotyczące połączenia
  5. ŻĄDANIE HTTP GET dla połączenia

Teraz skonfigurujmy usługę API Management z poziomu portalu.

  1. 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/
  2. Wybierz utworzony SignalR interfejs API, zapisz przy użyciu poniższych ustawień:
    1. Na karcie Projektowanie
      1. Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
        • Nazwa wyświetlana: negotiate preflight
        • Adres URL: OPTIONS/negotiate
      2. Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
        • Nazwa wyświetlana: negotiate
        • Adres URL: POST/negotiate
      3. Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
        • Nazwa wyświetlana: connect preflight
        • Adres URL: OPTIONS/
      4. Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
        • Nazwa wyświetlana: connect
        • Adres URL: POST/
      5. Wybierz pozycję Dodaj operację i zapisz przy użyciu następujących parametrów:
        • Nazwa wyświetlana: connect get
        • Adres URL: GET/
      6. Wybierz nowo dodaną operację pobierania połączeń i zmodyfikuj zasady zaplecza, aby wyłączyć buforowanie dla ServerSentEventsprogramu , sprawdź tutaj , aby uzyskać więcej szczegółów.
        <backend>
            <forward-request buffer-response="false" />
        </backend>
        
    2. 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 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
  • 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 folderze wwwroot i znajdź kod podczas connection 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.