Como usar o Serviço Azure SignalR com o Gerenciamento de API do Azure
O serviço de Gerenciamento de API do Azure fornece uma plataforma de gerenciamento híbrida e multicloud 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 Azure SignalR.
Importante
As cadeias de conexão brutas aparecem neste artigo apenas para fins de demonstração.
Uma cadeia de conexão inclui as informações de autorização necessárias para seu aplicativo acessar o Serviço Azure SignalR. A chave de acesso dentro da cadeia de conexão é semelhante a uma senha de root para o seu serviço. Em ambientes de produção, proteja sempre as 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 a ID do Microsoft Entra e autorizar o acesso com a ID do Microsoft Entra.
Evite distribuir chaves de acesso para outros usuários, codificá-las ou salvá-las em qualquer lugar em texto simples acessível a outras pessoas. Rode as chaves se acreditar que podem ter sido comprometidas.
Criar recursos
Siga Guia de início rápido: use um modelo ARM para implantar o Azure SignalR e criar uma instância do Serviço SignalR ASRS1
Siga Guia de início rápido: use um modelo ARM para implantar o Gerenciamento de API do Azure e criar uma APIM1 de instância de Gerenciamento de API
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/
- connect request: solicitação para
<APIM-URL>/client/
, pode serWebSocket
ouServerSentEvent
LongPolling
depende do tipo de transporte do seu cliente SignalR
O tipo de solicitação de conexão varia dependendo do tipo de transporte dos clientes SignalR. Por enquanto, o Gerenciamento de API ainda não suporta diferentes tipos de APIs para o mesmo sufixo. Com essa limitação, ao usar o Gerenciamento de API, seu cliente SignalR não suporta fallback do tipo de transporte para outros tipos de WebSocket
transporte. Fallback de ServerSentEvent
para LongPolling
poderia ser suportado. As seções abaixo descrevem as configurações detalhadas para diferentes tipos de transporte.
Configurar APIs quando o cliente se conecta com WebSocket
o transporte
Esta seção descreve as etapas para configurar o Gerenciamento de API quando os clientes SignalR se conectam com WebSocket
o transporte. Quando os clientes SignalR se conectam com WebSocket
o transporte, três tipos de solicitações estão envolvidos:
- OPÇÕES comprovação HTTP solicitação para negociação
- Pedido HTTP POST para negociação
- Solicitação WebSocket para conexão
Vamos configurar o Gerenciamento de API a partir do portal.
- Vá para a guia APIs no portal para instância de gerenciamento de API APIM1, selecione Adicionar API e escolha HTTP, Criar com os seguintes parâmetros:
- Nome para exibição:
SignalR negotiate
- URL do serviço Web:
https://<your-signalr-service-url>/client/negotiate/
- Sufixo de URL da API:
client/negotiate/
- Nome para exibição:
- Selecione a API criada
SignalR negotiate
, Salvar com as configurações abaixo:- Na guia Design
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome para exibição:
negotiate preflight
- Endereço URL:
OPTIONS
/
- Nome para exibição:
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome para exibição:
negotiate
- Endereço URL:
POST
/
- Nome para exibição:
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Mude para o separador Definições e desmarque a opção Subscrição necessária para efeitos de demonstração rápida
- Na guia Design
- Selecione Add API e escolha WebSocket, Create com os seguintes parâmetros:
- Nome para exibição:
SignalR connect
- URL do WebSocket:
wss://<your-signalr-service-url>/client/
- Sufixo de URL da API:
client/
- Nome para exibição:
- Selecione a API criada
SignalR connect
, Salvar com as configurações abaixo:- Mude para o separador Definições e desmarque a opção Subscrição necessária para efeitos de demonstração rápida
Agora, o Gerenciamento de API está configurado com êxito para suportar o cliente SignalR com WebSocket
transporte.
Configurar APIs quando o cliente se conecta LongPolling
ou ServerSentEvents
transporta
Esta seção descreve as etapas para configurar o Gerenciamento de API quando os clientes SignalR se conectam LongPolling
ou ServerSentEvents
o tipo de transporte. Quando os clientes SignalR se conectam ou ServerSentEvents
LongPolling
transportam, cinco tipos de solicitações estão envolvidos:
- OPÇÕES comprovação HTTP solicitação para negociação
- Pedido HTTP POST para negociação
- OPÇÕES comprovação HTTP solicitação para conexão
- Solicitação HTTP POST para conexão
- Solicitação HTTP GET para conexão
Agora vamos configurar o Gerenciamento de API a partir do portal.
- Vá para a guia APIs no portal para instância de gerenciamento de API APIM1, selecione Adicionar API e escolha HTTP, Criar com os seguintes parâmetros:
- Nome para exibição:
SignalR
- URL do serviço Web:
https://<your-signalr-service-url>/client/
- Sufixo de URL da API:
client/
- Nome para exibição:
- Selecione a API criada
SignalR
, Salvar com as configurações abaixo:- Na guia Design
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome para exibição:
negotiate preflight
- Endereço URL:
OPTIONS
/negotiate
- Nome para exibição:
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome para exibição:
negotiate
- Endereço URL:
POST
/negotiate
- Nome para exibição:
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome para exibição:
connect preflight
- Endereço URL:
OPTIONS
/
- Nome para exibição:
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome para exibição:
connect
- Endereço URL:
POST
/
- Nome para exibição:
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Nome para exibição:
connect get
- Endereço URL:
GET
/
- Nome para exibição:
- Selecione a operação get de conexão recém-adicionada e edite a política de back-end para desativar o buffer para
ServerSentEvents
, verifique aqui para obter mais detalhes.<backend> <forward-request buffer-response="false" /> </backend>
- Selecione Adicionar operação e Salvar com os seguintes parâmetros:
- Mude para o separador Definições e desmarque a opção Subscrição necessária para efeitos de demonstração rápida
- Na guia Design
Agora, o Gerenciamento de API está configurado com êxito para suportar o cliente SignalR com ServerSentEvents
ou LongPolling
transporte.
Executar bate-papo
Agora, o tráfego pode chegar ao Serviço SignalR por meio do Gerenciamento de API. Vamos usar este aplicativo de bate-papo como exemplo. Vamos começar por executá-lo localmente.
As cadeias de conexão brutas aparecem neste artigo apenas para fins de demonstração. Em ambientes de produção, proteja sempre as 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 a ID do Microsoft Entra e autorizar o acesso com a ID do Microsoft Entra.
Primeiro, vamos obter a cadeia de conexão do 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
. É um gerador de cadeia de conexão ao usar proxies reversos e o valor não é preservado na próxima vez que você voltar a essa guia. Quando o valor é inserido, a cadeia de conexão acrescenta umaClientEndpoint
seção. - 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
Vá para a pasta samples/Chatroom:
Defina a cadeia de conexão copiada e execute o aplicativo localmente, você pode ver que há uma
ClientEndpoint
seção 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
em pastawwwroot
e encontre o código quandoconnection
for criado, atualize-o para especificar o tipo de transporte.Por exemplo, para especificar a conexão para usar server-sent-events ou long polling, 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 a partir do navegador e use F12 para visualizar os rastreamentos de rede, você pode ver que a conexão é estabelecida através de APIM1
Próximos passos
Agora, você adicionou com êxito a capacidade em tempo real ao seu Gerenciamento de API usando o Azure SignalR. Saiba mais sobre o Serviço SignalR.