sql >> Base de Datos >  >> RDS >> Sqlserver

¿Puede SQL Server enviar una solicitud web?

Es posible, pero en el mundo real es un poco más complicado que el enfoque ingenuo que imaginas. Principalmente, es inaceptable tener un disparador esperando una solicitud HTTP:

  • Por un lado, su aplicación se detendrá en seco, porque los activadores bloquearán los recursos (principalmente bloqueos) en espera de una respuesta de algún servicio WWW lejano.
  • En segundo lugar, más sutil pero mucho peor, está el problema de la corrección en presencia de reversiones. Si la transacción que se emitió para las solicitudes HTTP se revierte, no hay forma de "deshacer" la solicitud HTTP.

La solución es desacoplar el activador de la solicitud HTTP a través de una cola. El disparador pone en cola la solicitud en una cola local y se confirma, mientras que una pieza separada de procesamiento saca de la cola estas solicitudes y emite la solicitud HTTP. Esto resuelve los dos problemas señalados anteriormente. Puede usar tablas ordinarias para las colas (consulte Uso de tablas como colas) o puede usar Service Broker, ambos funcionan bien.

Ahora, sobre cómo eliminar estas solicitudes y realizar la llamada HTTP, recomiendo enfáticamente usar un proceso dedicado (es decir, una aplicación dedicada para este propósito). Si bien es posible usar SQLCLR, es una muy mala elección. Los recursos de SQL Server (específicamente los trabajadores) son demasiado valiosos como para desperdiciarlos esperando respuestas de Internet.