Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So rufen Sie den Webservice von einer gespeicherten SQL Server-Prozedur auf

Für so etwas benötigen Sie keine vollständige Webdienstimplementierung. Sie können SQLCLR (die .NET-Integration von SQL Server) verwenden, um die Anfrage an die URL zu senden und die Antwort in XML zurückzuerhalten (es sei denn, Sie finden eine JSON-Bibliothek, die ohne funktioniert auf UNSAFE gesetzt wird ), und parsen Sie dann diese Antwort.

Sehen Sie sich die folgenden MSDN-Seiten an:

  • HttpWebRequest
  • HttpWebResponse
  • XmlDocument
  • Um die Adresse zu maskieren:
    • Wenn Sie SQL Server 2005, 2008 oder 2008 R2 verwenden, verwenden Sie Uri.EscapeDataString wie es vor .NET Framework v4.5 verfügbar war
    • Wenn Sie SQL Server 2012, 2014 oder neuer verwenden, können Sie entweder Uri.EscapeDataString verwenden oder, wenn der Server mindestens auf .NET Framework v4.5 aktualisiert wurde, alternativ WebUtility.UrlEncode

Gemäß der Google Geocoding API-Dokumentation , sollte der API-URI ähnlich wie folgt formatiert sein:

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

Senden Sie das einfach mit diesen 2 Variablen, die durch ihre richtigen Werte ersetzt werden, über HttpWebRequest , und rufen Sie dann HttpWebRequest.GetResponse auf , und rufen Sie dann HttpWebResponse.GetResponseStream auf . Und nicht vergessen, Close aufzurufen und Dispose Methoden von HttpWebResponse (oder in einem using instanziieren blockieren)!!

Zusätzliche Anmerkungen:

  • Falls noch nicht geschehen, müssen Sie (einmalig) die "CLR-Integration" auf Serverebene aktivieren:CLR-Integration aktivieren
  • Nehmen Sie nicht den einfachen Weg und stellen Sie die Datenbank auf TRUSTWORTHY ON . Signieren Sie einfach die Assembly mit einem Passwort und erstellen Sie dann einen asymmetrischen Schlüssel im master Datenbank, indem Sie auf Ihre signierte DLL verweisen, erstellen Sie dann ein Login aus diesem asymmetrischen Schlüssel und gewähren Sie diesem Login schließlich die UNSAFE ASSEMBLY Genehmigung. Dann können Sie die Assembly WITH PERMISSION_SET = EXTERNAL_ACCESS setzen .
  • Verwenden Sie die SP_OA*-Prozeduren nicht wie vom Benutzer 3469363 empfohlen . Diese OLE-Automatisierungsprozeduren sind seit SQL Server 2005 veraltet und werden (hoffentlich) eines Tages (hoffentlich bald) entfernt. Sie sind auch weniger effizient und weniger sicher als SQLCLR.
  • Noch mehr Hinweise finden Sie in meiner Antwort auf eine ähnliche Frage zu DBA.StackExchange: Webdienstdaten in den SQL-Server bringen