|
|
Quinto repaso de 7 del temario para el examen 70-536 de la certificación MCTS en .NET. Este sea prosiblemente la parte más ligera del temario, la parte más dura del temario viene en los 2 repasos siguientes. Engloba los temas 13.Interoperation, 14.Reflection y 15.Mail del libro oficial de Microsoft. |
Usando objetos COM:
· Los componentes COM son código no administrado, es decir, nativo.
· Pueden ser fácilmente consumidos en una aplicación .NET, aunque las razones para hacerlo deben ser cuidadosamente consideradas.
· Introducción a la Interoperabilidad.
· A diferencia de los componentes .NET, los componentes COM deben ser registrados antes de poder ser usados con Regsvr32.exe.
· Puedes usar la pestaña COM del dialogo “Añadir Referencia” para añadir una referencia a un componente COM registrado.
· La herramienta de consola Tlbimp.exe es un mecanismo para importar un componente COM a un ensamblado.
· El modificador “out” de Tlbimp.exe puede ser usado para cambiar el nombre del ensamblado que será importado a otro nombre preferido.
· El comportamiento por defecto al capturar excepciones en el Framework 2.0 permite ahora capturar también las non-CLS-compliant excepciones como RuntimeWrappedException (CLS = Common Lenguaje Specification).
· El atributo RuntimeCompatibility puede ser usado para cambiar modificar este nuevo comportamiento por defecto.
Construyendo componentes .NET para usar por COM:
· La opción “Registrar para COM Interop” en la conjuración de construcción automatiza el proceso de exponer ensamblados .NET a componentes COM.
· El mecanismo principal para controlar la exposición de ensamblados .NET a componentes COM es el atributo ComVisible.
· El atributo ComVisible puede ser aplicado a un ensamblado entero, a una clase entera ó a un miembro individual.
· Cuanta más granularidad en el uso del atributo ComVisible más precedencia toma. Si se marca una clase como no visible, y uno de sus miembros si, este será visible.
Usando código no administrado:
· .NET provee un mecanismo para hacer llamadas a la API de Windows y a código no administrado a través de Plataform Invoke (P/Invoke).
· Para usar P/Invoke, usa el atributo DllImport y el nombre de la DLL que quieras referenciar.
· Debes marcar el método como static y extern para llamadas P/Invoke.
· La enumeración LayoutKind controla el diseño de un objeto cuando se exporta a código no administrado.
· Layout…
· Para obligar que se mantengan la disposición de una estructura, puedes usar el atributo LayoutKind.Sequential.
· Los mensajes de error desde el código no administrado se comportan distinto de las excepciones administradas. Para capturarlas correctamente, se ha de usar la API de Windows.
Comprendiendo “Reflection”:
· Metadatos.
· Los ensamblados son contenedores para módulos, y estos contenedores para tipos.
· Los ensamblados contienen información que el CLR necesita para ejecutar el código:
o Metadatos del ensamblado (El manifiesto).
o Metadatos de los tipos.
o Código MSIL.
o Recursos.
· Dominios de aplicación y ensamblados.
· Para acceder a ensamblados que están relacionados con el código en ejecución, ensamblados ad-hoc y la lista de módulos en el ensamblado usa la clase Assembly.
· Se puede cargar un ensamblado únicamente para interrogar su información con los métodos ReflectionOnlyLoad y ReflectionOnlyLoadFrom.
Atributos en ensamblados:
· Para especificar metadatos del ensamblado, usa los atributos de ensamblado comunes:
o AssemblyAlgorithmIdAttribute
o AssemblyCompanyAttribute
o AssemblyConfigurationAttribute
o AssemblyCopyrightAttribute
o AssemblyCultureAttribute
o AssemblyDefaultAliasAttribute
o AssemblyDelaySignAttribute
o AssemblyDescriptionAttribute
o AssemblyFileVersionAttribute
o AssemblyFlagsAttribute
· Interroga a un ensamblado por atributos individuales con el método Assembly.GetCustomAttributes.
Reflectando tipos:
· Para acceder a la información de tipo directamente desde un objeto, llama al método Object.GetType de la clase Object.
· Para enumerar los miembros de un tipo, incluidos métodos, propiedades, campos, eventos y enumeraciones, usa las clases MemberInfo y MemberInfoCollection.
· Para enumerar todos los tipos de un ensamblado en particular, llama al método Assembly.GetTypes.
· Para tener más control sobre que miembros extraer de un tipo, usa la enumeración BindingFlags.
Escribiendo código dinámico:
· Para crear una nueva instancia de un tipo, usa las clases Type y ConstructorInfo.
· Para ejecutar un método de instancia ó estático específica de tipo, usa la clase MemberInfo.Invoke.
· La clase Binder es la responsable de determinar como hacer la conversión de tipos y donde localizar el código dinámico.
Creando código en tiempo de ejecución:
· Para crear un ensamblado dinámicamente en tiempo de ejecución, usa el método AppDomain.DefineDynamicAssembly.
· Usa la clase AssemblyBuilder para crear ensamblados dinámicos.
· Para crear un módulo en un ensamblado dinámico, usa el método AssemblyBuilder.DefineDynamicModule.
· Usa la clase ModuleBuilder para definir módulos.
· Para construir tipos en tiempo de ejecución, usa el método ModuleBuilder.DefineType.
· Para crear miembros de un tipo, usa los métodos de definición de la clase TypeBuilder como DefineConstructor, DefineMethod, DefineProperty y DefineField.
· Para guardar un ensamblado dinámico al disco, usa el método AssemblyBuilder.Save.
Creando un mensaje de eMail:
· Para enviar un eMail, crea un objeto MailMessage, especifica el remitente, el asunto, el cuerpo del mensaje y los destinatarios, vistas alternativas y los archivos adjuntos si es que quieres enviarlos.
· El objeto MailMessage incluye constructores para permitirte crear mensajes simples con una sola línea de código. Mensajes más complejos y mensajes con múltiples destinatarios requerirán añadir más código.
· Para adjuntar un archivo, crea una instancia del la clase Attachment y añádela a la colección MailMessage.Attachment.
· Crear un mensaje HTML sin imágenes es tan simple como poner a True la propiedad MailMessage.IsBodyHtml. Si necesitas incluir imágenes en el mensaje, crea un objeto AlternateView y otro LinkedResource por cada imagen.
· En los mensajes de eMail HTML se ignora la cabecera <head>.
Enviando eMails:
· Para enviar un mensaje, crea una instancia de SmtpClient. Configuralo con el hostname del servidor SMTP y llama al método SmtpClient.Send.
· Si llamas al método SmtpClient.Send sin definir el hostname del servidor, el CLR lanzará una InvalidOperationException. Si el hostname esta definido pero no puede alcanzarse (por el motivo que sea), el CLR lanzará una SmtpExeption con una WebException anidada. Si el servidor SMTP responde diciendo que alguno de los destinatarios es inválido. El CLR lanzará una SmtpFailedRecipientException. El resto de problemas que pudiesen surgir enviando un eMail resultarán en una SmtpException.
· Para usar las credenciales de red por defecto, marca SmtpClient.UseDefaultDredentials como True. Para especificar un nombre de usuario y contraseña, crea una instancia de la clase System.Net.NetworkCredential y usala para definir la propiedad SmtpClient.Credentials.
· Para habilitar el cifrado SSL para la conexión SMTP, marca SmtpClient.EnableSsl a True. No todos los servidors SMTP soportan SSL.
· Para enviar un mensaje de forma asíncrona, primero crea un método para responder al evento SmtpClient.SendCompleted. Después añade un manejador de eventos al SmtpClient.SendCompleted y llama al método SmtpClient.SendAsync. Puedes llamar a SmtpClient.SendAsyncCancel para cancelar la trasmisión de un mensaje asíncrono antes de que sea completado.






