sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo invocar el servicio web desde el procedimiento almacenado de SQL Server

Para algo como esto, no necesita una implementación completa del servicio web. Puede usar SQLCLR (Integración .NET de SQL Server) para enviar la solicitud a la URL, obtener la respuesta en XML (a menos que pueda encontrar una biblioteca JSON que funcione sin se establece en UNSAFE ), y luego analice esa respuesta.

Mire las siguientes páginas de MSDN:

Según la documentación de la API de codificación geográfica de Google , el URI de la API debe tener un formato similar al siguiente:

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

Simplemente envíe eso con esas 2 variables sustituidas con sus valores adecuados a través de HttpWebRequest , luego llama a HttpWebRequest.GetResponse , luego llama a HttpWebResponse.GetResponseStream . Y no olvida llamar al Close y Dispose métodos de HttpWebResponse (o instanciarlo en un using bloque)!!

Notas adicionales:

  • Si aún no lo ha hecho, deberá habilitar (una vez) "Integración CLR" a nivel de servidor:Habilitación de la integración CLR
  • No tome el camino fácil y establezca la base de datos en TRUSTWORTHY ON . Simplemente firme el ensamblaje con una contraseña, luego cree una clave asimétrica en el master base de datos apuntando a su DLL firmada, luego cree un inicio de sesión a partir de esa clave asimétrica y finalmente otorgue a ese inicio de sesión el UNSAFE ASSEMBLY permiso. Luego puede configurar el ensamblado WITH PERMISSION_SET = EXTERNAL_ACCESS .
  • No use los procedimientos SP_OA* como recomendado por user3469363 . Esos procedimientos de automatización OLE han quedado obsoletos desde SQL Server 2005 y (con suerte) se eliminarán algún día (con suerte pronto). También son menos eficientes y menos seguros que SQLCLR.
  • Se pueden encontrar aún más notas en mi respuesta a una pregunta similar en DBA.StackExchange: Llevar datos del servicio web al servidor SQL