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

Sådan påberåbes webservice fra SQL Server-lagret procedure

For noget som dette behøver du ikke en fuld webserviceimplementering. Du kan bruge SQLCLR (SQL Servers .NET Integration) til at sende anmodningen til URL'en, få svaret tilbage i XML (medmindre du kan finde et JSON-bibliotek, der fungerer uden indstilles til UNSAFE ), og parse derefter det svar.

Se på følgende MSDN-sider:

  • HttpWebRequest
  • HttpWebResponse
  • XmlDocument
  • Sådan undslipper du adressen:
    • Hvis du bruger SQL Server 2005, 2008 eller 2008 R2, skal du bruge Uri.EscapeDataString da det var tilgængeligt før .NET Framework v4.5
    • Hvis du bruger SQL Server 2012, 2014 eller nyere, så kan du bruge enten Uri.EscapeDataString eller, hvis serveren er blevet opdateret til mindst .NET Framework v4.5, så kan du alternativt bruge WebUtility.UrlEncode

Ifølge Google Geocoding API-dokumentation , skal API-URI'en formateres på samme måde som følgende:

https://maps.googleapis.com/maps/api/geocode/xml?address={EscapedAddress}&key={API_KEY}

Bare indsend det med de 2 variabler erstattet med deres rigtige værdier via HttpWebRequest , kald derefter HttpWebRequest.GetResponse , kald derefter HttpWebResponse.GetResponseStream . Og gør ikke glem at ringe til Close og Dispose metoder til HttpWebResponse (eller instansier det i en using blok)!!

Yderligere bemærkninger:

  • Hvis det ikke allerede er gjort, skal du aktivere (en gang) "CLR-integration" på serverniveau:Aktivering af CLR-integration
  • Tag ikke den lette vej og indstil databasen til TRUSTWORTHY ON . Bare underskriv forsamlingen med et kodeord, og opret derefter en asymmetrisk nøgle i master database ved at pege på din signerede DLL, opret derefter et login fra den asymmetriske nøgle, og giv til sidst det login UNSAFE ASSEMBLY tilladelse. Derefter kan du indstille samlingen WITH PERMISSION_SET = EXTERNAL_ACCESS .
  • Brug ikke SP_OA*-procedurerne som anbefalet af user3469363 . Disse OLE Automation-procedurer er blevet forældet siden SQL Server 2005 og vil (forhåbentlig) blive fjernet en dag (forhåbentlig snart). De er også mindre effektive og mindre sikre end SQLCLR.
  • Endnu flere noter kan findes i mit svar på et lignende spørgsmål på DBA.StackExchange: Bringe webtjenestedata til SQL-server


  1. Kan jeg bruge transaktionslignende kapacitet i MySQL trigger

  2. Sådan migreres WHMCS-databasen til MariaDB Galera Cluster

  3. OOP PHP BOB Mit første projekt, gør jeg rigtigt?

  4. Sammensæt streng i MYSQL