1: TxtBoxUser.Text = login + " / " + firstName + " " + lastName;
1: TxtBoxUser.Text = String.Format("{0} / {1} {2}", login , firstName, lastName);
1: TxtBoxUser.Text = login + " / " + firstName + " " + lastName;
1: TxtBoxUser.Text = String.Format("{0} / {1} {2}", login , firstName, lastName);
Esta es la primera entrega de la serie de post que tratara el tema de Enterprise Library, en este caso cubriremos lo relacionado a la capa de datos.
En este primer post nos atañe preparar los requisitos previos para nuestra aplicación, que en este caso hacen referencia a la creación de la base de datos que vamos a utilizar en esta serie de post, así como los demás componentes que vamos a necesitar.
Manos a la obra
En este caso vamos a trabajar inicialmente con una base de datos en SQLServer, mas adelante usaremos una base de datos en Oracle. Para nuestro ejercicio, vamos a usar la base de datos Northwind, la cual puede ser descargada desde la página de la comunidad.
Por otra parte vamos a necesitar la última versión de Enterprise Library que a este momento es la 5, la cual podemos obtener en la página oficial.
Una vez descargado el script, debemos inicia sesión en la base de datos con privilegios de administrador con el fin de crear nuestra base de datos, una vez allí, abrimos el script y lo ejecutamos.
Aquellos que como en mi caso usan SqlServer 2012, van a encontrarse con el siguiente error:
Esto es debido a que en la versión SQLServer 2012 no esta soportado el uso de sp_dboption, según se puede ver en la página oficial, se debe optar por el uso de ALTER DATABASE.
Entonces, debemos remplazar las líneas:
exec sp_dboption 'Northwind','trunc. log on chkpt.','true'
exec sp_dboption 'Northwind','select into/bulkcopy','true'
por las siguientes:
ALTER DATABASE Northwind SET AUTO_SHRINK ON
ALTER DATABASE Northwind SET RECOVERY SIMPLE
Una vez se realiza el cambio y se ejecuta el script ya tenemos la base de datos creada, solo resta crear un usuario para trabajar con nuestra base de datos.
Como vemos ya contamos con una base de datos apta para nuestras pruebas. Con esto, mas la instalación de Enterprise Library 5, ya tenemos las bases para realizar los ejemplos propuestos en esta serie de post.
Microsoft Enterprise Library es una biblioteca compuesta por un conjunto de componentes de software reutilizables, que se encargan de las tareas mas comunes en lo que a temas transversales concierne.
Estos bloques de aplicación son una especie de guía que nos indica la forma mas adecuada de realizar dichas tareas, estos bloques están acompañados por respectivos ejemplos de uso, y pueden ser fácilmente ampliados para utilizarlos en proyectos complejos de nivel empresarial o en proyectos de línea de negocio.
Dicho de una forma más simple, son componentes que han sido desarrollados basándose en los mejores patrones y en las mejores prácticas de desarrollo de software, y que ofrecen las soluciones más adecuadas para situaciones tan comunes como un log, o un componente de acceso a datos.
Esta pensado con el fin de hacer las cosas mas fáciles a las personas envueltas en labores de desarrollo ya que estos componentes ya encapsulan dentro de si todas las funcionalidades necesarias, lo que se traduce en un ahorro significativo de tiempo y esfuerzo, permite la reutilización de componentes y al mismo tiempo garantiza un buen nivel de estandarización en los desarrollos.
Actualmente Enterprise Library en su versión 5 cuenta con los siguientes bloques de aplicación.
Como pueden ver, es una biblioteca muy completa e interesante, y aporta gran cantidad de funcionalidades que nos van a permitir llevar nuestros desarrollos a otro nivel.
Con esta premisa en mente, se da inicio a una serie de post en los cuales se trataran los diferentes bloques en mas detalle, de la mano de un pequeño proyecto, en el cual se espera hacer uso de estos con el fin de demostrar como podemos aprovechar esta maravillosa herramienta.
Para aquellos que deseen profundizar mas en el tema les recomiendo visitar la pagina de Patterns & Practices de Microsoft.
La gestión del control de cambios es un tema que normalmente preocupa a todo equipo de desarrollo, en la actualidad existen diferentes aplicaciones para ejercer dicho control, unas mas completas que otras, algunas de ellas de pago, otras libres.
En el caso de aquellos que desarrollamos con herramientas de Microsoft, estamos más que acostumbrados al uso de Team Foundation Server para este fin, pero esta herramienta esta pensada para grandes desarrollos, donde se cuenta con un equipo de trabajo de tamaño considerable, y dado su precio no es fácil para un desarrollador novel acceder a él, por lo que para proyectos pequeños terminaban decantándose por otras opciones como puede ser GIT.
La buena noticia es que ya tenemos a disposición una versión Express de Team Foundation, llamada Team Foudation Server Express, la cual nos va a permitir llevar el control de código de nuestros proyectos personales o pequeños proyectos para los cuales no contamos con los recursos necesarios para implementar un entorno mas complejo.
El primer punto a favor es que hace uso de Sql Server Express como repositorio, lo que es genial para el presupuesto.
Una de las cosas más destacables de esta versión es que permite ser utilizada con las versión Express de Visual Studio, lo que nos permite montar un entorno 100% free con productos Microsoft, aunque esta limitado a 5 usuarios.
En esencia cuenta con las mismas características de un TFS en instalación básica, y puede correr en los siguientes sistemas operativos:
Y cuenta con las siguientes limitaciones:
No hay licenciamiento con esta edición del producto por lo que puede ser utilizado por un equipo pequeño de manera gratuita teniendo en cuantas las limitaciones comentadas anteriormente.
Esta disponible para su descarga en la página de TFS de Microsoft.
1: <asp:Menu ID="Menu" CssClass="menu" runat="server" DynamicHorizontalOffset="2" Orientation="Horizontal"
2: StaticSubMenuIndent="10px" DynamicPopOutImageUrl="~/Images/MenuArrowGrey.gif"StaticPopOutImageUrl="~/Images/Trasparency.gif">
3: <StaticSelectedStyle CssClass="staticSelectedStyle" />
4: <StaticMenuItemStyle CssClass="staticMenuItemStyle" />
1: public string GetSHA1(string data)
2: {
3: SHA1CryptoServiceProvider Sha1 = new SHA1CryptoServiceProvider();
4: Byte[] buffer;
5:
6: //Convertimos la cadena en un arreglo0 de bytes
7: buffer = Encoding.ASCII.GetBytes(data);
8:
9: //Obtenemos la hash, y la codificamos en base 64 para evitar caracteres no soportados
10: return Convert.ToBase64String(Sha1.ComputeHash(buffer));
11: }
1: public string Encryption(string data, string key)
2: {
3: TripleDESCryptoServiceProvider TDes = new TripleDESCryptoServiceProvider();
4: MD5CryptoServiceProvider Hash = new MD5CryptoServiceProvider();
5:
6: Byte[] buffer;
7:
8: try
9: {
10: //Se convierte la cadena en un arreglo de bytes
11: buffer = Encoding.ASCII.GetBytes(data);
12:
13: //Definimos la llave de encripción, en este caso se me ocurrio incrementar la seguridad
14: //usando como llave de encripción, la hash MD5 de la llave que se especificada en el metodo
15: TDes.Key = Hash.ComputeHash(Encoding.ASCII.GetBytes(key));
16:
17: //Se define el modo de cifrado que se desea utilizar
18: TDes.Mode= CipherMode.ECB;
19:
20: //Se crea el encriptor y se transforma el bloque de bits, se convierte a texto en base 64 para poderlo manejar
21: //ya que asi es mas viable el uso sobre con HTTP
22: return Convert.ToBase64String(TDes.CreateEncryptor().TransformFinalBlock (buffer,0,buffer.Length));
23: }
24: catch (Exception ex)
25: {
26: Console.WriteLine("Se genero un error al cifrar los datos! : {0}", ex.ToString());
27: throw ex;
28: }
29: }
1: public string Decryption(string data, string key)
2: {
3: TripleDESCryptoServiceProvider TDes = new TripleDESCryptoServiceProvider();
4: MD5CryptoServiceProvider Hash = new MD5CryptoServiceProvider();
5:
6: Byte[] buffer;
7:
8: try
9: {
10: //Se convierte la cadena en un arreglo de bytes
11: buffer = Convert.FromBase64String(data);
12:
13: //Definimos la llave de encripción, en este caso se me ocurrio incrementar la seguridad
14: //usando como llave de encripción, la hash MD5 de la llave que se especificada en el método
15: TDes.Key = Hash.ComputeHash(Encoding.ASCII.GetBytes(key));
16:
17: //Se define el modo de cifrado que se desea utilizar
18: TDes.Mode = CipherMode.ECB;
19:
20: //Se crea el desencriptor y se transforma el bloque de bits, se convierte a texto en base 64 para poderlo manejar
21: //ya que asi es mas viable el uso en ambientes de redes
22: return Encoding.ASCII.GetString(TDes.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length));
23: }
24: catch (Exception ex)
25: {
26: Console.WriteLine("Se genero un error al descifrar los datos! : {0}", ex.ToString());
27: throw ex;
28: }
29: }
1: private static string Coding(string cadena, string key)
2: {
3: DESCryptoServiceProvider des = new DESCryptoServiceProvider();
4: Byte[] buffer;
5: Byte[] cryptoKey=new byte[8];
6:
7: try
8: {
9: //Se convierte la cadena en un arreglo de bytes
10: buffer = Encoding.ASCII.GetBytes(cadena);
11:
12: //Se convierte la llave en un array de bytes y se toman 8 bytes que usa DES
13: Array.Copy(ASCIIEncoding.ASCII.GetBytes(key), 0, cryptoKey, 0, 7);
14:
15: //Se define la llave de encripción
16: des.Key = cryptoKey;
17:
18: //Se define el modo de cifrado que se desea utilizar
19: des.Mode = CipherMode.ECB;
20:
21: //Se crea el encriptor y se transforma el bloque de bits, se convierte a texto en base 64
22: //ya que asi es mas viable el uso sobre redes
23: return Convert.ToBase64String(des.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length));
24: }
25: catch (Exception ex)
26: {
27: Console.WriteLine("Se ha presentado un error! : {0}", ex.ToString());
28: throw;
29: }
30: }
1: private static string UnCoding(string cadena, string key)
2: {
3: DESCryptoServiceProvider des = new DESCryptoServiceProvider();
4: Byte[] buffer;
5: Byte[] cryptoKey = new byte[8];
6:
7: try
8: {
9: //Se convierte la cadena en un arreglo de bytes
10: buffer = Convert.FromBase64String(cadena);
11:
12: //Se convierte la llave en un array de bytes y se toman 8 bytes que usa DES
13: Array.Copy(ASCIIEncoding.ASCII.GetBytes(key), 0, cryptoKey, 0, 7);
14:
15: //Se define la llave de encripción
16: des.Key = cryptoKey;
17:
18: //Se define el modo de cifrado que se desea utilizar
19: des.Mode = CipherMode.ECB;
20:
21: //Se crea el decodificador y se transforma el bloque de bits, se convierte a una cadena de texto
22: return Encoding.ASCII.GetString(des.CreateDecryptor().TransformFinalBlock(buffer, 0,buffer.Length));
23: }
24: catch (Exception ex)
25: {
26: Console.WriteLine("Se ha presentado un error al decodificar! : {0}", ex);
27: throw ;
28: }
29: }