Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wywołać webservice z procedury składowanej SQL Server

Do czegoś takiego nie potrzebujesz pełnej implementacji usługi sieciowej. Możesz użyć SQLCLR (SQL Server's .NET Integration), aby przesłać żądanie do adresu URL, uzyskać odpowiedź z powrotem w formacie XML (chyba że możesz znaleźć bibliotekę JSON, która będzie działać bez ustawienie UNSAFE ), a następnie przeanalizuj tę odpowiedź.

Spójrz na następujące strony MSDN:

  • HttpWebRequest
  • HttpWebResponse
  • XmlDocument
  • Aby zmienić adres:
    • Jeśli używasz SQL Server 2005, 2008 lub 2008 R2, użyj Uri.EscapeDataString ponieważ był dostępny przed .NET Framework v4.5
    • Jeśli używasz programu SQL Server 2012, 2014 lub nowszego, możesz użyć Uri.EscapeDataString lub, jeśli serwer został zaktualizowany do co najmniej .NET Framework v4.5, możesz alternatywnie użyć WebUtility.UrlEncode

Zgodnie z dokumentacją interfejsu API Google Geocoding , identyfikator URI interfejsu API powinien być sformatowany podobnie do następującego:

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

Po prostu prześlij to z tymi 2 zmiennymi podstawionymi ich odpowiednimi wartościami za pomocą HttpWebRequest , a następnie wywołaj HttpWebRequest.GetResponse , a następnie wywołaj HttpWebResponse.GetResponseStream . I nie zapomnij wywołać Close i Dispose metody HttpWebResponse (lub stwórz jego instancję w using blok)!!

Dodatkowe uwagi:

  • Jeśli jeszcze tego nie zrobiłeś, będziesz musiał (jednorazowo) włączyć „Integrację CLR” na poziomie serwera:Włączanie integracji CLR
  • Nie idź na łatwiznę i ustaw bazę danych na TRUSTWORTHY ON . Wystarczy podpisać zestaw hasłem, a następnie utworzyć klucz asymetryczny w master bazy danych, wskazując na podpisaną bibliotekę DLL, a następnie utwórz login z tego klucza asymetrycznego i na koniec przyznaj temu loginowi UNSAFE ASSEMBLY pozwolenie. Następnie możesz ustawić zestaw WITH PERMISSION_SET = EXTERNAL_ACCESS .
  • Nie używaj procedur SP_OA* jako polecanej przez użytkownika 3469363 . Te procedury automatyzacji OLE są przestarzałe od SQL Server 2005 i zostaną (miejmy nadzieję) usunięte pewnego dnia (miejmy nadzieję, że wkrótce). Są również mniej wydajne i mniej bezpieczne niż SQLCLR.
  • Jeszcze więcej uwag można znaleźć w mojej odpowiedzi na podobne pytanie na DBA.StackExchange: Wprowadzanie danych usługi sieciowej do serwera SQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz serwer połączony między dwoma kontenerami platformy Docker z uruchomionym programem SQL Server (przykład T-SQL)

  2. Połącz wiele wierszy z wielu tabel

  3. SQL Server REPLACE() vs TRANSLATE():jakie są różnice?

  4. SQL:Zaktualizuj wiersz i zwróć wartość kolumny za pomocą 1 zapytania

  5. SQL Async Wiele zapytań łączy wyniki — maksymalna liczba wyników (górne XYZ)