Si prega di non utilizzare le procedure di automazione OLE sp_OA*
. Non sembrano essere ufficialmente deprecati, ma SQLCLR sostituisce sia le procedure di automazione OLE sia le stored procedure estese.
Sì, questo può essere fatto abbastanza facilmente in SQLCLR. Puoi trovare esempi sull'uso di WCF (come mostrato nella risposta di @ CodeCaster) o sull'uso di HttpWebRequest/HttpWebResponse (ho più informazioni in questa risposta: How to invoke webservice from SQL Server stored procedure). Inoltre, si prega di essere consapevoli del fatto che a volte è necessario aggiungere anche l'assembly di serializzazione: Using Webservices and Xml Serialization in CLR Integration
Codifica e manutenzione
Web Services forniscono un bel API, ma se si modifica la struttura si dovrà ricompilare e ridistribuire a almeno una parte di questo. Supponendo che le informazioni scambiate siano abbastanza semplici, tendo a pensare che trattarle come una richiesta web standard aggiunga molta flessibilità. È possibile creare una funzione di richiesta Web generica (scalare o TVF) che includa i parametri e l'URI e costruisca la richiesta XML correttamente formattata e la invii all'URI. Quindi ottiene la risposta e restituisce semplicemente l'XML. Quindi si sposta un po 'di responsabilità dal momento che ora è necessario analizzare la risposta XML piuttosto che ottenere un oggetto piacevole. Tuttavia, XML è facile da analizzare in SQL Server e puoi riutilizzare questa funzione in qualsiasi numero di posizioni. Inoltre, se il servizio remoto viene aggiornato, aggiornare una stored procedure per modificare la stringa di query passata al servizio Web e/o modificare l'analisi della risposta XML è una semplice procedura ALTER e dovrebbe essere facile da verificare. Non è necessario ricompilare/ridistribuire il gruppo SQLCLR.
Security
Indipendentemente da come "pura" di un servizio Web Call si desidera, la cosa principale, la sicurezza saggio, è quello di NON essere pigro e girare TRUSTWORTHY ON
(come mostrato anche nella pagina collegata da @ La risposta di CodeCaster, e sfortunatamente la maggior parte degli altri esempi qui sull'interwebs).Il modo corretto per rendere questo sicuro è quello di effettuare le seguenti operazioni:
- Iscriviti vostra Assemblea
- Nel database
[master]
, creare una chiave asimmetrica dalla DLL della vostra Assemblea.
- Inoltre
[master]
, creare un accesso da quella asimmetrica Key
- Fa 'un nuovo login al
EXTERNAL ACCESS ASSEMBLY
permesso
- Create la vostra Assemblea con un
PERMISSION_SET
di EXTERNAL_ACCESS
, nonUNSAFE
fonte
2015-10-01 00:09:31