Title: Trucos y Tcnicas con 'NET
1Trucos y Técnicas con .NET
- Alejandro Mezcua
- Responsable desarrollo
- Zaltor Soluciones Informáticas
- amezcua_at_zaltor.com
2Agenda
- Objetivo
- Aplicaciones Web
- XML Web Services
- Windows Forms
- Integración Windows Forms XML Web Services
- Integración .NET Enterprise Servers
- Gestión de Excepciones
- Siguientes pasos
3Objetivo
- Dar una visión de técnicas utilizadas en
proyectos reales - Ir más allá de la simple exposición del producto
- Mostrar el abanico de posibilidades dado por .NET
4Aplicaciones Web
- Generación de imágenes sobre la marcha
- Seguimiento de descargas personalizado
- Sesiones ASP.NET para dispositivos WAP
5Aplicaciones Web
Generación de imágenes sobre la marcha
- GDI
- Graphics object
- Páginas ASPX. Stream de datos a la respuesta
(objeto Response) - Pueden aceptar parámetros
- Servidas en etiqueta ltimggt de HTML
- ltimg srcgeneragrafico.aspxgt
6Aplicaciones Web
Seguimiento de descargas personalizado
- Control de archivos descargados
- Implementar IHTTPHandler para filtrar archivos
- Redirección a formulario personalizado
- Independiente de las estadísticas del Web
- (Continúa)
7Aplicaciones Web
Seguimiento de descargas personalizado
- Configuración en Web.Config
- lthttpHandlersgt
- ltadd verb"GET" path".txt"
- typeClassName, AssemblyName"
- /gt
- lt/httpHandlersgt
- Configuración en IIS
- En la aplicación asociar la extensión a
aspnet_isapi.dll
8Aplicaciones Web
Sesiones ASP.NET para dispositivos WAP
- MMIT por omisión usa sesiones en URL pero usa
ViewState para los formularios - Los dispositivos WAP tienen límite de tamaño de
páginas (DECKSIZE) - La sesión ASP.NET se puede controlar por URL
- Para aplicaciones no MMIT usar
- ltsessionState cookieless"true" timeout"20" /gt
- En Web.config
9Aplicaciones Web
Referencias
- Viewstate
- http//support.microsoft.com/default.aspx?scidhtt
p//www.microsoft.com/intlkb/spain/E308/4/66.asp
10XML Web Services
Uso de SOAP Headers personalizadas
- Un paquete de SOAP se compone de 3 elementos
- Envelope
- Header
- Body
- Las cabeceras se pueden controlar (leer/escribir)
con clases que heredan de SoapHeader - (Continúa )
11XML Web Services
Uso de SOAP Headers personalizadas
- En el servicio Web (método o clase) se marca para
requerir la cabecera - ltWebMethod(False), SoapHeader(NombreCabecera",
RequiredTrue)gt Public Function Func() as
Boolean - En el cliente, antes de llamar al servicio Web se
establece la cabecera - m_SvcSMProxy.NombreCabeceraValue New
ClaseCabecera() - m_SvcSMProxy.NombreCabeceraValue.Propiedad
Valor
12Windows Forms
- Imprimir un DataGrid
- Uso de los controles de Impresión para Windows
Forms - Uso de GDI para dibujar sobre el área del
informe - Ejemplo obtenido de (en inglés)
- http//www.c-sharpcorner.com/Graphics/DataGridPrin
terMG.asp
13Integración WindowsForms XML Web Services
- Validación con SOAP Headers con contenido
encriptado - Uso de reflection para obtener información de la
clase en tiempo de ejecución y ajustar controles
14Integración WindowsForms XML Web Services
Validación con SOAP Headers
- Servicio Web que mantiene solicitudes de inicio
de sesión - El inicio de sesión completo ha de efectuarse en
un espacio de tiempo dado - Todas las solicitudes han de llevar una cabecera
SOAP válida
15Integración WindowsForms XML Web Services
Esquema de Validación
16Integración WindowsForms XML Web Services
Uso de reflection
- Reflection permite obtener información de los
metadatos de una clase en tiempo de ejecución - Permite sabes los nombres de los campos públicos,
etc. - Sabiendo los campos podemos ajustar los controles
a esos valores - (Continúa )
17Integración WindowsForms XML Web Services
Uso de reflection
- Dim t As Type
- Dim fInfo() As FieldInfo
- t obj.GetType()
- fInfo t.GetFields()
18Integración .NET Enterprise Servers
- Seguridad Integrada IIS con delegación de
Kerberos - Directorio Activo (Validación de usuarios)
- Acceso DAV a Exchange
19Integración .NET Enterprise Servers
Seguridad Integrada IIS con delegación de Kerberos
(Continúa )
20Integración .NET Enterprise Servers
Seguridad Integrada IIS con delegación de Kerberos
- Se consigue con combinación de configuración y
código - La cuenta usada ha de disponer de la propiedad
Account is trusted for delegation - En web.config
- ltidentity impersonatetruegt
- Al usar el proxy del Web Service
- oProxy.Credentials System.Net.CredentialCache.De
faultCredentials
21Integración .NET Enterprise Servers
Directorio Activo
- Clases System.DirectoryServices
- Permiten el acceso al Directorio Activo (y a
otros directorios LDAP) - Permite hacer búsquedas y actualizaciones
- DirectorySearcher. Búsquedas al directorio
- DirectoryEntry. Objeto del directorio. Colección
Properties para acceso a las propiedades
individuales.
22Integración .NET Enterprise Servers
Directorio Activo (Validación de usuarios)
- Forma sencilla
- Realizar query para buscar el objeto del usuario
- buscar userPrincipalName o samAccountName
- Ambas propiedades están en el GC indexadas
- Realizar la búsqueda usando las credenciales del
usuario deseado (usuario pwd) - Si la query no devuelve acceso denegado, se puede
dar por supuesto que el usuario existe con esas
credenciales
23Integración .NET Enterprise Servers
Acceso DAV a Exchange
- DAV es una extensión de HTTP
- Exchange dispone de interface DAV para acceder al
InformationStore (mensajes, contactos, etc) - Forma parte de Outlook Web Access
(http//localhost/exchange/) - (continúa )
24Integración .NET Enterprise Servers
Acceso DAV a Exchange
- Se realizan consultas en formato XML con código
SQL. La validación estándar es básica (usuario
contraseña) - Cada objeto dispone de propiedades que se tratan
como campos en SQL - urnschemashttpmailsendername
- urnschemashttpmailsubject
- Detalles en el SDK de Exchange
- Herramientas útiles como el Exchange Explorer
25Gestión de Excepciones
- Excepciones personalizadas
- Captura global de excepciones
26Gestión de Excepciones
Excepciones personalizadas
- Clase que hereda de ApplicationException
- Permite distinguir entre tipos de errores propios
de la aplicación con control estructurado
(Try-Catch-Finally) - Da más control que trabajar con System.Exception
27Gestión de Excepciones
Captura global de excepciones
- Existen situaciones donde no podemos saber todos
los posibles errores - Podemos establecer un handler general por cada
Thread - Se asocia en
- AddHandler Application.ThreadException, AddressOf
NombreFunción
28Siguientes pasos
- Revisar WS-Enhancements
- Interoperatividad WS-Security. MS-Java
- http//msdn.microsoft.com/webservices/building/wse
/default.aspx?pull/library/en-us/dnwebsrv/html/ws
ejavainterop.asp
29Preguntas