Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O SQL Server pode enviar uma solicitação da Web?


É possível, mas no mundo real é um pouco mais complicado do que a abordagem ingênua que você imagina. Principalmente, é inaceitável ter um gatilho esperando por uma solicitação HTTP:
  • Por um lado, seu aplicativo irá rastrear até uma parada brusca, porque os gatilhos bloquearão recursos (principalmente bloqueios) aguardando uma resposta de algum serviço WWW distante.
  • Segundo, mais sutil, mas muito pior, é a questão da correção na presença de reversões. Se a transação emitida para solicitações HTTP for revertida, não há como 'desfazer' a solicitação HTTP.

A solução é desacoplar o gatilho da solicitação HTTP por meio de uma fila. O gatilho enfileira a solicitação em uma fila local e confirma, enquanto uma parte separada do processamento desenfileira essas solicitações e emite a solicitação HTTP. Isso resolve os dois problemas apontados acima. Você pode usar tabelas comuns para filas (consulte Usando tabelas como filas) ou pode usar o Service Broker, ambos funcionam bem.

Agora, sobre como desenfileirar essas solicitações e realmente fazer a chamada HTTP, recomendo fortemente o uso de um processo dedicado (ou seja, um aplicativo dedicado para essa finalidade). Embora seja possível usar SQLCLR, é uma escolha muito ruim. Os recursos do SQL Server (especificamente trabalhadores) são preciosos demais para serem desperdiçados esperando por respostas da Internet.