sql >> Database teknologi >  >> RDS >> Sqlserver

Kan SQL Server sende en webanmodning?

Det er muligt, men i den virkelige verden er det en lille smule mere kompliceret end den naive tilgang, du forestiller dig. Primært er det uacceptabelt at lade en trigger vente på en HTTP-anmodning:

  • For det første vil din applikation kravle til et skrigende stop, fordi triggere vil blokere ressourcer (primært låse), der venter på et svar fra en fjern WWW-tjeneste.
  • For det andet, mere subtilt, men langt værre, er spørgsmålet om korrekthed ved tilbagerulninger. Hvis transaktionen, der blev udstedt til HTTP-anmodninger, ruller tilbage, er der ingen måde at 'fortrydde' HTTP-anmodningen på.

Løsningen er at afkoble triggeren fra HTTP-anmodningen via en kø. Triggeren sætter anmodningen i kø i en lokal kø og forpligter, mens et separat stykke behandling sætter disse anmodninger i kø og udsteder HTTP-anmodningen. Dette løser begge problemer nævnt ovenfor. Du kan bruge almindelige tabeller til køer (se Brug af tabeller som køer), eller du kan bruge Service Broker, begge fungerer godt.

Nu om, hvordan man sætter disse anmodninger i kø og rent faktisk placerer HTTP-kaldet, anbefaler jeg kraftigt at bruge en dedikeret proces (dvs. en applikation dedikeret til dette formål). Selvom det er muligt at bruge SQLCLR, er det et meget dårligt valg. SQL Server-ressourcer (specifikt arbejdere) er alt for dyrebare at spilde på at vente på internetsvar.



  1. Find max værdi og vis tilsvarende værdi fra andet felt i SQL server

  2. T-SQL SET-operatører, del 2:STYR OG UNDTAG

  3. Sådan beskytter du dine PostgreSQL-databaser mod cyberangreb med SQL Firewall

  4. Sådan overføres strengmatrix i SQL-parameter til IN-klausul i SQL