Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como invocar o webservice do procedimento armazenado do SQL Server


Para algo assim, você não precisa de uma implementação de serviço web completa. Você pode usar SQLCLR (SQL Server's .NET Integration) para enviar a solicitação para a URL, obter a resposta de volta em XML (a menos que você encontre uma biblioteca JSON que funcione sem sendo definido como UNSAFE ) e, em seguida, analise essa resposta.

Veja as seguintes páginas do MSDN:
  • HttpWebRequest
  • HttpWebResponse
  • XmlDocument
  • Para escapar do endereço:
    • Se você estiver usando o SQL Server 2005, 2008 ou 2008 R2, use Uri.EscapeDataString como estava disponível antes do .NET Framework v4.5
    • Se você estiver usando o SQL Server 2012, 2014 ou mais recente, poderá usar Uri.EscapeDataString ou, se o servidor tiver sido atualizado para pelo menos .NET Framework v4.5, poderá usar alternativamente WebUtility.UrlEncode

De acordo com a documentação da Google Geocoding API , o URI da API deve ser formatado de forma semelhante ao seguinte:
https://maps.googleapis.com/maps/api/geocode/xml?address={EscapedAddress}&key={API_KEY}

Basta enviar isso com essas 2 variáveis ​​substituídas por seus valores apropriados via HttpWebRequest , então chame HttpWebRequest.GetResponse , então chame HttpWebResponse.GetResponseStream . E não esqueça de chamar o Close e Dispose métodos de HttpWebResponse (ou instanciá-lo em um using quadra)!!

Notas Adicionais:
  • Se ainda não tiver feito, você terá que habilitar (uma vez) a "Integração CLR" no nível do servidor:Habilitando integração CLR
  • Não pegue o caminho mais fácil e defina o banco de dados como TRUSTWORTHY ON . Basta assinar o assembly com uma senha e criar uma chave assimétrica no master banco de dados apontando para sua DLL assinada, crie um login a partir dessa chave assimétrica e, finalmente, conceda a esse login o UNSAFE ASSEMBLY permissão. Então você pode definir o assembly WITH PERMISSION_SET = EXTERNAL_ACCESS .
  • Não use os procedimentos SP_OA* conforme defendido pelo usuário3469363 . Esses procedimentos de automação OLE foram preteridos desde o SQL Server 2005 e (espero) serão removidos algum dia (espero que em breve). Eles também são menos eficientes e menos seguros que o SQLCLR.
  • Ainda mais observações podem ser encontradas na minha resposta a uma pergunta semelhante no DBA.StackExchange: Trazendo dados de serviço da Web para o SQL Server