WEB SERVICES TUTORIAL Tutorial completo para poder crear y utilizar Web Services con las configuraciones más usadas de forma profesional. 1/29/2013
INTRODUCCIÓN... II WEB SERVICES... II PRINCIPALES VENTAJAS... II SIMPLE OBJECT ACCESS PROTOCOL... II WEB SERVICES DESCRIPTION LANGUAGE... II PRACTICA 1... III CÓDIGO... III EXPLICACIÓN DE CÓDIGO... III WEB REFERENCE... IV CONCEPTO... IV PRACTICA 2... IV WEB REFERENCE... IV CÓDIGO... V EXPLICACIÓN DE CÓDIGO... V SERVICE REFERENCE... VII CONCEPTO... VII PRACTICA 3... VII SERVICE REFERENCE... VII CÓDIGO... VIII EXPLICACIÓN DE CÓDIGO... VIII PRACTICA 4... IX JQUERY... IX CÓDIGO JAVASCRIPT... IX CÓDIGO HTML... IX EXPLICACIÓN DE CÓDIGO... X PAGE METHODS... X CONCEPTO... X PRACTICA 5... X PAGE METHODS... X SEGURIDAD... XI TIPOS DE SEGURIDAD EN UN WEB SERVICE... XI PRACTICA 6... XI BASIC AUTHENTICATION... XI
INTRODUCCIÓN WEB SERVICES Permite publicar funcionalidad a otras aplicaciones Utiliza XML para codificar y decodificar los datos Utiliza SOAP para transportar los datos PRINCIPALES VENTAJAS Reutilizar aplicaciones Conectar aplicaciones ya existentes SIMPLE OBJECT ACCESS PROTOCOL Protocolo simple de acceso a objetos Diseñado para comunicarse a través de Internet Independiente de la plataforma Independiente del lenguaje Se basa en XML Simple y extensible WEB SERVICES DESCRIPTION LANGUAGE Lenguaje de descripción de servicios Web Lenguaje basado en XML para la localización y descripción de servicios Web. Se utiliza para describir servicios Web Se utiliza para localizar servicios Web II
PRACTICA 1 CÓDIGO A partir de un proyecto web se agrega un nuevo ítem de tipo Web Service, el código generado es el siguiente: [WebService( Namespace = "http://mx.neltic.practice.1/" )] [WebServiceBinding( ConformsTo = WsiProfiles.BasicProfile1_1 )] [System.Web.Script.Services.ScriptService] public class Practice : WebService { [WebMethod] public string Welcome( ) { return "Bienvenido al curso de Web Services"; } } EXPLICACIÓN DE CÓDIGO [WebService( Namespace = "http://mx.neltic.practice.1/" )] Permite definir el nombre con el que será identificado todo el Web Service, es importante que en un ambiente productivo no se repita este nombre y que no cambie entre modos de compilación (debug, release) ni de ambiente (desarrollo, calidad, producción) [WebServiceBinding( ConformsTo = WsiProfiles.BasicProfile1_1 )] Indica el perfil a usar, para mayor referencia consultar http://www.ws-i.org/profiles/basicprofile-1.1.html [System.Web.Script.Services.ScriptService] Permite utilizar el web service mediante una llamada tipo AJAX public class Practice : WebService Hereda de la clase Web Service toda la funcionalidad [WebMethod] Indica que este método se puede accesar mediante una instancia del web service III
WEB REFERENCE CONCEPTO PRACTICA 2 WEB REFERENCE Clase (intermediaria) generada localmente que representa la funcionalidad expuesta de un Web Service. La clase proxy define los métodos que representan los actuales métodos expuestos. Cuando la aplicación crea una instancia de la clase proxy, la aplicación puede llamar a los métodos del servicio como si el servicio fuera un componente local. Disponible directamente hasta la versión 2005, en adelante se ocupa Service Reference con la opción a ser compatible con Web Reference. Para agregar una referencia a un Web Service elegir la opción Add Service Reference Introducir el link de la practica 1 y buscar el documento WSDL (se puede introducir directamente el WSDL para una búsqueda mas rápida) IV
Ir a la opción Advanced y elegir en la sección compatibilidad Add Web Reference completar como en la imagen Ahora ya se puede realizar una instancia de la clase proxy. CÓDIGO using Practice2WS; public partial class WebReference : Page { protected void Page_Load( object sender, EventArgs e ) { Practice prcwsi = new Practice( ); lbltitle.text = prcwsi.welcome( ); lblpractice.text = prcwsi.getpractice( 2 ); lblmexicotime.text = DateTime.Now.ToString( "dd/mmm/yyyy HH:mm" ); lbljapantime.text = prcwsi.getjapantime( ).ToString( "dd/mmm/yyyy HH:mm" ); } } EXPLICACIÓN DE CÓDIGO using Practice2WS; Permite utilizar el Web Service como si fuera el Namespace de la clase. Practice prcwsi = new Practice( ); V
Crea una instancia de la clase proxy lbltitle.text = prcwsi.welcome( ); lblpractice.text = prcwsi.getpractice( 2 ); lbljapantime.text = prcwsi.getjapantime( ).ToString( "dd/mmm/yyyy HH:mm" ); Se utilizan los métodos expuestos por el Web Service VI
SERVICE REFERENCE CONCEPTO PRACTICA 3 SERVICE REFERENCE Clase (intermediaria) que representa la funcionalidad expuesta de un WCF-based Service; para referencia del uso de WCF visitar: http://msdn.microsoft.com/es-es/library/ms731082.aspx La clase proxy define los métodos que representan los actuales métodos expuestos. Cuando la aplicación crea una instancia de la clase proxy, la aplicación puede llamar a los métodos del servicio como si el servicio fuera un componente local. Para agregar una referencia a un Web Service elegir la opción Add Service Reference Introducir el link de la practica 1 y buscar el documento WSDL (se puede introducir directamente el WSDL para una búsqueda mas rápida) Ahora ya se puede realizar una instancia de la clase proxy. VII
CÓDIGO using mx.neltic.practice._3.practice3ws; class Program { static void Main( string[ ] args ) { PracticeSoapClient prcwsi = new PracticeSoapClient( ); Console.WriteLine( "Titilo:" + prcwsi.welcome( ) ); Console.WriteLine( "Practica:" + prcwsi.getpractice( 3 ) ); Console.WriteLine( "Horarios" ); Console.WriteLine( "Ciudad de México:" + DateTime.Now.ToString( "dd/mmm/yyyy HH:mm tt" ) ); Console.WriteLine( "Tokio:" + prcwsi.getjapantime( ).ToString( "dd/mmm/yyyy HH:mm tt" ) ); Console.WriteLine( "Teclea para finalizar..." ); Console.ReadKey( ); } } EXPLICACIÓN DE CÓDIGO using mx.neltic.practice._3.practice3ws; Permite utilizar el Web Service como si fuera el Namespace de la clase. PracticeSoapClient prcwsi = new PracticeSoapClient( ); Crea una instancia de la clase proxy, la diferencia con una instancia mediante Web Reference es que aquí la clase indica que su método de comunicación será SOAP y que se utilizara como cliente. Console.WriteLine( "Titilo:" + prcwsi.welcome( ) ); Console.WriteLine( "Practica:" + prcwsi.getpractice( 3 ) ); Console.WriteLine( "Tokio:" + prcwsi.getjapantime( ).ToString( "dd/mmm/yyyy HH:mm tt" ) ); Se utilizan los métodos expuestos por el Web Service de forma normal. VIII
PRACTICA 4 JQUERY La llamada a un Web Service se hace mediante una petición POST y el servidor debe soportar la salida mediante JSON, a partir de IIS 7 esto está por default, para versiones anteriores hay que realizar una función JavaScript o api especial para poder usar los Web Services correctamente. CÓDIGO JAVASCRIPT $(function () { var wspath = "http://localhost/mx.neltic.practice.1/practice.asmx/"; $.WebMethod(wspath + "Welcome", function (data) { $("#title").html(data); }); $.WebMethod(wspath + "GetPractice", "{'number':4}", function (data) { $("#practice").html(data); }); $("#mexico-time").html((new Date()).format("dd/mmm/yyyy HH:HH tt")); $.WebMethod(wspath + "GetJapanTime", function (data) { $("#japan-time").html(parsedate(data).format("dd/mmm/yyyy HH:HH tt")); }); CÓDIGO HTML }); <h1 id="title"></h1> <h2 id="practice"></h2> Horarios:<br /> Ciudad de México: <span id="mexico-time"></span> <br /> Tokio: <span id="japan-time"></span> <br /> IX
EXPLICACIÓN DE CÓDIGO var wspath = "http://localhost/mx.neltic.practice.1/practice.asmx/"; $.WebMethod(wspath + "Welcome", function (data) { $("#title").html(data); }); Se manda llamar un método del Web Service mediante una llamada POST, el dato regresado se puede asignar directamente a un elemento HTML. PAGE METHODS CONCEPTO PRACTICA 5 PAGE METHODS Se utilizan para llamar código que se resuelve en el servidor del lado del cliente. Son métodos estáticos, públicos y están identificados con el atributo [WebMethod]. Su mayor ventaja es solicitar solo fragmentos de código al servidor para permitir la interacción con el cliente. Su definición se puede realizar en el código de la misma página que realiza la interacción con el cliente. La llamada a un Page Method se hace mediante una petición POST y el servidor debe soportar la salida mediante JSON. Su definición se realiza en Code Behind y debe ser publica y estática. Utilizar código de la practica 1 y la 4 para completar el ejercicio. X
SEGURIDAD TIPOS DE SEGURIDAD EN UN WEB SERVICE Existen diferentes tipos de configuración para colocar seguridad en un Web Service, los más utilizados son: Basic/Digest: Permite solicitar usuario y contraseña para poder consumir el servicio Certificado: Permite consumir los métodos de un servicio siempre y cuando tenga el certificado correcto. PRACTICA 6 BASIC AUTHENTICATION Configurar el sitio de la practica 1 de forma que solo acepte peticiones mediante Basic Authentication Para poder consumir los datos mediante un Service Reference solo es necesario colocar las credenciales correctas antes de invocar cualquier método: PracticeSoapClient prcwsi = new PracticeSoapClient( ); prcwsi.clientcredentials.username.username = @"username"; prcwsi.clientcredentials.username.password = @"password"; XI