Un po’ di tempo fa, non ricordo dove (forse proprio qui sui blogs di UGI) ho letto della possibilità di creare un web service direttamente da SQL Server 2005/2008, esponendo una stored procedure come endpoint, non ricordo l’autore dell'articolo, ma mi ero segnato uno dei link presenti nell’articolo originale (http://msdn.microsoft.com/it-it/library/cc185116.aspx) che spiegava come farlo.

 

In questi giorni ho avuto la necessità di creare “al volo” un paio di web service per dei test, quindi, quale miglior modo che provare a farli direttamente da SLQ Server?

 

Quindi andiamo per ordine…

 

1 - Creare le stored procedure che si vogliono esporre.

 

2 - Esporle:

 

CREATE ENDPOINT myTestSQLEndpoint
STATE = STARTED
AS HTTP
(
    PATH = '/test',
    AUTHENTICATION = (INTEGRATED), CLEAR_PORT = 8080,
    PORTS = (CLEAR),
    SITE = 'localhost'
   )
FOR SOAP
(
   WEBMETHOD 'Execute1' (name='sp_MyExposedStoredProcedure1', SCHEMA=STANDARD )
   WEBMETHOD 'Execute2' (name='sp_MyExposedStoredProcedure2', SCHEMA=STANDARD )
   WSDL = DEFAULT,
   SCHEMA = STANDARD,
   DATABASE = 'mydatabase',
   NAMESPACE = 'http://www.mynamespace.org/'
   );
GO

 

Riporto parte dell’articolo presente su msdn che spiega il significato delle varie istruzioni:

La prima parte dell’istruzione “.. AS HTTP …” definisce tutte le informazioni relative al protocollo di trasmissione, l’eventuale porta di comunicazione e la modalità di autenticazione.

PATH: l’URL virtuale dove risiederà il nostro web service.

PORTS: specifica l’utilizzo del protocollo HTTP su porta 80 di default, piuttosto che HTTPS (SSL, con porta 443 di default).

SITE: il nome del server dove il nostro WS sta girando.

La seconda parte “… FOR SOAP…” definisce i metodi che saranno resi disponibili all’esterno, la tipologia di WSDL, il database di utilizzo.

Da ricordare che le istruzioni sugli oggetti ENDPOINT possono essere compiute solo da:

  • Membri appartenenti al ruolo sysadmin
  • Proprietari degli ENDPOINT
  • Utenti ( gruppi) a cui è stato concesso il CONNECT sull’ENDPOINT