Como usar o Serviço do Azure SignalR com o Gerenciamento de API do Azure
O serviço de Gerenciamento de API do Azure fornece uma plataforma híbrida de gerenciamento de várias nuvens para APIs em todos os ambientes. Este artigo mostra como adicionar recursos em tempo real ao seu aplicativo com o Gerenciamento de API do Azure e o Serviço do Azure SignalR.
Importante
As cadeias de conexão brutas aparecem neste artigo somente para fins de demonstração.
Uma cadeia de conexão inclui as informações de autorização necessárias para que o seu aplicativo acesse o serviço Azure Web PubSub. A chave de acesso dentro da cadeia de conexão é semelhante a uma senha raiz para o serviço. Em ambientes de produção, sempre proteja suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança e proteger sua cadeia de conexão usando o Microsoft Entra ID e autorizar o acesso com o Microsoft Entra ID.
Evite distribuir chaves de acesso para outros usuários, fazer hard-coding com elas ou salvá-las em qualquer lugar em texto sem formatação que seja acessível a outras pessoas. Gire suas chaves se você acredita que elas podem ter sido comprometidas.
Criar recursos
Siga o Guia de início rápido: Use um modelo do ARM para implantar o Azure SignalR e crie uma instância de Serviço do SignalR ASRS1
Siga o Início Rápido: Usar um modelo do ARM para implantar o Gerenciamento de API do Azure e crie uma instância de Gerenciamento de API APIM1
Configurar APIs
Limitações
Há dois tipos de solicitações para um cliente SignalR:
- solicitação de negociação: solicitação HTTP
POST
para<APIM-URL>/client/negotiate/
- solicitação de conexão: solicitação para
<APIM-URL>/client/
, pode serWebSocket
ouServerSentEvent
ouLongPolling
dependendo do tipo de transporte do seu cliente SignalR
O tipo de solicitação de conexão varia dependendo do tipo de transporte dos clientes do SignalR. Por enquanto, o Gerenciamento de API ainda não dá suporte a diferentes tipos de APIs para o mesmo sufixo. Com essa limitação, ao usar o Gerenciamento de API, o cliente do SignalR não dá suporte ao fallback do tipo de transporte WebSocket
para outros tipos de transporte. Pode haver suporte para fallback de ServerSentEvent
para LongPolling
. As seções abaixo descrevem as configurações detalhadas para diferentes tipos de transporte.
Configurar APIs quando o cliente se conectar com o transporte WebSocket
Esta seção descreve as etapas para configurar o Gerenciamento de API quando os clientes do SignalR se conectam com o transporte WebSocket
. Quando os clientes do SignalR se conectam com o transporte WebSocket
, três tipos de solicitações são envolvidos:
- Solicitação HTTP de simulação OPTIONS para negociação
- Solicitação HTTP POST para negociação
- Solicitação WebSocket para conexão
Vamos configurar o Gerenciamento de API no portal.
- Vá para a guia APIs no portal para a instância de Gerenciamento de API APIM1, selecione Adicionar API e escolha HTTP, Criar com os seguintes parâmetros:
- Nome de exibição
SignalR negotiate
- URL do serviço Web:
https://<your-signalr-service-url>/client/negotiate/
- Sufixo da URL da API:
client/negotiate/
- Nome de exibição
- Selecione a API
SignalR negotiate
criada e selecione Salvar com as configurações abaixo:- Na guia Design
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome de exibição
negotiate preflight
- URL:
OPTIONS
/
- Nome de exibição
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome de exibição
negotiate
- URL:
POST
/
- Nome de exibição
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Alterne para a guia Configurações e desmarque Assinatura necessária para fins de demonstração rápida
- Na guia Design
- Selecione Adicionar API e escolha WebSocket, Criar com os seguintes parâmetros:
- Nome de exibição
SignalR connect
- URL do WebSocket:
wss://<your-signalr-service-url>/client/
- Sufixo da URL da API:
client/
- Nome de exibição
- Selecione a API
SignalR connect
criada e selecione Salvar com as configurações abaixo:- Alterne para a guia Configurações e desmarque Assinatura necessária para fins de demonstração rápida
Agora, o Gerenciamento de API está configurado com êxito para dar suporte ao cliente SignalR com o transporte WebSocket
.
Configurar APIs quando o cliente se conectar com o transporte ServerSentEvents
ou LongPolling
Esta seção descreve as etapas para configurar o Gerenciamento de API quando os clientes do SignalR se conectam com o tipo de transporte ServerSentEvents
ou LongPolling
. Quando os clientes do SignalR se conectam ao transporte ServerSentEvents
ou LongPolling
, cinco tipos de solicitações estão envolvidos:
- Solicitação HTTP de simulação OPTIONS para negociação
- Solicitação HTTP POST para negociação
- Solicitação HTTP de simulação OPTIONS para conexão
- Solicitação HTTP POST para conexão
- Solicitação HTTP GET para conexão
Agora, vamos configurar o Gerenciamento de API no portal.
- Vá para a guia APIs no portal para a instância de Gerenciamento de API APIM1, selecione Adicionar API e escolha HTTP, Criar com os seguintes parâmetros:
- Nome de exibição
SignalR
- URL do serviço Web:
https://<your-signalr-service-url>/client/
- Sufixo da URL da API:
client/
- Nome de exibição
- Selecione a API
SignalR
criada e selecione Salvar com as configurações abaixo:- Na guia Design
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome de exibição
negotiate preflight
- URL:
OPTIONS
/negotiate
- Nome de exibição
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome de exibição
negotiate
- URL:
POST
/negotiate
- Nome de exibição
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome de exibição
connect preflight
- URL:
OPTIONS
/
- Nome de exibição
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome de exibição
connect
- URL:
POST
/
- Nome de exibição
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome de exibição
connect get
- URL:
GET
/
- Nome de exibição
- Selecione a operação connect get conexão recém-adicionada e edite a política de back-end para desabilitar o buffer para
ServerSentEvents
, confira aqui para obter mais detalhes.<backend> <forward-request buffer-response="false" /> </backend>
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Alterne para a guia Configurações e desmarque Assinatura necessária para fins de demonstração rápida
- Na guia Design
Agora o Gerenciamento de API está configurado com êxito para dar suporte ao cliente SignalR com ServerSentEvents
ou LongPolling
transporte.
Executar chat
Agora, o tráfego pode acessar o Serviço do SignalR por meio do Gerenciamento de API. Esse aplicativo de chat será usado como exemplo. Vamos começar executando-o localmente.
As cadeias de conexão brutas aparecem neste artigo apenas para fins de demonstração. Em ambientes de produção, sempre proteja suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança e proteger sua cadeia de conexão usando o Microsoft Entra ID e autorizar o acesso com o Microsoft Entra ID.
Primeiro, vamos obter a cadeia de conexão de ASRS1
- Na guia Cadeias de conexão do ASRS1
- Ponto de extremidade do cliente: insira a URL usando a URL do Gateway do APIM1, por exemplo,
https://apim1.azure-api.net
. Ele é um gerador de cadeia de conexão ao usar proxies reversos e o valor não é preservado quando você volta para essa guia. Quando o valor é inserido, a cadeia de conexão acrescenta uma seçãoClientEndpoint
. - Copie a cadeia de conexão
- Ponto de extremidade do cliente: insira a URL usando a URL do Gateway do APIM1, por exemplo,
- Na guia Cadeias de conexão do ASRS1
Clone o repositório GitHub https://github.com/aspnet/AzureSignalR-samples
Acesse a pasta Sala de chat/amostras:
Defina a cadeia de conexão copiada e execute o aplicativo localmente. Você pode ver que há uma seção
ClientEndpoint
no ConnectionString.cd samples/Chatroom dotnet restore dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-connection-string-with-client-endpoint>" dotnet run
Configurar o tipo de transporte para o cliente
Abra
index.html
na pastawwwroot
e localize o código quandoconnection
for criado, depois atualize-o para especificar o tipo de transporte.Por exemplo, para especificar a conexão para usar eventos enviados pelo servidor ou sondagem longa, atualize o código para:
const connection = new signalR.HubConnectionBuilder() .withUrl( "/chat", signalR.HttpTransportType.ServerSentEvents | signalR.HttpTransportType.LongPolling ) .build();
Para especificar a conexão para usar WebSockets, atualize o código para:
const connection = new signalR.HubConnectionBuilder() .withUrl("/chat", signalR.HttpTransportType.WebSockets) .build();
Abra http://localhost:5000 do navegador e use F12 para exibir os rastreamentos de rede. Você pode ver que a conexão é estabelecida pelo APIM1
Próximas etapas
Agora, você adicionou com êxito a funcionalidade em tempo real ao Gerenciamento de API usando o Azure SignalR. Saiba mais sobre o Serviço do SignalR.