sql >> Databáze >  >> RDS >> Sqlserver

Jak vyvolat webovou službu z uložené procedury SQL Server

K něčemu takovému nepotřebujete úplnou implementaci webové služby. K odeslání požadavku na adresu URL můžete použít SQLCLR (SQL Server's .NET Integration), získat odpověď zpět v XML (pokud nenajdete knihovnu JSON, která bude fungovat bez nastaven na UNSAFE ) a poté tuto odpověď analyzujte.

Podívejte se na následující stránky MSDN:

  • HttpWebRequest
  • HttpWebResponse
  • XmlDocument
  • Uniknutí adresy:
    • Pokud používáte SQL Server 2005, 2008 nebo 2008 R2, použijte Uri.EscapeDataString jak bylo k dispozici před .NET Framework v4.5
    • Pokud používáte SQL Server 2012, 2014 nebo novější, můžete použít buď Uri.EscapeDataString, nebo, pokud byl server aktualizován alespoň na .NET Framework v4.5, můžete alternativně použít WebUtility.UrlEncode

Podle dokumentace Google Geocoding API , API URI by mělo být formátováno podobně jako následující:

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

Stačí to odeslat s těmito 2 proměnnými nahrazenými jejich správnými hodnotami prostřednictvím HttpWebRequest a poté zavolejte HttpWebRequest.GetResponse a poté zavolejte HttpWebResponse.GetResponseStream . A to ne zapomeňte zavolat Close a Dispose metody HttpWebResponse (nebo jej vytvořte instancí v using blok)!!

Další poznámky:

  • Pokud jste tak ještě neučinili, budete muset (jednorázově) povolit „integraci CLR“ na úrovni serveru:Povolení integrace CLR
  • Nenastavujte databázi na TRUSTWORTHY ON . Stačí sestavu podepsat heslem a poté vytvořit asymetrický klíč v master databázi tak, že ukážete na vaši podepsanou knihovnu DLL, poté vytvoříte přihlašovací jméno z tohoto asymetrického klíče a nakonec tomuto přihlášení udělíte UNSAFE ASSEMBLY povolení. Poté můžete nastavit sestavu WITH PERMISSION_SET = EXTERNAL_ACCESS .
  • Nepoužívejte postupy SP_OA*, jak je doporučuje uživatel3469363 . Tyto procedury automatizace OLE byly od SQL Server 2005 zastaralé a budou (doufejme) jednou (doufejme) odstraněny. Jsou také méně efektivní a méně bezpečné než SQLCLR.
  • Ještě více poznámek lze nalézt v mé odpovědi na podobnou otázku na DBA.StackExchange: Přenesení dat webových služeb na SQL server


  1. Odkazuje na proměnné relace (\set var='value') z PL/PGSQL

  2. Java Oracle příkaz jdbc SELECT

  3. Zkopírujte výsledky z pohledu PostgreSQL v jedné DB do tabulky v jiné

  4. Je jeden příkaz SQL Server atomický a konzistentní?