sql >> Database >  >> RDS >> Sqlserver

Kan SQL Server een webverzoek verzenden?

Het is mogelijk, maar in de echte wereld is het iets gecompliceerder dan de naïeve benadering die je voor ogen hebt. In de eerste plaats is het onaanvaardbaar dat een trigger wacht op een HTTP-verzoek:

  • Ten eerste zal uw toepassing tot stilstand komen, omdat triggers bronnen (voornamelijk vergrendelingen) blokkeren die wachten op een reactie van een verre WWW-service.
  • Ten tweede, subtieler maar veel erger, is de kwestie van correctheid in aanwezigheid van terugdraaiingen. Als de transactie die is uitgegeven voor HTTP-verzoeken wordt teruggedraaid, is er geen manier om het HTTP-verzoek 'ongedaan te maken'.

De oplossing is om de trigger via een wachtrij te ontkoppelen van het HTTP-verzoek. De trigger plaatst het verzoek in een lokale wachtrij en voert een commit uit, terwijl een afzonderlijk stuk verwerking deze verzoeken uit de wachtrij haalt en het HTTP-verzoek afgeeft. Dit lost beide hierboven genoemde problemen op. U kunt gewone tabellen gebruiken voor wachtrijen (zie Tabellen gebruiken als wachtrijen) of u kunt Service Broker gebruiken, beide werken goed.

Wat betreft het uit de wachtrij halen van deze verzoeken en het daadwerkelijk plaatsen van de HTTP-aanroep, raad ik ten zeerste aan om een ​​speciaal proces te gebruiken (dwz een toepassing die speciaal voor dit doel is bedoeld). Hoewel het mogelijk is om SQLCLR te gebruiken, is het een zeer slechte keuze. SQL Server-bronnen (met name werknemers) zijn veel te kostbaar om te verspillen aan het wachten op internetreacties.



  1. Kan geen verbinding maken met databaseserver (mysql workbench)

  2. HAProxy-verbindingen versus MySQL-verbindingen - wat u moet weten

  3. MariaDB datum- en tijdfuncties (volledige lijst)

  4. Postgres SELECTEER waar de WHERE UUID of string is