El Blog de Óscar Sotorrío Sánchez - MCP Application Development Foundation - C#

Todo lo que vaya aprendiendo de .NET, C#, ASP.NET, SQL Server, etc, lo compartiré con vosotros.

El autor:

Óscar Sotorrío Sánchez
Contacto Send mail

Encuéntralo

Álguien dijo...


La suerte es para los pobres de espíritu. Yo prefiero justicia.

OSS

Eventos del ciclo de vida cliente en ASP.NET AJAX

Como ya hemos comentado alguna vez, ASP.NET con AJAX provoca en el servidor los mismo eventos que durante un PostBack en el ciclo de vida de una página. Pero además, cuando tenemos habilitado AJAX en nuestra página, provoca eventos en el ciclo de vida cliente. El conocer estos eventos y su ciclo es muy importante para tener el mayor control y manejo posible de las solicitudes asíncronas.
 
Estos eventos en el cliente son provocados por las clases de la librería de AJAX .NET. Esta librería y las instancias de sus clases están a nuestra disposición automáticamente al incluir un control ScriptManager al inicio de nuestras páginas.
 
Son dos las clases principales que provocan estos eventos durante el ciclo de vida de la página en el cliente. Tenemos la clase Sys.Application que para entendernos es similar a la clase Page del objeto de servidor. Y tenemos la clase Sys.WebForms.PageRequestManager.
 
Veamos por partes como ocurre todo tanto durante un petición síncrona (PostBack), como una petición asíncrona (AJAX).
 
 
Ciclo de eventos cliente durante un PostBack
 
Cuando arrancamos por primera vez nuestra aplicación, o cuando hacemos un viaje al servidor de nuevo, el ciclo de eventos que se provocan en el cliente son los siguientes.
  • Window.load(). Este evento del DOM como ya sabemos se dispara cuando se carga nuestra página.
  • PageRequestManager.pageLoaded(). Este evento se dispara tanto durante una llamada asíncrona como una síncrona cuando se ha actualizado todo el contenido de la página. Es el evento ideal para determinar en el código cliente si la devolución de datos fué realizada por AJAX o por un PostBack.
  • Application.init(). Se dispara cuando se terminan de cargar todos los script de cliente pero antes de que se cree ningún objeto de estos. Es decir, que si intentamos acceder durante este evento a cualquiera de los objetos declarados en nuestros script recibiremos un error. Otra cosa muy importante a tener en cuenta en este evento es que se dispara una única vez por cada devolución de datos síncrona, nunca durante una devolución asíncrona.
  • Application.load(). Este evento se dispara cuando se han cargado todos los objetos de los script de la página.
  • Application.unload(). Entra en acción antes de eliminar todos los objetos script de la página.
  • Window.unload(). Este evento del DOM como se dispara cuando se cierra nuestra ventana del explorador.

 
Ciclo de eventos cliente durante AJAX en .NET
 
Ahora viene lo que realmente debemos tener en cuenta. No olvidemos que estamos trabajando bajo el esquema de un control ScriptManager y un control UpdatePanel en nuestra página. Esto significa que cuando el servidor nos devuelve los datos, se realiza una actualización parcial de la página, en concreto, solo obtenemos el HTML necesario para repintar el contenido de los elementos del interior del UpdatePanel.

  • PageRequestManager.initializeRequest(). Este es el primero de los eventos que se disparan cuando provocamos una llamada AJAX. En realidad, durante este evento aún no ha comenzado la solicitud, por lo tanto, es el evento ideal para cancelar la llamada desde nuestro código cliente.
  • PageRequestManager.beginRequest(). Se provoca antes de que se envíen los datos al servidor. Es el último evento que se produce en el cliente. Es el momento ideal para llamar a un script personal que inicie una animación que notifique al usuario que se está procesando la devolución de datos. El control UpdateProgress hace uso de este evento para mostrar su contenido.
  • PageRequestManager.pageLoading(). Se dispara después de recibir la respuesta del servidor durante una llamada AJAX, pero antes de actualizar cualquier contenido en la página. Es una oportunidad perfecta para realizar cualquier acción personalizada, antes de ser pintados, sobre los datos recibidos desde el servidor, como filtrarlos o formatearlos. También es el evento usado para enviar datos a los controles que no están incluidos en el updatepanel.
  • PageRequestManager.pageLoaded(). Este evento se dispara tanto durante una llamada asíncrona como una síncrona cuando se ha actualizado todo el contenido de la página. Es el evento ideal para determinar en el código cliente si la devolución de datos fué realizada por AJAX o por un PostBack.
  • Application.load(). Este evento se dispara cuando se han cargado todos los objetos de los script de la página.
  • PageRequestManager.endRequest(). Se dispara después del repintado parcial de la página y se devuelve el control al explorador. También se dispara este evento cuando se ha producido un error durante la devolución de datos asíncrona. Si se produce un error, la página no se actualiza por lo tanto los datos devueltos por el servidor no son mostrados. Se puede utilizar este evento para proporcionar una notificación de error personalizada a los usuarios o para registrar los errores. También se utilizar para ejecutar script personalizados al terminar la devolución de datos asíncrona.
 
 
Pues muy bien, mucho rollo pero...¿como se declaran estos eventos en el cliente?. Pongamos todo esto en práctica.
<script type="text/javascript" language="javascript">

        
//Eventos del objeto Application

        
Sys.Application.add_init(applicationInitHandler);

        function 
applicationInitHandler() {
        
//Código para este evento
        
}


        
//Eventos del objeto PageRequestManager

        
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(prmInitializeRequest);

        function 
prmInitializeRequest() {
        
//Código para este evento
        
}
 </script>
La clase Sys.Application se instacia directamente, no así la clase Sys.WebForms.PageRequestManager que para intstanciarla debemos utilizar el método getInstance().
 
Los eventos de ambas clases se declaran al estilo de los delegados de C#, y siempre siguen la misma sintaxis: add_nombreEvento (nombreFuncion)
 
Podéis descargaros un pequeño ejemplo para jugar con todo esto: EventosClienteAJAX.rar (3,52 kb)
 
 

Posted by Oscar.SS on domingo, 21 de febrero de 2010 19:53
Permalink | Comentarios (2) | Post RSSRSS comment feed

IHttpModule: Antes y después de la solicitud

La interfaz IHttpModule nos proporciona una manera simple de manejar las peticiones HTTP antes de que estas comiencen a administrarse en IIS y una vez que han sido totalmente ejecutadas y se van a devolver al cliente.

¿Porque razón querríamos actuar en la solicitud antes (y después) de que comience a administrarse? 

  • Por temas de seguridad y rendimiento. Si un usuario no tiene permisos en nuestra aplicación es mejor denegarle el acceso antes de que su solicitud comience a consumir recursos en el servidor.  Comprobamos que no tiene premisos antes del comienzo de ejecución de ninguno de los eventos del ciclo de vida de la página solicitada (o control de usuario, o servicio Web).
  • Para crear módulos estadísticos sobre las solicitudes de forma global en lugar de hacerlo para las páginas de forma individual.
  • Incluir en la respuesta a la solicitud, encabezados y pies de páginas personalizados para todas las solicitudes.
  • En general, siempre que deseemos actuar antes de que comience a ejecutarse la solicitud en el servidor y justo antes de que se envíe la respuesta al cliente.
 
 
 
La forma de implementar un módulo es muy sencilla. Solo tenemos que crear un archivo de clase, por ejemplo Modulo.cs, y implementar la interfaz IHttpModule. Los miembros de esta interfaz son solo dos. 
  • Init(). Inicializa el módulo y lo prepara para procesar la solicitud HTTP.
  • Disponse(). Elimina los recursos utilizados por el módulo.
Es evidente que la lógica de nuestro módulo deberá implementarse en el método Init(). A continuación podemos ver un sencillo ejemplo que comprueba si el usuario tiene permisos, en caso negativo es transferido a una página en la que se muestra un mensaje.
 
public class ClaseModulo : IHttpModule
{
    
public ClaseModulo(){}

    
public void Dispose() { }

    
public string NombreModulo 
    {
        
get return "MiModulo"}
    }

    
public void Init(HttpApplication aplicacion)
    {
        
/*
         * Definimos los eventos del ciclo de vida de la aplicación sobre los que vamos actuar.
         * En este caso actuamos antes del comienzo de la solicitud y cuando esta termina.
         */
        
aplicacion.BeginRequest += new EventHandler(aplicacion_BeginRequest);
        
aplicacion.EndRequest += new EventHandler(aplicacion_EndRequest);
    
}

    
private void aplicacion_BeginRequest(object sender, EventArgs e)
    {
        
//Obtenemos el contexto de aplicación de la solicitud.
        
HttpApplication Aplicacion (HttpApplication)sender;
        
HttpContext Contexto Aplicacion.Context;

        
//Obtenemos la extensión del archivo solicitado.
        
string Ruta Contexto.Request.FilePath;
        string 
Extension VirtualPathUtility.GetExtension(Ruta);

       
//Si se ha solicitado una página aspx.
        
if (Extension.Equals(".aspx"))
        {
            
//Si el usuario no tiene permisos le enviamos a la página de error.
            
if (!UserTienePermisos())
            {
                Contexto.Server.Transfer(
"Default2.aspx");
            
}
        }
    }

    
private void aplicacion_EndRequest(object sender, EventArgs e)
    {
        
//Obtenemos el contexto de aplicación de la solicitud
        
HttpApplication Aplicacion (HttpApplication)sender;
        
HttpContext Contexto Aplicacion.Context;

        
//Obtenemos el nombre del archivo solicitado.
        
string Ruta Contexto.Request.FilePath;
        string 
Extension VirtualPathUtility.GetExtension(Ruta);

        if 
(Extension.Equals(".aspx"))
        {
            
//Si el usuario no tiene permisos mostramos un mensaje al final de la solicitud.
            
if (!UserTienePermisos())
            {
                Contexto.Response.Write(
"Usted no tiene permisos");
            
}
        }
    }
}
 
Una vez codificada la lógica de nuestro módulo debemos registrarlo en el web.config para ASP.NET tenga en cuenta como tiene que manejar la solicitud.
        <system.web>
            
<httpModules>
                
<add name="MiModulo" type="ClaseModulo"/>
            </
httpModules>
        
</system.web>

Posted by Oscar.SS on sábado, 30 de enero de 2010 14:23
Permalink | Comentarios (0) | Post RSSRSS comment feed

Los String...¡unos tipos de cuidado!.

El tipo System.String, que como todos sabemos representa una cadena, es un tipo algo especial con el que hay que tener un poco de cuidado a la hora de menejarlo. Veamos en primer lugar una definición más o menos formal del tipo System.String:

"El tipo System.String es un tipo por referencia e inmutable (de solo lectura) que representa una cadena de texto como una colección secuencial de caracteres Unicode (objetos System.Char)".

 Para este artículo nos centraremos en la primera parte de la definición, es decir, en "El tipo System.String es un tipo por referencia e inmutable (de solo lectura) ...".

¿Que quiere decir que es inmutable?

Un objeto inmutable es un objeto que no se puede modificar. Cuando creas, o cargas en menoria un objeto de este tipo, permanece con el mismo valor durente toda la vida del objeto. Veamos el siguiente fragmento de código:

            string miCadena "Un saludo";
            
miCadena +" para el lector";

Quizás pueda parecer que en la segunda linea de este fragmento estamos modificando el literal "Un saludo" pero esto no es así. Como ya dijimos antes, el objeto "Un saludo" es inmutable, por lo tanto, despúes de la concatenación, lo que se devuelve es un nuevo objeto de tipo System.String que contiene la modificación: "Un saludo para el lector".

Por lo tanto, cuando concatenamos cadenas de esta forma, tenemos en la memoria dos objetos, uno con el valor original y otro con la modificación. Es evidente, que sí esta operación la realizamos miles de veces, por ejemplo leyendo de una base de datos, el rendimiento de la aplicación se verá gravemente afectado. Por otro lado, si la operación solo se realiza una o dos veces (incluso tres o cuatro) no tiene tanta importancia.

Supongamos que tenemos una base de datos con todos los nombre de los lectores de este blog, y supongamos que son miles los nombres guardados (¡ojalá!...jeje). Ahora queremos leer de la base de datos todos los nombres y saludarles por pantalla. Creamos un método al que le pasamos cada nombre leido en un bucle.

        static void Saludar(string Nombre)
        {
            StringBuilder sb 
= new StringBuilder("Hola para ");
            
sb.Append(Nombre);
            
Console.WriteLine(sb.ToString());
        
}

Esta es la manera correcta de proceder, creando un objeto System.Text.StringBuilder y añadiendo cada nueva cadena por medio de su método Append(). Si queréis podéis descargaros un pequeño programilla que calcula el tiempo que se tarda en realizar concatenaciones con System.String y System.Text.StringBuilder en función de un número de iteraciones introducidas por el usuario.

String_vs_StringBuilder.rar (21,95 kb)

 

Más cosas a tener en cuenta.

¿Más cosas a tener en cuenta?. Ya dijimos que eran...¡unos tipos de cuidado!.

Cuando inicializamos variables de tipo Sytem.String y queremos darles un valor por defecto de cadena vacia es muy frecuente hacerlo con las comillas "".

    class Lector
    {
        
public string Nombre;
        public string 
Apellidos;
        public string 
Direccion;
        public string 
Telefono;
        public string 
Comentario;
        public string 
FechaComentario;

        public 
Lector()
        {
            Nombre 
"";
            
Apellidos "";
            
Direccion "";
            
Telefono "";
            
Comentario "";
            
FechaComentario "";
        
}

        
//...............

        //Aquí el resto de mienbros de la clase.

        //...............
    
}

No es recomendable hacerlo de esta forma. En este caso hemos creado (cargado en la menoria) 6 objetos diferentes de tipo cadena. Y seguramente luego "intentaremos" modificarlos al asignarles un valor determinado. Lo correcto, o por lo menos más recomendable, es hacerlo así:

 

        public Lector()
        {
            Nombre 
String.Empty;
            
Apellidos String.Empty;
            
Direccion String.Empty;
            
Telefono String.Empty;
            
Comentario String.Empty;
            
FechaComentario String.Empty;
        
}

Al utilizar el campo String.Empty que representa una cadena vacía, estamos apuntando todas las variables a un mismo objeto. De esta forma solo reservamos memoria para un único objeto gracias a que los tipos System.String son tipos por refencia.

Bueno...ya sabéis...¡cuidado con estos "tipos"!.


Tags:
Categories: Desarrollo .NET
Posted by Oscar.SS on domingo, 30 de noviembre de 2008 3:11
Permalink | Comentarios (0) | Post RSSRSS comment feed

Resumen de System.Collections

Este breve resumen puede servir de guía a la hora de elegir lacolección más apropiada en nuestras aplicaciones. No es gran cosa peroda pistas.

Referente al uso que se le puede dar a cada colecciónincluida en el espacio de nombres System.Collections podríamosdividirlo de este modo:

1- Colecciones de acceso por un índice numérico.
2- Colecciones almacenadas con pares de clave-valor.
3- Colecciones tipo ‘colas’.

Dentrode estas categorías, podemos hacer dos divisiones más, en función de sivamos a utilizar las colecciones de .NET “directamente” o si vamos autilizarlas para crear colecciones personalizadas.

1.1- Colecciones de “uso directo” con acceso por un índice numérico.

- ArrayList: Siempreque queramos almacenar datos como en una matriz pero con la ventaja deaumentar el número de elementos dinámicamente deberíamos utilizar estacolección.

- BitArray: Colección muy concreta que almacena valores de bit representados como valores boléanos.

1.2- Colecciones para crear nuestras propias colecciones con acceso por un índice numérico.

- CollectionBase: Permite modificar los elementos de nuestra colección.

- ReadOnlyCollectionBase: Una versión de la anterior de solo lectura.

2.1- Colecciones de “uso directo” almacenando los datos con pares de clave-valor.

- Hashtable: Se puede acceder a los valores de los elementos solamente por medio de la clave.

NOTA:Esta clase es la única de System.Collections que expone funcionabilidadpara controlar la serialización y la deserialización.

- SortedList: Esta colección permite tener acceso a los valores de los elementos tanto por la clave como por índice.

2.2- Colecciones para crear nuestras propias colecciones con almacenamiento por pares de clave-valor.

- DictionaryBase.

3- Colecciones tipo colas.

- Queue: Primeroen entrar primero en salir (FIFO). Utilizar cuando necesitemosalmacenar una cantidad definida de datos en el orden que son creados.

- Stack: Ultimo en entrar primero en salir (LIFO).

Tags:
Categories: Desarrollo .NET
Posted by Oscar.SS on jueves, 07 de agosto de 2008 4:34
Permalink | Comentarios (0) | Post RSSRSS comment feed

1- Desarrollando aplicaciones que usen tipos y colecciones System.

A- Manage data in a .NET Framework application by using the .NET Framework 2.0 system types. (Refer System namespace)

Value types

Nullable type

Reference types

Attributes

Generic types

Exception classes

Boxing and UnBoxing

TypeForwardedToAttribute Class

 


B- Manage a group of associated data in a .NET Framework application by using collections. (Refer System.Collections namespace)

ArrayList class

Collection interfaces

ICollection interface and IList interface

IComparer interface and IEqualityComparer interface

IDictionary interface and IDictionaryEnumerator interface

IEnumerable interface and IEnumerator interface

Iterators

Hashtable class

CollectionBase class and ReadOnlyCollectionBase class

DictionaryBase class and DictionaryEntry class

Comparer class

Queue class

SortedList class

BitArray class

Stack class

 


C- Improve type safety and application performance in a .NET Framework application by using generic collections. (Refer System.Collections.Generic namespace)

Collection.Generic interfaces

Generic IComparable interface (Refer System Namespace)

Generic ICollection interface and Generic IList interface

Generic IComparer interface and Generic IEqualityComparer interface

Generic IDictionary interface

Generic IEnumerable interface and Generic IEnumerator interface IHashCodeProvider interface

Generic Dictionary

Generic Dictionary class and Generic Dictionary.Enumerator structure

Generic Dictionary.KeyCollection class and Dictionary.KeyCollection.Enumerator structure

Generic Dictionary.ValueCollection class and Dictionary.ValueCollection.Enumerator structure

Generic Comparer class and Generic EqualityComparer class

Generic KeyValuePair structure

Generic List class, Generic List.Enumerator structure, and Generic SortedList class

Generic Queue class and Generic Queue.Enumerator structure

Generic SortedDictionary class

Generic LinkedList

Generic LinkedList class

Generic LinkedList.Enumerator structure

Generic LinkedListNode class

Generic Stack class and Generic Stack.Enumerator structure


D- Manage data in a .NET Framework application by using specialized collections. (Refer System.Collections.Specialized namespace)

Specialized String classes

StringCollection class

StringDictionary class

StringEnumerator class

Specialized Dictionary

HybridDictionary class

IOrderedDictionary interface and OrderedDictionary class

ListDictionary class

Named collections

NameObjectCollectionBase class

NameObjectCollectionBase.KeysCollection class

NameValueCollection class

CollectionsUtil

BitVector32 structure and BitVector32.Section structure


E- Implement .NET Framework interfaces to cause components to comply with standard contracts. (Refer System namespace)

IComparable interface

IDisposable interface

IConvertible interface

ICloneable interface

IEquatable interface

IFormattable interface

 


F- Control interactions between .NET Framework application components by using events and delegates. (Refer System namespace)

Delegate class

EventArgs class

EventHandler delegates


Posted by Oscar.SS on sábado, 12 de abril de 2008 10:51
Permalink | Comentarios (0) | Post RSSRSS comment feed

2- Implementando servicios, procesos, y dominios de aplicación en una aplicación de la plataforma .NET.

A- Implement, install, and control a service. (Refer System.ServiceProcess namespace)

Inherit from ServiceBase class

ServiceController class and ServiceControllerPermission class

ServiceInstaller and ServiceProcessInstaller class

SessionChangeDescription structure and SessionChangeReason enumeration

 

 

B- Develop multithreaded .NET Framework applications. (Refer System.Threading namespace)

Thread class

ThreadPool class

ThreadStart delegate and ParameterizedThreadStart delegate

Timeout class, Timer class, TimerCallback delegate, WaitCallback delegate, WaitHandle class, and WaitOrTimerCallback delegate

ThreadState enumeration and ThreadPriority enumeration

ReaderWriterLock class

AutoResetEvent class and ManualResetEvent class

IAsyncResult interface (Refer System namespace)

EventWaitHandle class, RegisterWaitHandle class, SendOrPostCallback delegate, and IOCompletionCallback delegate

Interlocked class

ExecutionContext class, HostExecutionContext class, HostExecutionContext Manager class, and ContextCallback delegate

LockCookie structure, Monitor class, Mutex class, and Semaphore class


C- Create a unit of isolation for common language runtime in a .NET Framework application by using application domains. (Refer System namespace)

Create an application domain.

Unload an application domain.

Configure an application domain.

Retrieve setup information from an application domain.

Load assemblies into an application domain.


Posted by Oscar.SS on sábado, 12 de abril de 2008 10:49
Permalink | Comentarios (0) | Post RSSRSS comment feed

3- Agregando configuración, diagnóstico, gestión, e instalación en una aplicación de la plataforma .NET.

A- Embed configuration management functionality into a .NET Framework application. (Refer System.Configuration namespace)

Configuration class and ConfigurationManager class

ConfigurationElement class, ConfigurationElementCollection class, and ConfigurationElementProperty class

ConfigurationSection class, ConfigurationSectionCollection class, ConfigurationSectionGroup class, and ConfigurationSectionGroupCollection class

Implement ISettingsProviderService interface

Implement IApplicationSettingsProvider interface

ConfigurationValidatorBase class

 

 

B- Create a custom Microsoft Windows Installer for the .NET Framework components by using the System.Configuration.Install namespace, and configure the .NET Framework applications by using configuration files, environment variables, and the .NET Framework Configuration tool (Mscorcfg.msc).

Installer class

Configure which runtime version a .NET Framework application should use.

Configure where the runtime should search for an assembly.

Configure the location of an assembly and which version of the assembly to use.

Direct the runtime to use the DEVPATH environment variable when you search for assemblies.

AssemblyInstaller class

ComponentInstaller class

Configure a .NET Framework application by using the .NET Framework Configuration tool (Mscorcfg.msc).

ManagedInstallerClass class

InstallContext class

InstallerCollection class

InstallEventHandler delegate

Configure concurrent garbage collection.

Register remote objects by using configuration files.


C- Manage an event log by using the System.Diagnostics namespace.

Write to an event log.

Read from an event log.

Create a new event log.


D- Manage system processes and monitor the performance of a .NET Framework application by using the diagnostics functionality of the .NET Framework 2.0. (Refer System.Diagnostics namespace)

Get a list of all running processes.

Retrieve information about the current process.

Get a list of all modules that are loaded by a process.

PerformanceCounter class, PerformanceCounterCategory, and CounterCreationData class

Start a process both by using and by not using command-line arguments.

StackTrace class

StackFrame class

 

 

E- Debug and trace a .NET Framework application by using the System.Diagnostics namespace.

Debug class and Debugger class

Trace class, CorrelationManager class, TraceListener class, TraceSource class, TraceSwitch class, XmlWriterTraceListener class, DelimitedListTraceListener class, and EventlogTraceListener class

Debugger attributes

DebuggerBrowsableAttribute class

DebuggerDisplayAttribute class

DebuggerHiddenAttribute class

DebuggerNonUserCodeAttribute class

DebugeerStepperBoundaryAttribute class

DebuggerStepThroughAttribute class

DebuggerTypeProxyAttribute class

DebuggerVisualizerAttribute class

 

 

F- Embed management information and events into a .NET Framework application. (Refer System.Management namespace)

Retrieve a collection of Management objects by using the ManagementObjectSearcher class and its derived classes.

Enumerate all disk drivers, network adapters, and processes on a computer.

Retrieve information about all network connections.

Retrieve information about all services that are paused.

ManagementQuery class

EventQuery class

ObjectQuery class

Subscribe to management events by using the ManagementEventWatcher class.


Posted by Oscar.SS on sábado, 12 de abril de 2008 10:48
Permalink | Comentarios (0) | Post RSSRSS comment feed

4- Implementando serializacion y la funcionalidad de entrada/salida en una aplicación de la plataforma .NET.

A- Serialize or deserialize an object or an object graph by using runtime serialization techniques. (Refer System.Runtime.Serialization namespace)

Serialization interfaces

IDeserializationCallback interface

IFormatter interface and IFormatterConverter interface

ISerializable interface

Serilization attributes

OnDeserializedAttribute class and OnDeserializingAttribute class

OnSerializedAttribute class and OnSerializingAttribute class

OptionalFieldAttribute class

SerializationEntry structure and SerializationInfo class

ObjectManager class

Formatter class, FormatterConverter class, and FormatterServices class

StreamingContext structure

 

 

B- Control the serialization of an object into XML format by using the System.Xml.Serialization namespace.

Serialize and deserialize objects into XML format by using the XmlSerializer class.

Control serialization by using serialization attributes.

Implement XML Serialization interfaces to provide custom formatting for XML serialization.

Delegates and event handlers are provided by the System.Xml.Serialization namespace.


C- Implement custom serialization formatting by using the Serialization Formatter classes.

SoapFormatter class (Refer System.Runtime.Serialization.Formatters.Soap namespace)

BinaryFormatter class (Refer System.Runtime.Serialization.Formatters.Binary namespace)


D- Access files and folders by using the File System classes. (Refer System.IO namespace)

File class and FileInfo class

Directory class and DirectoryInfo class

DriveInfo class and DriveType enumeration

FileSystemInfo class and FileSystemWatcher class

Path class

ErrorEventArgs class and ErrorEventHandler delegate

RenamedEventArgs class and RenamedEventHandler delegate


E- Manage byte streams by using Stream classes. (Refer System.IO namespace)

FileStream class

Stream class

MemoryStream class

BufferedStream class

 

 

F- Manage the .NET Framework application data by using Reader and Writer classes. (Refer System.IO namespace)

StringReader class and StringWriter class

TextReader class and TextWriter class

StreamReader class and StreamWriter class

BinaryReader class and BinaryWriter class


G- Compress or decompress stream information in a .NET Framework application (refer System.IO.Compression namespace), and improve the security of application data by using isolated storage. (Refer System.IO.IsolatedStorage namespace)

IsolatedStorageFile class

IsolatedStorageFileStream class

DeflateStream class

GZipStream class


Posted by Oscar.SS on sábado, 12 de abril de 2008 10:45
Permalink | Comentarios (0) | Post RSSRSS comment feed

5- Mejorando la seguridad de la aplicación de la plataforma .NET usando las características de seguridad de la plataforma .NET 2.0.

A- Implement code access security to improve the security of a .NET Framework application. (Refer System.Security namespace)

SecurityManager class

CodeAccessPermission class

Modify the Code Access security policy at the computer, user, and enterprise policy level by using the Code Access Security Policy tool (Caspol.exe).

PermissionSet class and NamedPermissionSet class

Standard Security interfaces

IEvidenceFactory interface

IPermission interface

 

 

B- Implement access control by using the System.Security.AccessControl classes.

DirectorySecurity class, FileSecurity class, FileSystemSecurity class, and RegistrySecurity class

AccessRule class

AuthorizationRule class and AuthorizationRuleCollection class

CommonAce class, CommonAcl class, CompoundAce class, GenericAce class, and GenericAcl class

AuditRule class

MutexSecurity class, ObjectSecurity class, and SemaphoreSecurity class


C- Implement a custom authentication scheme by using the System.Security.Authentication classes. (Refer System.Security.Authentication namespace)

May include but is not limited to: Authentication algorithms and SSL protocols



D- Encrypt, decrypt, and hash data by using the System.Security.Cryptography classes. (Refer System.Security.Cryptography namespace)

DES class and DESCryptoServiceProvider class

HashAlgorithm class

DSA class and DSACryptoServiceProvider class

SHA1 class and SHA1CryptoServiceProvider class

TripleDES and TripleDESCryptoServiceProvider class

MD5 class and MD5CryptoServiceProvider class

RSA class and RSACryptoServiceProvider class

RandomNumberGenerator class

CryptoStream class

CryptoConfig class

RC2 class and RC2CryptoServiceProvider class

AssymetricAlgorithm class

ProtectedData class and ProtectedMemory class

RijndaelManaged class and RijndaelManagedTransform class

CspParameters class

CryptoAPITransform class

Hash-based Message Authentication Code (HMAC)

HMACMD5 class

HMACRIPEMD160 class

HMACSHA1 class

HMACSHA256 class

HMACSHA384 class

HMACSHA512 class

 

 

E- Control permissions for resources by using the System.Security.Permission classes. (Refer System.Security.Permission namespace)

SecurityPermission class

PrincipalPermission class

FileIOPermission class

StrongNameIdentityPermission class

UIPermission class

UrlIdentityPermission class

PublisherIdentityPermission class

GacIdentityPermission class

FileDialogPermission class

DataProtectionPermission class

EnvironmentPermission class

IUnrestrictedPermission interface

RegistryPermission class

IsolatedStorageFilePermission class

KeyContainerPermission class

ReflectionPermission class

StorePermission class

SiteIdentityPermission class

ZoneIdentityPermission class

 

 

F- Control code privileges by using System.Security.Policy classes. (Refer System.Security.Policy namespace)

ApplicationSecurityInfo class and ApplicationSecurityManager class

ApplicationTrust class and ApplicationTrustCollection class

Evidence class and PermissionRequestEvidence class

CodeGroup class, FileCodeGroup class, FirstMatchCodeGroup class, NetCodeGroup class, and UnionCodeGroup class

Condition classes

AllMembershipCondition class

ApplicationDirectory class and ApplicationDirectoryMembershipCondition class

GacInstalled class and GacMembershipCondition class

Hash class and HashMembershipCondition class

Publisher class and PublisherMembershipCondition class

Site class and SiteMembershipCondition class

StrongName class and StrongNameMembershipCondition class

Url class and UrlMembershipConditon class

Zone class and ZoneMembershipCondition class

PolicyLevel class and PolicyStatement class

IApplicationTrustManager interface, IMembershipCondition interface, and IIdentityPermissionFactory interface


G- Access and modify identity information by using the System.Security.Principal classes. (Refer System.Security.Principal namespace)

GenericIdentity class and GenericPrincipal class

WindowsIdentity class and WindowsPrincipal class

NTAccount class and SecurityIdentifier class

IIdentity interface and IPrincipal interface

WindowsImpersonationContext class

IdentityReference class and IdentityReferenceCollection class


Posted by Oscar.SS on sábado, 12 de abril de 2008 10:44
Permalink | Comentarios (0) | Post RSSRSS comment feed

6- Implementando interoperabilidad, reflexión, y correos electrónicos en una aplicación de la plataforma .NET.

A- Expose COM components to the .NET Framework and the .NET Framework components to COM. (Refer System.Runtime.InteropServices namespace)

Import a type library as an assembly.

Add references to type libraries.

Type Library Importer (Tlbimp.exe)

Generate interop assemblies from type libraries.

Imported Library Conversion

Imported Module Conversion

Imported Type Conversion

Imported Member Conversion

Imported Parameter Conversion

TypeLibConverter class

Create COM types in managed code.

Compile an interop project.

Deploy an interop application.

Qualify the .NET Framework types for interoperation.

Apply Interop attributes, such as the ComVisibleAttribute class.

Package an assembly for COM.

Deploy an application for COM access.


B- Call unmanaged DLL functions in a .NET Framework application, and control the marshaling of data in a .NET Framework application. (Refer System.Runtime.InteropServices namespace)

Platform Invoke

Create a class to hold DLL functions.

Create prototypes in managed code.

DllImportAttribute class

Call a DLL function.

Call a DLL function in special cases, such as passing structures and implementing callback functions.

Create a new Exception class and map it to an HRESULT.

Default marshaling behavior

Marshal data with Platform Invoke

Marshal data with COM Interop

MarshalAsAttribute class and Marshal class


C- Implement reflection functionality in a .NET Framework application (refer System.Reflection namespace), and create metadata, Microsoft intermediate language (MSIL), and a PE file by using the System.Reflection.Emit namespace.

Assembly class

Assembly attributes

AssemblyAlgorithmIdAttribute class

AssemblyCompanyAttribute class

AssemblyConfigurationAttribute class

AssemblyCopyrightAttribute class

AssemblyCultureAttribute class

AssemblyDefaultAliasAttribute class

AssemblyDelaySignAttribute class

AssemblyDescriptionAttribute class

AssemblyFileVersionAttribute class

AssemblyFlagsAttribute class

AssemblyInformationalVersionAttribute class

AssemblyKeyFileAttribute class

AssemblyTitleAttribute class

AssemblyTrademarkAttribute class

AssemblyVersionAttribute class

Info classes

ConstructorInfo class

MethodInfo class

MemberInfo class

PropertyInfo class

FieldInfo class

EventInfo class

LocalVariableInfo class

Binder class and BindingFlags

MethodBase class and MethodBody class

Builder classes

AssemblyBuilder class

ConstructorBuilder class

EnumBuilder class

EventBuilder class

FieldBuilder class

LocalBuilder class

MethodBuilder class

ModuleBuilder class

ParameterBuilder class

PropertyBuilder class

TypeBuilder class

 

 

D- Send electronic mail to a Simple Mail Transfer Protocol (SMTP) server for delivery from a .NET Framework application. (Refer System.Net.Mail namespace)

MailMessage class

MailAddress class and MailAddressCollection class

SmtpClient class, SmtpPermission class, and SmtpPermissionAttribute class

Attachment class, AttachmentBase class, and AttachmentCollection class

SmtpException class and SmtpFailedReceipientException class

SendCompletedEventHandler delegate

LinkedResource class and LinkedResourceCollection class

AlternateView class and AlternateViewCollection class


Posted by Oscar.SS on sábado, 12 de abril de 2008 10:43
Permalink | Comentarios (0) | Post RSSRSS comment feed