Sie sind auf Seite 1von 4

Soporte nativo para servicios web en SQL Server 2005

Octavio Hernndez | DANYSOFT Introduccin


La prxima versin de Microsoft SQL Server, conocida ya oficialmente como SQL Server 2005, incluir una gran cantidad que novedades que ampliarn enormemente el espectro de posibilidades de aplicacin de este popular Sistema de Gestin de Bases de Datos Relacionales. En el pasado mes de marzo dedicamos una jornada completa del IV Encuentro de Programadores Microsoft/DANYSOFT a presentar las principales nuevas caractersticas de esta herramienta. Los interesados pueden descargar las presentaciones y ejemplos de nuestro sitio web, http://www.danysoft.com. El objetivo de este artculo es presentar una de las nuevas caractersticas integradas en SQL Server 2005 que no tuvimos tiempo de cubrir detalladamente en aquella ocasin (es tanto el material nuevo!): el soporte nativo para la publicacin (directamente desde el motor de bases de datos, y sin necesidad de mediacin de Internet Information Services, IIS) de servicios web XML. Esta nueva posibilidad se aade al amplio espectro de caractersticas incluidas en los diferentes productos de Microsoft para dar soporte a la Arquitectura Orientada a Servicios (Service Oriented Architecture - SOA). Los ejemplos que se presentan ha sido desarrollados y probados utilizando versiones beta de SQL Server 2005 y Visual Studio 2005, y por lo tanto podran necesitar algunas modificaciones cuando aparezcan las versiones definitivas de esos productos.

La base de datos de ejemplo


A lo largo de este artculo utilizaremos una base de datos muy sencilla que hemos llamado Amigos. Consiste de dos tablas, Amigos y Paises, entre las que existe una relacin de integridad referencial. Asimismo, la base de datos incluye un procedimiento almacenado SP_CumplenEnMes, que produce un conjunto de filas con los amigos que cumplen aos en un mes determinado. Hemos seleccionado este procedimiento por el hecho de que devuelve un conjunto de datos; por supuesto, tambin es posible asociar servicios web a procedimientos que devuelvan valores escalares o no devuelvan nada, as como a funciones definidas por el usuario que devuelvan un resultado escalar o a secuencias de instrucciones (batches) de sentencias Transact-SQL. El cdigo Transact-SQL utilizado para crear estos objetos de base de datos es el siguiente: /* Tablas */ CREATE TABLE Paises ( ID char(2), Nombre varchar(50), CONSTRAINT PK_Paises PRIMARY KEY CLUSTERED (ID), CONSTRAINT CK_Paises CHECK (len(ID)=2) ) GO CREATE TABLE Amigos ( ID int IDENTITY(1,1) NOT NULL, Apellidos varchar(70) NOT NULL, Nombre varchar(50) NOT NULL, Fecha_Nac datetime NULL, ID_Pais char(2) NULL,
Artculos tcnicos | Valor aadido Danysoft | www.danysoft.com | Pgina 1/4

Apellidos_Nombre AS (Apellidos + ', ' + Nombre), CONSTRAINT PK_Amigos PRIMARY KEY CLUSTERED (ID), CONSTRAINT FK_Amigos_Paises FOREIGN KEY (ID_Pais) REFERENCES Paises(ID) ) GO /* Procedimiento */ CREATE PROCEDURE SP_CumplenEnMes @MES int AS SELECT Apellidos_Nombre, Fecha_Nac FROM Amigos WHERE MONTH(Fecha_Nac) = @MES ORDER BY Fecha_Nac GO

Publicacin de un servicio web de SQL Server 2005


Mucho se ha escrito sobre las ventajas que ofrecen los servicios web XML, as que no hablaremos mucho al respecto aqu. Baste con decir que los servicios web se apoyan en estndares universalmente aceptados como HTTP y SOAP (XML), por lo que pueden ser consumidos desde las ms diversas plataformas y lenguajes de programacin. Para publicar objetos de la base de datos como servicios web, la infraestructura de Windows 2003 Server y posteriores ofrece el concepto de punto de destino HTTP (HTTP endpoint). Por cada servicio web a publicar, SQL Server 2005 debe registrar un punto de destino en HTTP.SYS (la API de HTTP de Windows), de modo que las peticiones HTTP correspondientes sean reconocidas por HTTP.SYS y enrutadas por ste hacia el servidor de SQL Server. Esto hace irrelevante la presencia o no de IIS (Internet Information Services) en el equipo servidor. El registro de un punto de destino HTTP se realiza utilizando una nueva sentencia DDL, CREATE ENDPOINT: CREATE ENDPOINT sql_Amigos STATE = STARTED AS HTTP ( PATH = '/sql/Amigos', AUTHENTICATION = (INTEGRATED), PORTS = (CLEAR) ) FOR SOAP ( WEBMETHOD 'CumplenEnMes' (name='Amigos.dbo.SP_CumplenEnMes', schema=STANDARD), WSDL = DEFAULT, BATCHES = ENABLED, DATABASE = 'Amigos' ) Eso es todo! Puede comprobar que el servicio web est en funcionamiento solicitando el esquema WSDL del mismo, escribiendo en el navegador la URL: http://localhost/sql/Amigos?WSDL La descripcin detallada de todas las posibilidades que ofrece la sentencia CREATE ENDPOINT de SQL Server 2005 queda fuera del alcance de este artculo. Remitimos al lector a la
Artculos tcnicos | Valor aadido Danysoft | www.danysoft.com | Pgina 2/4

documentacin en lnea del producto, nica fuente oficial de referencia por el momento. S mencionaremos que estas posibilidades son muy amplias, y que se ha puesto especial nfasis en todo lo relacionado con la seguridad, aspecto esencial en todas las propuestas de Microsoft desde la publicacin de su Iniciativa para una Informtica Fiable.

Consumo de un servicio web de SQL Server 2005


Una vez publicado el servicio, podemos crear una aplicacin cliente que lo utilice. Para ello utilizaremos Visual Studio 2005, aunque en principio el desarrollo no se diferencia mucho del que podramos hacer utilizando la versin actual de producto, Visual Studio .NET 2003. La eleccin del lenguaje o la tecnologa de consumidora tampoco es relevante en este caso, pero por razones de preferencia personal y simplicidad utilizaremos C# y una aplicacin Windows Forms. La clave, como siempre, reside en aprovechar la definicin WSDL para crear una clase proxy que encapsula toda la complejidad de la comunicacin y codificacin/decodificacin de los mensajes SOAP de peticin/respuesta:

Una vez que disponemos de esa clase, es muy sencillo crear una instancia de ella y llamar al mtodo generado para la operacin del servicio web que nos interesa: private void button1_Click(object sender, EventArgs e) { localhost.sql_Amigos proxy = new localhost.sql_Amigos(); proxy.Credentials = System.Net.CredentialCache.DefaultCredentials; object[] res = proxy.CumplenEnMes(comboBox1.SelectedIndex + 1); if (res[0].ToString() == "System.Data.DataSet") {
Artculos tcnicos | Valor aadido Danysoft | www.danysoft.com | Pgina 3/4

DataSet ds = (DataSet)res[0]; dataGridView1.DataSource = ds; dataGridView1.DataMember = ds.Tables[0].TableName; } } Observe que es necesario indicar las credenciales de seguridad del usuario que hace la llamada al servicio web. En este caso utilizamos las del usuario interactivo. Es de destacar igualmente que la respuesta obtenida del servicio web es un array de objetos que incluye el conjunto de resultados, la cantidad de filas y los mensajes de error. La documentacin en lnea de SQL Server 2005 ofrece todos los detalles. La siguiente imagen de pantalla muestra a la aplicacin de ejemplo en ejecucin:

Elementos a tener en cuenta al utilizar los servicios web de SQL Server 2005
La aparicin del soporte nativo para los servicios web HTTP, al igual que otras caractersticas incluidas por primera vez en SQL Server 2005 como la integracin del CLR (Common Language Runtime - el Motor Comn de Ejecucin de .NET), ha despertado la preocupacin de no pocos especialistas en arquitectura de aplicaciones, que han expresado el temor de que se comience a abusar de estas nuevas caractersticas, en detrimento de la concepcin arquitectnica comnmente aceptada en la actualidad basada en mltiples capas y objetos de negocio para la transmisin entre capas. Personalmente en este tema me siento ms cerca del rea "liberal", y pienso que la inclusin de esas caractersticas es positiva y necesaria, an a riesgo de que se utilicen incorrectamente. A falta an de guas claras de utilizacin de estas tecnologas, que irn apareciendo en el transcurso de los prximos meses, guese siempre por su sentido comn a la hora de decidir sobre su aplicacin para la solucin de los problemas que se le presenten.

Conclusiones
La capacidad de publicar directamente como servicios web XML el cdigo y a fin de cuentas los datos almacenados en bases de datos SQL Server 2005 abre todo un espectro de nuevas posibilidades de desarrollo de aplicaciones basadas en servicios que seguro usted sabr aprovechar, teniendo en cuenta las ideas generales que se presentan en este artculo.

Artculos tcnicos | Valor aadido Danysoft | www.danysoft.com | Pgina 4/4

Das könnte Ihnen auch gefallen