7/25/2006 7:21 PM Desarrollo de Aplicaciones Distribuidas con Servicios Web Tema 03 – Configuración de Servicios Web Ing. Javier Aranda Pantoja Microsoft Certified Professional javier@softwareandina.com 1 Agenda Formato de SOAP SOAP Extensions SOAP Headers Llamadas asíncronas Mejoras de Framework 2.0 2 Ing. Javier Aranda Pantoja Microsoft Certified Professional 1 7/25/2006 7:21 PM Objetivos Tener la capacidad de configurar el formato de los mensajes SOAP Configurar la forma en que se ejecuta un Servicio Web modificando los archivos de configuración Configurar la serialización de XML Tener la capacidad de trabajar con tipos de datos personalizados Poder pasar tipos de datos complejos entre el Servidor y el cliente Explicar porque son necesarias llamadas asíncronas en los clientes 3 Formato de SOAP Sobre (Envelope (Envelope)) Cabecera (Header) Cuerpo (Body) Mensage (Función) Parámetros (Tipos de datos) 4 Ing. Javier Aranda Pantoja Microsoft Certified Professional 2 7/25/2006 7:21 PM Formato de SOAP <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> soap:Body> <x:TransferFunds xmlns:x="urn:examples xmlns:x="urn:examples--org:banking"> <from>22 > from>22--342439</from 342439</from> <to>98 > to>98--283843</to 283843</to> <amount>100.00</ amount> > amount>100.00</amount </x:TransferFunds > </x:TransferFunds> </soap:Body > </soap:Body> </soap:Envelope > </soap:Envelope> 5 Formato de SOAP Esta formado por XML Es una forma de transportar objetos y sus propiedades de y hacia XML SOAP provee una gran flexibilidad para la conversión de objetos Se puede formatear de diferente forma: Los parámetros que contiene el Body El formato mismo de Body 6 Ing. Javier Aranda Pantoja Microsoft Certified Professional 3 7/25/2006 7:21 PM Formatos de SOAP Parámetros Literal. Formatea los parámetros de acuerdo a un esquema XSD. Codificado. Formatea los parámetros de acuerdo a las reglas de codificación de la sección 5 de SOAP. BODY Document Based. Los parámetros pueden separarse en elementos. Wrapped o Bare RPC Based. Todos los parametros estan dentro un elemento. Sigue las reglas de la sección 7 de SOAP. 7 Combinaciones de Formato Document based body + Literal params Document based body + Enconded params RPC based body + Enconded params 8 Ing. Javier Aranda Pantoja Microsoft Certified Professional 4 7/25/2006 7:21 PM Usando parámetros Literales Document based body + Literal params <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema--instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> soap:Body> <BuscarPorTitulo1 xmlns="http://certificacionIII.upb/"> xmlns="http://certificacionIII.upb/"> <Titulo>geo</ Titulo> > Titulo>geo</Titulo </BuscarPorTitulo1 > </BuscarPorTitulo1> </soap:Body > </soap:Body> </soap:Envelope > </soap:Envelope> 9 Usando parámetros Codificados Document based body + Enconded params <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://certificacionIII.upb/" xmlns:tns="http://certificacionIII.upb/" xmlns:types="http://certificacionIII.upb/encodedTypes" xmlns:types="http://certificacionIII.upb/encodedTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema--instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encodi soap:encodingStyle="http://schemas.xmlsoap.org/soap/encodi ng/"><types:BuscarPorTitulo1 > ng/"><types:BuscarPorTitulo1> >geo</Titulo Titulo> > <Titulo xsi:type="xsd:string" xsi:type="xsd:string">geo</ </types:BuscarPorTitulo1 > </types:BuscarPorTitulo1> </soap:Body ></soap:Envelope soap:Envelope > </soap:Body></ 10 Ing. Javier Aranda Pantoja Microsoft Certified Professional 5 7/25/2006 7:21 PM ¿Qué formato debemos usar? Dependiendo con el entorno con el que vamos a interoperar Cuando trabajemos con clientes que no sean de .NET Para volver la mensajería de nuestro servicio más flexible Usar parámetros codificados cuando los clientes necesiten información de los tipos de datos 11 Comparación de Formatos 800 700 600 500 Bytes 400 300 200 100 0 Literal Encoded Solicitud Respuesta Existe una diferencia porcentual del 92% en las solicitudes y 58% en las respuestas Ing. Javier Aranda Pantoja Microsoft Certified Professional 12 6 7/25/2006 7:21 PM Atributos SoapDocumentService SoapDocumentMethod Indica que el Servicio Web o un método esta formateado con Document-Based Parámetros importantes: Use=SoapBindingUse.Literal (Encoded) ParameterStyle=SoapParameterStyle.Wrapped OneWay 13 Atributos SoapRpcService SoapRpcMethod Indica que el Servicio Web o un método esta formateado con RPC-Based Parámetros importantes: OneWay 14 Ing. Javier Aranda Pantoja Microsoft Certified Professional 7 7/25/2006 7:21 PM Atributo XmlElement Permite especificar los detalles de bajo nivel del Formato SOAP. Sus parámetros: DataType ElementName Form IsNullable Namespace Type public List< List<Libro> Libro> BuscarPorTitulo1( [XmlElement(ElementName ="t")] string Titulo) XmlElement(ElementName= t")]string Titulo) 15 Atributo XmlIgnore Permite indicar que campos no deben ser serializados en objetos que se intercambian mediante los servicios Web Permite reducir la cantidad de información que se envía a través de la red 16 Ing. Javier Aranda Pantoja Microsoft Certified Professional 8 7/25/2006 7:21 PM SOAP Extensions Permiten modificar los mensajes SOAP entre el cliente y el servidor Nos permite insertar nuestro propio código en los mensajes SOAP Deben de distribuirse en pares tanto en el cliente como en el servidor 17 SOAP Extensions 3 4 1 2 Aplicación Servicio Web Deserializar Serializar SOAP Deserializar 2 Serializar 1 4 3 Podemos poner nuestro código en los siguientes puntos: 1. 2. 3. 4. Ing. Javier Aranda Pantoja Microsoft Certified Professional Antes de Deserializar Después de Deserializar Antes de Serializar Despues de Serializar 18 9 7/25/2006 7:21 PM Ejemplo Desea implementar un servicio Web que envié los mensajes SOAP codificados. No puede usar SSL ni tampoco WSE. 1. 2. 3. 4. 5. Derivar una clase de SoapExtension Implementar los métodos GetInitializer e Initialize para manejar parámetros de inicio Implementar el método ChainStream para interceptar el mensaje antes de serializar y deserializar Implementar el método ProcessMessage para trabajar con el mensaje SOAP Derivar una nueva clase de SoapExtensionAttribute 19 ¿Cuándo usar extensiones SOAP? Para implementar codificación en los mensajes SOAP Para firmar digitalmente y verificar los mensajes SOAP Para realizar el control de tráfico Para monitorear nuestra aplicación 20 Ing. Javier Aranda Pantoja Microsoft Certified Professional 10 7/25/2006 7:21 PM ¿En el cliente o en el servidor? Depende. La arquitectura de SOAP es flexible y permite aplicar una extensión donde corresponda Sólo en el servidor Sólo en el cliente En ambos 21 Attributo Priority Nos permite determinar en que prioridad u orden se van a ejecutar las extensiones SOAP 22 Ing. Javier Aranda Pantoja Microsoft Certified Professional 11 7/25/2006 7:21 PM SOAP Headers Sobre (Envelope (Envelope)) Cabecera (Header) Cuerpo (Body) Mensage (Función) Parámetros (Tipos de datos) 23 SOAP Headers SOAP tiene un elemento opcional Header que puede contener información adicional La información no necesariamente esta relacionada con el contenido del mensaje SOAP No existe una definición exacta de lo que puede contener un SOAP Header 24 Ing. Javier Aranda Pantoja Microsoft Certified Professional 12 7/25/2006 7:21 PM SOAP Headers Una cabecera SOAP puede contener: Información del enrutamiento del Mensaje Firma digital del mensaje SOAP Información relacionada a la autentificación Nombre de Usuario y Contraseña 25 Definición de SOAP Headers 1 . Su clase debe heredar de SoapHeader public class MySession : SoapHeader { public DateTime Created; public long Expires; } 2. Definir una atributo del tipo de su cabecera SOAP dentro la clase del SW public MySession timeStamp; timeStamp; 26 Ing. Javier Aranda Pantoja Microsoft Certified Professional 13 7/25/2006 7:21 PM Definición de SOAP Headers 3. Debe de usar el atributo SoapHeader [WebMethod] WebMethod] [SoapHeader( SoapHeader("timeStamp" "timeStamp")] public void MyWebMethod() MyWebMethod() { } 27 Procesamiento de SOAP Headers El cliente puede enviar y recibir SOAP Headers Las clases correspondientes a los SOAP Headers estan incluidas en las clases proxy MySession mySoapHeader = new MySession(); MySession(); mySoapHeader.Created = DateTime.Now ; DateTime.Now; mySoapHeader.Expires = 20; MyWebService proxy = new MyWebService(); MyWebService(); proxy.MySessionValue = mySoapHeader; mySoapHeader; 28 Ing. Javier Aranda Pantoja Microsoft Certified Professional 14 7/25/2006 7:21 PM Dirección de un SOAP Header Por defecto un SOAP Header es enviado del cliente al servicio Web Puede ser enviado: Del cliente al servicio Web Del servicio Web al Cliente En ambos sentidos Para cambiar la dirección usar el parámetro: Direction=SoapHeaderDirection.InOut 29 Manejo de SOAP Headers desconocidos El cliente puede enviar al servicio Web una cabecera SOAP que espera pero que no esta definida explícitamente. 30 Ing. Javier Aranda Pantoja Microsoft Certified Professional 15 7/25/2006 7:21 PM Ejemplo Usted ha escrito un servicio Web para intercambiar información financiera con sus clientes. Por restricciones de seguridad, requiere que cada vez que un cliente haga una llamada a su servicio Web se autentifique con un nombre de usuario y contraseña válidos, sólo en este caso el servicio Web será capaz de procesar la solicitud del cliente. 31 Manejo de Estado A nivel de aplicación A nivel de sesión Usando cookies ¿Cuál es el mejor manejo de estado en un Servicio Web? 32 Ing. Javier Aranda Pantoja Microsoft Certified Professional 16 7/25/2006 7:21 PM Mejoras en el Framework 2.0 APIs de alto nivel para exponer y consumir Servicios Web (p.e (p.e.. [WebMethod]) WebMethod]) Modelo de Programación De los Servicios Web Puntos de extensibilidad expuestos por los Servicios Web y la serializació serialización de XML Extensibilidad Servicios de infraestructura provistos para el despliegue y la conectividad Infraestructura 33 Ejemplo NetTunes NetTunesClient NetTunes WinForm IIS - ASMX Search Buy and Download Set Alert Search Order Download Song List Set Alert AlertsApplication MakeSongAvailable WinForm - HttpListener Console Song Available Songs Notify Clients 34 Ing. Javier Aranda Pantoja Microsoft Certified Professional 17 7/25/2006 7:21 PM Mejoras en el Modelo de Programación Modelo de Programación 35 Basic Profile Conformance WS-I Basic Profile es Un conjunto interoperable de SOAP, WSDL y HTTP Definido por la organización de Interoperabilidad de Servicios Web Fuertemente respaldado por todos los vendedores de Servicios Web ¿Qué es Basic Profile Conformance? Un conjunto de reglas especificadas por profile básico a las cuales un Servicio Web debe adherirse. PE: No usar codificación SOAP. 36 Ing. Javier Aranda Pantoja Microsoft Certified Professional 18 7/25/2006 7:21 PM Uso de BP en los Servicios Web Los servicios Web creados por VS 2005 están conformados por defecto. Fuera de servicio, no se necesita hacer nada extra. Estar alerta de la operaciones que no permite BP Se generarán avisos relacionados a BP en los servicios Web Los avisos están en la página de ayuda de los servicios Web. Simplemente migrando a VS 2005 sabrá si sus servicios Web son compatibles 37 Uso de BP en los Clientes Wsdl.exe verificará el WSDL para verificar la compatibilidad y emitirá avisos Le permitirá saber si el WSDL que esta usando esta conformado con BP Los clientes conforman con BP por defecto A menos que exista algo en el WSDL que prevenga este hecho como codificación de SOAP 38 Ing. Javier Aranda Pantoja Microsoft Certified Professional 19 7/25/2006 7:21 PM Valores Genéricos y Nulos Tipos de datos Genéricos son soportados por los Servicios Web Los proxies del servicio web no usarán tipos de datos genericos Nullable<T> Permite valores nulos Mapea a nullable=‘true’ en el esquema XML Muy útil cuando no se usa WSDLs de .NET 39 Generación de clases Proxy Modelo de programación asíncrono basado en eventos Llamar a XxxAsync y manejar el evento XxxCompleted El manejador del evento es llamado en el mismo proceso usado por el mé método así asíncrono. Usar en lugar de BeginXxx, BeginXxx, EndXxx Propiedades en lugar de atributos Para fortalecer el enlace a datos Tipos compartidos a través de los proxies Detecció Detección automá automática de esquemas equivalentes y se genera un tipo compartido El algoritmo compara nombre/namespace nombre/namespace y la equivalencia de tipos 40 Ing. Javier Aranda Pantoja Microsoft Certified Professional 20 7/25/2006 7:21 PM Ejemplo Realizar una llamada asíncrona usando el servicio Web de NetTunes 41 Soporte de SOAP 1.2 SOAP 1.2 es soportado como el nuevo protocolo En el lado del servidor Puede soportar ambos SOAP 1.1 y SOAP 1.2 Se puede habilitar y deshabilitar mediante el web.config En el lado del cliente Wsdl.exe tiene un parámetro para SOAP12 /protocol Las clases Proxy tienen una propiedad que maneja la versión. SoapProtocolVersion Ing. Javier Aranda Pantoja Microsoft Certified Professional 42 21 7/25/2006 7:21 PM Características de Extensibilidad Extensibilidad 43 IXmlSerializable IXmlSerializable disponible desde .NET Framework 1.0 pero no documentado y específico a los DataSets .NET Framework 2.0 crea [XmlSchemaProvider] Usado con IXmlSerializable para indicar el método estático invocado para generar el esquema IXmlSerializable.GetSchema NO es usado ReadXml y WriteXml son llamados en tiempo de ejecución para serialización imperativa 44 Ing. Javier Aranda Pantoja Microsoft Certified Professional 22 7/25/2006 7:21 PM Ejemplo de serialización personalizada con IXmlSerializable 45 Extensiones para importar Esquemas Un SchemaImporterExtension es Nueva clase abstracta que permite generación de código personalizada al momento de importar esquemas. Las extensiones heredan de la clase base e implementan una comparación de esquemas Opciones de comparación de esquemas Namespace Element Shape matching 46 Ing. Javier Aranda Pantoja Microsoft Certified Professional 23 7/25/2006 7:21 PM Extensiones para importar Esquemas Las extensiones pueden ser agregadas progamaticamente o mediante el archivo de configuración A nivel de aplicación y a nivel de máquina Llamados en el momento de generar la clases proxy del código de los esquemas y el WSDL Las extensiones son invocadas en el orden de su configuración. 47 Mejoras en la Infraestructura Infraestructura 48 Ing. Javier Aranda Pantoja Microsoft Certified Professional 24 7/25/2006 7:21 PM Pre generar ensamblados de Serialización Problema Los serializador de XML generan ensamblados en tiempo de ejecución para serializar tipos Existe un cierto percance en generar estos ensamblados Solución Una nueva herramienta (sgen.exe) permite pre generar estos ensamblados en desarrollo o en tiempo de despliegue 49 Información de la Red Permite a las aplicaciones proveer una mejor experiencia al usuario estando más alertas de las condiciones de la red Provee notificaciones en forma de eventos cuando ocurren cambios en la Red P.E. P.E. direcciones cambian, el cable se desconecta, etc. Provee un API de enumeración de tarjetas en la máquina. P.E. P.E. Es Ethernet, Ethernet, dialdial-up, wireless? wireless? Obtener estadí estadísticas de IP, TCP, UD Abrir conexiones, escuchar puertos, etc. 50 Ing. Javier Aranda Pantoja Microsoft Certified Professional 25 7/25/2006 7:21 PM Ejemplo Detectando y reaccionando a los cambios de la Red 51 Alojando Servicios Web en el Escritorio Frecuentemente los servicios Web son requeridos en aplicaciones de escritorio P.E. Dos aplicaciones de escritorio comunicándose a través del la Red P.E. Una aplicación de escritorio que expone un servicio esperando una respuesta Con el .NET Framework 2.0 puede alojar servicios Web sin IIS HttpListener usa http.sys Disponible en Windows Server 2003 y Windows XP SP2 Ing. Javier Aranda Pantoja Microsoft Certified Professional 52 26 7/25/2006 7:21 PM Vista detallada de las Alertas AlertsApplication .NET Remoting IPC call WinForm Alerts UI AppDomain Hidden Form MakeSongAvailable Console Notification.asmx AppDomain Song Available Notify Clients Song List HttpListener http.sys 53 Ejemplo Alojar un Servicio Web en una aplicación de escritorio 54 Ing. Javier Aranda Pantoja Microsoft Certified Professional 27 7/25/2006 7:21 PM Compresión de la respuesta de HTTP IIS en windows server 2003 soporta compresión de la respuesta de HTTP Muy útil en escenarios donde el ancho de banda signifique una inversión muy grande. Mejora el rendimiento en entornos con ancho de banda limitado .NET Framework 2.0 soporta descompresión Puede habilitar la descompresión en las respuestas del servicio web 55 Descubrimiento automático del Proxy Permite que el código manejado detecte automáticamente la configuración del proxy Implementación Integrada Comparte configuraciones usadas por IE Detecta los cambios de proxy en tiempo de ejecución 56 Ing. Javier Aranda Pantoja Microsoft Certified Professional 28 7/25/2006 7:21 PM Arquitectura del cliente (Basada en un cliente de ASP.NET) Clases Proxy SoapHttpClientProtocol HttpWebClientProtocol WebClientProtocol IIS 57 Arquitectura del servidor (Basada en ASP.NET y Serializació Serialización de XML) IIS ISAPI Filters ASP.NET Runtime HTTP Module HTTP Module Web Service Request Handler SOAP Extension SOAP Extension Ing. Javier Aranda Pantoja Microsoft Certified Professional IIS maneja la solicitud Aspnet_isapi.dll direcciona la solicitud asmx ASPNET WP procesa la solicitud (HttpRuntime) HttpRuntime) La solicitud es manejada por un objeto HttpApplication, HttpApplication, seguido de todos los mó módulos registrados HttpModule Luego HttpRuntime deriva la solicitud a WebServiceHandler quien procesa la solicitud del Servicio Web WebServiceHandler usa reflection para convertir los mensajes SOAP en mé métodos 58 29 7/25/2006 7:21 PM Orientación a Objetos Vs Orientación a Servicios Asume un ambiente de ejecució ejecución y plataforma homogé homogéneas Comparte tipos Comunicació Comunicación barata Objetos está están enlazados (identidad y ciclo de vida) Fácil de modelar No existe un manejo de estado Su objetivo es usar funciones y tipos transparentemente Asume un ambiente de ejecució ejecución y plataforma heterogé heterogéneas Comparte esquemas Comunicació Comunicación con costo variable Servicios son autó autónomos (seguridad y aislamiento) Modelado en base a componentes Posee y Mantiene su estado Su objetivo es proveer aislamiento de servicios e interoperar en base a está estándares 59 Rendimiento y Escalabilidad Llamadas frecuentes pueden ser costosas Elección impropia de tipos de datos. En lo posible usar los tipos de datos primitivos. Serializar grandes cantidades de datos puede incidir en el rendimiento. Usar compresión de información Elección impropia del formato de codificación Ausencia o manejo erróneo de Cache Manejo de estado ineficiente 60 Ing. Javier Aranda Pantoja Microsoft Certified Professional 30 7/25/2006 7:21 PM Rendimiento y Escalabilidad Abuso de multi procesos. PE. Usar llamadas asíncronas sin necesidad Procesamiento ineficiente de los métodos del servicio Web. Validar en base a esquemas, buen manejo de excepciones 61 Consideraciones de Diseño Diseñar interfases sólidas Sus métodos expongan varios parámetros Crear un servicio Web que encapsule varios objetos Preferir un modelo de programación basado en mensajes Serv.SendItemsToBePurchased(Array[] Serv.SendItemsToBePurchased(Array[] items); Serv.ShippingAddress(string Address); Serv.CheckOut(); Serv.CheckOut(); string msg = "<Items>… "<Items>…</Items>"; MyMethod(msg); MyMethod(msg); 62 Ing. Javier Aranda Pantoja Microsoft Certified Professional 31 7/25/2006 7:21 PM Consideraciones de Diseño Usar codificación Literal para los parámetros Usar tipos de datos primitivos para los parámetros de los métodos de los SW Strongly typed. P.E double, int, Libro Loosely typed. De tipo string. Para información grande IXmlSerializer Evitar mantener el estado en el servidor Validación de los datos de entrada para métodos costosos 63 Consideraciones de Diseño Use el cache ASP.NET output caching HTTP response caching ASP.NET application caching Considere transferir información y datos adjuntos en masa Chunking Offloading the transfer Compresión 64 Ing. Javier Aranda Pantoja Microsoft Certified Professional 32 7/25/2006 7:21 PM Consideraciones de Diseño Para el manejo de datos adjuntos WS-Attachments Base 64 enconding Evitar llamar servicios Web localmente Comparte el mismo conjunto de procesos con ASP.NET No tiene efecto el atributo maxconnection 65 Consideraciones de Implementación Tiempos de respuesta Cantidad de datos que se pueden transmitir Manejo de recursos 66 Ing. Javier Aranda Pantoja Microsoft Certified Professional 33 7/25/2006 7:21 PM Comunicación en un solo sentido Fire and forget. Considere usar una llamada en un solo sentido cuando no requiera recibir una respuesta. OneWay 67 Métodos asíncronos Los servicios Web de ASP.NET soportan métodos asíncronos [WebMethod] WebMethod] IAsyncResult BeginDownloadSong(AsyncCallback BeginDownloadSong(AsyncCallback callback, Object obj) obj) { } [WebMethod] WebMethod] byte[] byte[] EndDownloadSong(IAsyncResult EndDownloadSong(IAsyncResult Result ) { } 68 Ing. Javier Aranda Pantoja Microsoft Certified Professional 34 7/25/2006 7:21 PM Métodos asíncronos Considere usar llamadas asíncronas si ejecuta operaciones de entrada y salida como: Accediento a flujos de datos (Streams) Operaciones con archivos I/O Llamar a otro servicio web 69 Llamadas asíncronas El cliente de un servicio Web puede llamar sincrona o asíncronamente a un Servicio Web independientemente de su implementación Considera hacer llamadas asíncronas cuando tenga un procesamiento adicional paralelo Cuando tenga que llamar a varios servicios Web que no estén relacionados Para mejorar la respuesta al usuario de su interfaz gráfica 70 Ing. Javier Aranda Pantoja Microsoft Certified Professional 35 7/25/2006 7:21 PM Resumen .NET Framework 2.0 provee muchas solución convincentes para los problemas de aplicaciones distribuidas que se presentan hoy en día. Las soluciones están dentro de tres Modelo de Programació Programación Mejorando la productividad del desarrollador Extensibilidad Le brinda má más control sobre el .net framework Infraestructura Hace má más fá fácil que nunca desplegar aplicaciones robustas 71 Referencias Chapter 5 Advanced Web Services. Developing XML Web Services and Server Components with Visual C# Using SOAP Headers http://msdn2.microsoft.com/enus/library/77hkfhh8.aspx Improving Web Services Performance http://msdn.microsoft.com/library/default.asp? url=/library/enus/dnpag/html/scalenetchapt10.asp 72 Ing. Javier Aranda Pantoja Microsoft Certified Professional 36