<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Blog sobre Tecnología y Desarrollo .NET</title><link>http://www.developersdotnet.com:80/blogs</link><description>Blog sobre Tecnología y Desarrollo .NET</description><item><title>Novedades de SQL Server 2012</title><link>http://www.developersdotnet.com:80/blogs/novedades-de-sql-server-2012</link><description>&lt;p&gt;A trav&amp;eacute;s de una serie de entregas vamos a descubrir las "Novedades de SQL Server 2012", encontraremos grandes mejores que nos permitir&amp;aacute;n administrar de una mejor forma nuestra plataforma de datos.&lt;/p&gt;
&lt;p&gt;En SQL Server 2012 contamos con nuevas opciones de plataforma:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plataforma auto-administrada (Platform Self Managed):&lt;/strong&gt; En esta opci&amp;oacute;n el personal de TI ser&amp;aacute; el responsable de mantener el ambiente id&amp;oacute;neo para ejecutar de forma adecuada los procesos en las aplicaciones que interact&amp;uacute;en con la Base de Datos. Deber&amp;aacute; de preocuparse por instalar las actualizaciones de seguridad, dar mantenimiento al hardware, administrar el sistema operativo, las conexiones de red entre otras tareas importantes que son necesarias para la ejecuci&amp;oacute;n de las aplicaciones de misi&amp;oacute;n cr&amp;iacute;tica de la compa&amp;ntilde;&amp;iacute;a.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infraestructura como servicio (IaaS - Infrastructure as a Service):&lt;/strong&gt; Esta opci&amp;oacute;n le permitir&amp;aacute; a la empresa delegar las tareas relacionadas con la administraci&amp;oacute;n de hardware lo que le permitir&amp;aacute; al personal de TI solo administrar las aplicaciones de bases de datos, aplicaciones y sistema operativo. Una gran ventaja de esta opci&amp;oacute;n es el poder escalar la infraestructura de acuerdo a los requerimientos de nuestras aplicaciones de base de datos, es decir solo vamos a pagar en Centros de Datos por el uso del CPU, memoria RAM y disco duro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plataforma como servicio (PaaS - Platform as a Service):&lt;/strong&gt; Esta opci&amp;oacute;n nos permitir&amp;aacute; &amp;uacute;nicamente centrarnos la creaci&amp;oacute;n y en el mantenimiento de nuestras aplicaciones ya que el proveedor adem&amp;aacute;s de brindarnos la infraestructura de hardware nos deslinda&amp;nbsp;de la administraci&amp;oacute;n&amp;nbsp;el sistema operativo y el software necesario para la ejecuci&amp;oacute;n de las aplicaciones. Sin embargo encontraremos limitantes en el entorno de ejecuci&amp;oacute;n como por ejemplo el tipo de lenguaje de desarrollo, bases de datos y sistema operativo a utilizar, en este sentido debemos de elegir sobre que plataforma vamos a trabajar para permitir la evoluci&amp;oacute;n de nuestras aplicaciones. Actualmente con Windows Azure este tipo de desventajas es eliminado con facilidad ya que nos permite trabajar con lenguajes como son Visual Basic, C#, Java, PHP entre otros y obviamente el uso de la base de datos de SQL Server mediante SQL Azure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Software como servicio (SaaS - Software as a Service):&lt;/strong&gt; Esta plataforma es un modelo de distribuci&amp;oacute;n donde el software es provisto por completo por un tercero, mismo que nos brindar&amp;aacute; la posibilidad de ejecutar aplicaciones sin la necesidad de instalar las aplicaciones en el equipo cliente, un ejemplo de esta plataforma es el servicio de Office 365 que nos da la posibilidad de usar los servicios de correo electr&amp;oacute;nico avanzado, el uso de comunicaciones unificadas, el uso de software de contenido mediante SQL Server y SharePoint y las versiones de Office en la Web.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SQL Server ha evolucionado a trav&amp;eacute;s de tiempo y ahora podemos contar con una mejor herramienta que nos permitir&amp;aacute; tener herramientas avanzadas que nos permitir&amp;aacute;n entregar aplicaciones de calidad y de alto rendimiento.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img alt="Timeline SQL Server" align="middle" src="/Media/Default/BlogPost/blogs/timelinesqlserver.png" width="969" height="632" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;En lo que se refiere a la plaforma de datos vamos a encontrar nuevas caracter&amp;iacute;sticas y una mejora sobre lo que ya se encontraba implementado en versiones anteriores de SQL Server.&lt;/p&gt;
&lt;p&gt;En los servicios de la base de datos encontramos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La integraci&amp;oacute;n para la publicaci&amp;oacute;n de nuestra base de datos en SQL Azure con tan solo unos clicks.&lt;/li&gt;
&lt;li&gt;Para los amantes de la replicaci&amp;oacute;n vamos a encontrar la sincronizaci&amp;oacute;n de nuestra base de datos local con la base de datos alojada en SQL Azure mediante SQL Azure Data Sync&lt;/li&gt;
&lt;li&gt;Mejoras en la b&amp;uacute;squeda de tipo "Full Text Search" vamos&amp;nbsp;a encontrar nuevos soportes como es el an&amp;aacute;lisis sem&amp;aacute;ntico (Semantic Search) que unido con FileTable nos permitir&amp;aacute; hacer consultas no s&amp;oacute;lo sobre palabras en el texto original sino tamb&amp;iacute;&amp;eacute;n por el significado del texto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En la parte de Integraci&amp;oacute;n de Servicios (Data Integration Services) encontraremos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mejoras en la interfaz gr&amp;aacute;fica de usuario de Business Intelligence Development Studio&lt;/li&gt;
&lt;li&gt;Se ha agregado el SQL Server Integration Services que es la herramienta que nos va a permitir una administraci&amp;oacute;n de proyectos m&amp;aacute;s eficiente.&lt;/li&gt;
&lt;li&gt;Aparece algo nuevo llamado Data Quality Services. SQL Server Data Quality Services (SSDQS) es una soluci&amp;oacute;n basada en el conocimiento de la calidad de datos. Nos permite la construcci&amp;oacute;n de una base de conocimiento de calidad de los datos (Data Quality Knowlege Base o DQKB) y utilizarla para realizar varias tareas de calidad de datos cr&amp;iacute;ticas c&amp;oacute;mo correcci&amp;oacute;n, enriquecimiento, normalizaci&amp;oacute;n y consolidaci&amp;oacute;n.&lt;/li&gt;
&lt;li&gt;Master Data Services es la soluci&amp;oacute;n de SQL Server para la administraci&amp;oacute;n de datos maestros. MDM busca crear y mantener listas &amp;uacute;nicas e integrales de los datos maestros o claves de cualquier organizaci&amp;oacute;n en torno a la cual giran los procesos y sistemas.&lt;/li&gt;
&lt;li&gt;StreamInsight en SQL Server 2012 nos permite el procesamiento continuo e incremental de las secuencias sin l&amp;iacute;mite de eventos desde varios or&amp;iacute;genes con una latencia de cero. La capacidad de supervisar, analizar y actuar en los datos en movimiento proporciona una importante oportunidad para tomar decisiones de negocios mejor basadas en informaci&amp;oacute;n casi en tiempo real.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dentro de Analytical Services las mejoras que podemos mencionar son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dentro de PowerPivot podemos a&amp;ntilde;adir la opci&amp;oacute;n descripciones a las columnas, medidas y KPIs en el modelo de PowerPivot. Otra mejora es que los elementos de PowerPivot ahora los Field List aparecen ordenados.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En la parte de Reporting Services vamos tenemos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El despligue de Reporting Services en SQL Azure, desde ahora con unos cuantos clicks podremos tener todas las capacidades de Reporting Services en los servicios de SQL Azure.&lt;/li&gt;
&lt;li&gt;PowerView es una nueva herramienta que nos permite crear nuevos tipos de reportes de forma interactiva lo que le permitir&amp;aacute; a analistas de datos, tomadores de decisiones a tener una mejor visualizaci&amp;oacute;n en los datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Otras de las importantes mejoras que podemos encontrar en SQL Server 2012;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Soporte para instalar las bases de datos master, model, msdb y tempdb en SMB (Server Message Block) como una opci&amp;oacute;n de almacenamiento.&lt;/li&gt;
&lt;li&gt;Soporte para UTF-16.&lt;/li&gt;
&lt;li&gt;Mejoras en particiones de la bases de datos/&amp;iacute;ndices (hasta 15K particiones)&lt;/li&gt;
&lt;li&gt;Mejoras en el rendimiento de FileStream mediante los FileTables&lt;/li&gt;
&lt;li&gt;Mejoras en los tipos de datos de Spatial&lt;/li&gt;
&lt;li&gt;Vamos a encontrar una nueva tecnolog&amp;iacute;a llamada ColumnStore que nos permitir&amp;aacute; crear &amp;iacute;ndices sobre columnas y no sobre registros, lo que permitir&amp;aacute; una mejora en el rendimiento de almacenes de datos (Data Warehouse). Van a ser muy eficientes cuando utilizamos los datos en formato de solo lectura.&lt;/li&gt;
&lt;li&gt;Otra nueva caracter&amp;iacute;stica es la integraci&amp;oacute;n del THROW en los bloques TRY CATCH existentes desde SQL Server 2008.&lt;/li&gt;
&lt;li&gt;Para los programadores nos liberan una mejor interoperatibilidad de ODBC para desarrolladores de C/C++ de Windows y Linux a trav&amp;eacute;s de ODBC, desarrolladores de Java a trav&amp;eacute;s de JDBC y mejoras para desarrolladores de PHP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una caracter&amp;iacute;stica bastante importante es la mejora del Database Mirroring con la aparici&amp;oacute;n de AlwaysOn, mismo que veremos con detalle en la siguiente entrega.&lt;/p&gt;
&lt;p&gt;Espero que esto pueda ayudarles y por favor no duden en enviarnos sus comentarios, si omitimos algo o si algo esta mal, de esta forma podr&amp;eacute; saber si la informaci&amp;oacute;n que estamos publicando es la correcta.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saludos!&lt;br /&gt;Victor Alameda&lt;/p&gt;</description><pubDate>Sun, 22 Apr 2012 19:46:39 GMT</pubDate><guid isPermaLink="true">http://www.developersdotnet.com:80/blogs/novedades-de-sql-server-2012</guid></item><item><title>Instalando Windows 7 desde una USB</title><link>http://www.developersdotnet.com:80/blogs/instalando-windows-7-desde-una-usb</link><description>&lt;p&gt;En esta ocasi&amp;oacute;n les comparto una peque&amp;ntilde;a utilidad para crear un Pendrive y as&amp;iacute; poder instalar Windows 7 desde una memoria USB (siempre y cuando el equipo de c&amp;oacute;mputo soporte iniciar desde una memoria USB.&lt;/p&gt;
&lt;p&gt;Requisitos:&lt;/p&gt;
&lt;p&gt;1. Microsoft .NET Framework 2.0 o superior.&lt;br /&gt;2. Descargar el programa proporcionado por Microsoft desde esta liga: &lt;a href="http://images2.store.microsoft.com/prod/clustera/framework/w7udt/1.0/en-us/Windows7-USB-DVD-tool.exe"&gt;http://images2.store.microsoft.com/prod/clustera/framework/w7udt/1.0/en-us/Windows7-USB-DVD-tool.exe&lt;/a&gt;&lt;br /&gt;3. Tener una imagen v&amp;aacute;lida (ISO) de Windows 7, es importante mencionar que solo funciona con archivos ISO proporcionados por Microsoft si crear una imagen desde el DVD no funcionar&amp;aacute;.&lt;/p&gt;
&lt;p&gt;Una vez que descarguen la aplicaci&amp;oacute;n y realicen la instalaci&amp;oacute;n ver&amp;aacute;n una pantalla como la siguiente:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Windows 7 Pendrive" align="middle" src="/Media/Default/BlogPost/blogs/Window7USB.png" /&gt;&lt;/p&gt;
&lt;p&gt;Y listo solo hay que seguir los pasos del asistente y el programa crear un Pendrive para instalaci&amp;oacute;n de Windows 7.&lt;/p&gt;
&lt;p&gt;Espero sea de utidad y nos vemos en la pr&amp;oacute;xima entrega.&lt;/p&gt;
&lt;p&gt;Saludos!&lt;br /&gt;V&amp;iacute;ctor Alameda&lt;/p&gt;</description><pubDate>Tue, 17 Jan 2012 04:31:36 GMT</pubDate><guid isPermaLink="true">http://www.developersdotnet.com:80/blogs/instalando-windows-7-desde-una-usb</guid></item><item><title>Uso de la cláusula Join con expresiones Lambda</title><link>http://www.developersdotnet.com:80/blogs/uso-de-la-clausula-join-con-expresiones-lambda</link><description>&lt;p&gt;En esta ocasi&amp;oacute;n les comparto el uso de la cl&amp;aacute;usula Join con expresiones Lambda.&lt;/p&gt;
&lt;p&gt;Para comenzar vamos a utilizar el siguiente ejemplo:&lt;/p&gt;
&lt;p&gt;Vamos a suponer que tenemos 2 tablas, una llamada Factura y otra DetalleFactura, usando un INNER JOIN de SQL Server para crear una consulta de estas tablas en LinqToSQL quedar&amp;iacute;a la siguiente expresi&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;var consulta = from f in db.Factura&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; join df in db.DetalleFactura&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on f.FacturaId equals df.FacturaId&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select new { f.FacturaId, f.Cliente,&amp;nbsp;df.ClaveArticulo,&amp;nbsp;... };&lt;/p&gt;
&lt;p&gt;La expresi&amp;oacute;n Lambda quedar&amp;iacute;a de la siguiente forma:&lt;/p&gt;
&lt;p&gt;var consulta = db.Factura&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Tabla&amp;nbsp;padre&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Join(db.DetalleFactura,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Tabla&amp;nbsp;hija&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f =&amp;gt; f.FacturaId,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;FK&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;df =&amp;gt; df.FacturaId,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // PK &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (f, fd) =&amp;gt; new {&amp;nbsp;Factura = f,&amp;nbsp;DetalleFactura =&amp;nbsp;df }) //&amp;nbsp;Definimos los alias de las tablas&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Select(c =&amp;gt; new { c.Factura.FacturaId, c.Factura.Cliente, df.DetalleFactura.ClaveArticulo);&amp;nbsp; // Seleccionamos los campos que deseamos mostrar.&lt;/p&gt;
&lt;p&gt;Como siempre espero que sea de utilidad esta aportaci&amp;oacute;n y considero que es algo muy &amp;uacute;til para nuestros proyectos en donde utilizamos Entity Framework, pero es importante mencionarles que este tipo de expresiones tambi&amp;eacute;n las podemos utilizar con la clase DataContext de LinqToSQL, es solo otra forma de escribir expresiones en el nuevo Framework 4.0&lt;/p&gt;
&lt;p&gt;Saludos!&lt;br /&gt;V&amp;iacute;ctor Alameda&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Sun, 08 Jan 2012 05:41:44 GMT</pubDate><guid isPermaLink="true">http://www.developersdotnet.com:80/blogs/uso-de-la-clausula-join-con-expresiones-lambda</guid></item><item><title>Instalando PHP 5.3.8 en IIS 7.5</title><link>http://www.developersdotnet.com:80/blogs/instalando-php-5.3.8-en-iis-7.5</link><description>&lt;p&gt;En estos d&amp;iacute;as he estado trabajando con la integraci&amp;oacute;n de una aplicaci&amp;oacute;n de PHP con .NET para lo cual necesitaba instalar el lenguaje de programaci&amp;oacute;n en mi computadora.&lt;/p&gt;
&lt;p&gt;Les dejo un peque&amp;ntilde;o tutorial para realizar la instalaci&amp;oacute;n de PHP 5.3.8 en un ambiente de Windows 2008 R2/Windows 7 y IIS 7.5&lt;/p&gt;
&lt;p&gt;Primero tenemos que realizar la descarga desde la siguiente liga: &lt;a href="http://windows.php.net/downloads/releases/php-5.3.8-nts-Win32-VC9-x86.msi"&gt;http://windows.php.net/downloads/releases/php-5.3.8-nts-Win32-VC9-x86.msi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez que la descarga se haya completado ejecutamos el instalador y lo dejamos con las opci&amp;oacute;n que nos da por default. Ahora bien, en mi caso como estoy integrando una aplicaci&amp;oacute;n que est&amp;aacute; en PHP con .NET y como la aplicaci&amp;oacute;n est&amp;aacute; desarrollada con ionCube es necesario habilitar esta funcionalidad en la instalaci&amp;oacute;n de PHP, para hacer esto tenemos que realizar la descarga desde: &lt;a href="http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_win_nonts_vc9_x86_ipf.zip"&gt;http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_win_nonts_vc9_x86_ipf.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Antes de ejecutar un archivo de configuraci&amp;oacute;n tenemos que modificar el php.ini de la instalaci&amp;oacute;n de PHP, la l&amp;iacute;nea que debemos de agregar es la siguiente:&lt;/p&gt;
&lt;p&gt;zend_extension = "C:\\PHP Installation Folder\\ext\ioncube_loader_win_5.3.dll"&lt;/p&gt;
&lt;p&gt;Una vez que hayamos descargado el paquete vamos a copiar los archivos dll que est&amp;aacute;n en el archivo zip a la carpeta C:\PHP Installation Folder\ext y a continuaci&amp;oacute;n copiamos el archivo loader-wizard.php en la carpeta de la aplicaci&amp;oacute;n Web con la que vamos a trabajar: &lt;a href="http://localhost/webapplication/loader-wizard.php"&gt;http://localhost/webapplication/loader-wizard.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Y listo una vez que haya terminado de configuraci&amp;oacute;n a aplicaci&amp;oacute;n las extensiones de ionCube podremos visualizar aplicaciones escritas en PHP con ionCube.&lt;/p&gt;
&lt;p&gt;Es importante mencionar que la versi&amp;oacute;n que deben de instalar es Non Thread Safe ya que esta versi&amp;oacute;n trabaja mejor con un servidor IIS y la versi&amp;oacute;n Threah Safe es &amp;oacute;ptima para servidores APACHE.&lt;/p&gt;
&lt;p&gt;Espero sea de utilidad este peque&amp;ntilde;o tutorial.&lt;/p&gt;
&lt;p&gt;Saludos y Feliz Codificaci&amp;oacute;n!&lt;br /&gt;V&amp;iacute;ctor Alameda&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Mon, 21 Nov 2011 20:10:32 GMT</pubDate><guid isPermaLink="true">http://www.developersdotnet.com:80/blogs/instalando-php-5.3.8-en-iis-7.5</guid></item><item><title>Novedades en ADO.NET 2.0 - Multiple Active Result Sets</title><link>http://www.developersdotnet.com:80/blogs/novedades-en-ado.net-2.0---multiple-active-result-sets</link><description>&lt;p&gt;Una de las mejoras que vamos a encontrar con la nueva versi&amp;oacute;n de ADO.NET 2.0 es MARS (Multiple Active Result Sets), lo que nos permitir&amp;aacute; utilizar m&amp;uacute;ltiples ejecuciones con una misma conexi&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Pero veamos a que se refiere esto, en la versi&amp;oacute;n de ADO.NET 1.1 ten&amp;iacute;amos un problema, &amp;iquest;qu&amp;eacute; pasaba cuando quer&amp;iacute;amos ejecutar m&amp;aacute;s de una consulta con una misma conexi&amp;oacute;n?&lt;/p&gt;
&lt;p&gt;Veamos el siguiente c&amp;oacute;digo con ADO.NET 1.1:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;string ConnectionString = "Data Source=(local); Initial Catalog=Northwind; Integrated Security=SSPI";&lt;br /&gt;SqlConnection conn = new SqlConnection(ConnectionString);&lt;br /&gt;SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", conn);&lt;br /&gt;SqlDataReader dr;&lt;/p&gt;
&lt;p&gt;conn.Open();&lt;br /&gt;dr = cmd.ExecuteReader();&lt;br /&gt;GridView1.DataSource = dr;&lt;br /&gt;GridView1.DataBind();&lt;/p&gt;
&lt;p&gt;SqlDataReader = dr2;&lt;br /&gt;SqlCommand cmd2 = new SqlCommand("SELECT * FROM Orders", conn);&lt;/p&gt;
&lt;p&gt;dr2 = cmd2.ExecuteReader();&lt;br /&gt;GridView2.DataSource = dr2;&lt;br /&gt;GridView2.DataBind();&lt;/p&gt;
&lt;p&gt;conn.Close();&lt;/p&gt;
&lt;p&gt;Este c&amp;oacute;digo nos provocar&amp;aacute; un error en tiempo de ejecuci&amp;oacute;n "There is already an Open DataReader associated with this Connection which must be close first.", esto es porque cuando ejecutamos el primer DataReader (dr) se mantiene la conexi&amp;oacute;n abierta y se encuentra bloqueada hasta que el cursor se cierre, y esto no nos permitir&amp;aacute; ejecutar el segundo DataReader (dr2).&lt;/p&gt;
&lt;p&gt;Ahora bien este mismo c&amp;oacute;digo funcionar&amp;aacute; perfectamente con MARS en ADO.NET 2.0 s&amp;oacute;lo que esta funci&amp;oacute;n se encuentra deshabilitada de forma predeterminada, para habilitar MARS debemos de agregar a la cadena de conexi&amp;oacute;n la siguiente propiedad: MultipleActiveResultSets=True&lt;/p&gt;
&lt;p&gt;Vemos como quedar&amp;iacute;a nuestro c&amp;oacute;digo:&lt;/p&gt;
&lt;p&gt;string ConnectionString = "Data Source=(local); Initial Catalog=Northwind; Integrated Security=SSPI; MultipleActiveResultSets=True";&lt;br /&gt;SqlConnection conn = new SqlConnection(ConnectionString);&lt;br /&gt;SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", conn);&lt;br /&gt;SqlDataReader dr;&lt;/p&gt;
&lt;p&gt;conn.Open();&lt;br /&gt;dr = cmd.ExecuteReader();&lt;br /&gt;GridView1.DataSource = dr;&lt;br /&gt;GridView1.DataBind();&lt;/p&gt;
&lt;p&gt;SqlDataReader = dr2;&lt;br /&gt;SqlCommand cmd2 = new SqlCommand("SELECT * FROM Orders", conn);&lt;/p&gt;
&lt;p&gt;dr2 = cmd2.ExecuteReader();&lt;br /&gt;GridView2.DataSource = dr2;&lt;br /&gt;GridView2.DataBind();&lt;/p&gt;
&lt;p&gt;conn.Close();&lt;/p&gt;
&lt;p&gt;Otra ventaja que tenemos con MARS es que podemos tener m&amp;uacute;ltiples transacciones porque est&amp;aacute;n ligadas a la ejecuci&amp;oacute;n y no a la conexi&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;En conclusi&amp;oacute;n vamos a poder realizar varias ejecuciones reutilizando la misma conexi&amp;oacute;n a la base de datos sin la necesidad de crear nuevas conexiones o de abrir y cerrar las conexiones existentes.&lt;/p&gt;
&lt;p&gt;Otra cosa que debemos de tomar en cuenta es que cuando utilizamos MARS se crea una sesi&amp;oacute;n l&amp;oacute;gica en el Cache y nos permitir&amp;aacute; tener 10 sesiones de MARS, cuando se llegue al l&amp;iacute;mite de estas sesiones se crear&amp;aacute; una nueva sesi&amp;oacute;n. Este tipo de sesiones no caducar&amp;aacute;n, s&amp;oacute;lo ser&amp;aacute;n eliminadas cuando el objeto conexi&amp;oacute;n sea liberado de memoria, es decir que sea cerrado.&lt;/p&gt;
&lt;p&gt;Bueno espero que esto les sea de utilidad. Nos vemos para la siguiente entrega.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saludos!&lt;br /&gt;Victor Alameda&lt;/p&gt;</description><pubDate>Fri, 04 Nov 2011 14:28:27 GMT</pubDate><guid isPermaLink="true">http://www.developersdotnet.com:80/blogs/novedades-en-ado.net-2.0---multiple-active-result-sets</guid></item><item><title>Enviado correo electrónico con ASP.NET 2.0</title><link>http://www.developersdotnet.com:80/blogs/enviado-correo-electronico-con-asp.net-2.0</link><description>&lt;p&gt;En este art&amp;iacute;culo les voy a mostrar lo sencillo que es enviar correos electr&amp;oacute;nicos desde ASP.NET 2.0, para esto vamos a utilizar la clase System.Net.Mail, una nueva clase de la versi&amp;oacute;n 2.0 de Microsft .NET Framework.&lt;/p&gt;
&lt;p&gt;En este espacio de nombres (Namespace) vamos a utilizar las siguiente clases:&lt;/p&gt;
&lt;p&gt;MailMessage: Con esta clase vamos a crear el mensaje adem&amp;aacute;s que nos permitir&amp;aacute; indicar qui&amp;eacute;n env&amp;iacute;a el mensaje, qui&amp;eacute;n lo recibe, el asunto, etc.&lt;/p&gt;
&lt;p&gt;MailAddress: Con este objeto vamos a indicar quien env&amp;iacute;a el mensaje mediante la propiedad From de la clase MailMessage&lt;/p&gt;
&lt;p&gt;Para enviar el mensaje vamos a utilizar un objeto de la clase SmtpClient, en donde tendremos que crear una nueva instancia de la clase para asignar los valores adecuados para poder mandar el mensaje.&lt;/p&gt;
&lt;p&gt;"Ojo", estas clases solo se pueden utilizar con la versi&amp;oacute;n 2.0 del Framework.&lt;/p&gt;
&lt;p&gt;Bueno ya que vimos cuales son los elementos que nos permitir&amp;aacute;n enviar el correo vamos a ver como se hace:&lt;/p&gt;
&lt;p&gt;Creaci&amp;oacute;n del Mensaje:&lt;/p&gt;
&lt;p&gt;Vamos a utilizar las siguientes propiedades para crear el mensaje:&lt;/p&gt;
&lt;p&gt;From: La persona que env&amp;iacute;a el mensaje&lt;br /&gt;To: La persona que recibe el mensaje&lt;br /&gt;Subject: El asunto del mensaje&lt;br /&gt;Body: El contenido o cuerpo del mensaje&lt;/p&gt;
&lt;p&gt;Una vez que sabemos cuales son las propiedades que vamos a utilizar, pasamos al c&amp;oacute;digo&lt;/p&gt;
&lt;p&gt;Creamos un objeto de tipo System.Net.Mail.MailMessage&lt;/p&gt;
&lt;p&gt;VB.NET:&lt;br /&gt;Dim _mail As New System.Net.Mail.MailMessage&lt;/p&gt;
&lt;p&gt;C#&lt;br /&gt;System.Net.Mail.MailMessage _mail = new System.Net.Mail.MailMessage();&lt;/p&gt;
&lt;p&gt;Ahora vamos a asignar las propiedades utilizando valores obtenidos de cajas de texto de una WebForm&lt;/p&gt;
&lt;p&gt;VB.NET&lt;br /&gt;_mail.From = New System.Net.Mail.MailAddress(txtDe.Text)&lt;br /&gt;_mail.To.Add(txtPara.Text)&lt;br /&gt;_mail.Subject = txtAsunto.Text&lt;br /&gt;_mail.Body = txtTexto.Text&lt;br /&gt;_mail.IsBodyHtml = False&lt;br /&gt;_mail.Priority = System.Net.Mail.MailPriority.Normal&lt;/p&gt;
&lt;p&gt;C#&lt;br /&gt;_mail.From = new System.Net.Mail.MailAddress(txtDe.Text);&lt;br /&gt;_mail.To.Add(txtPara.Text);&lt;br /&gt;_mail.Subject = txtAsunto.Text;&lt;br /&gt;_mail.Body = txtTexto.Text;&lt;br /&gt;_mail.IsBodyHtml = false;&lt;br /&gt;_mail.Priority = System.Net.Mail.MailPriority.Normal;&lt;/p&gt;
&lt;p&gt;Una vez que hemos creado el objeto del mensaje vamos a enviarlo utilizando una instancia de la clase SmtpClient de la que estaremos usando las siguientes propiedades:&lt;/p&gt;
&lt;p&gt;Host: Le indicamos el nombre del servidor de correo que estemos utilizando (Ej. mail.midominio.com):&lt;/p&gt;
&lt;p&gt;VB.NET&lt;br /&gt;Dim smtp As New System.Net.Mail.SmtpClient&lt;br /&gt;smtp.Host = "mail.midominio.com"&lt;/p&gt;
&lt;p&gt;C#&lt;br /&gt;System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();&lt;br /&gt;smtp.Host = "mail.midominio.com";&lt;/p&gt;
&lt;p&gt;Si nuestro servidor requiere autenticaci&amp;oacute;n, vamos a poder d&amp;aacute;rsela mediante el objeto NetworkCredential, en donde le indicatemos el nombre de usuario y contrase&amp;ntilde;a, ese objeto lo asignamos a la propiedad Credentials del objeto SmtpClient que acabamos de crear&lt;/p&gt;
&lt;p&gt;VB.NET&lt;br /&gt;smtp.Credentials = New System.Net.NetworkCredential("usuario", "password")&lt;/p&gt;
&lt;p&gt;C#&lt;br /&gt;smtp.Credentials = new System.Net.NetworkCredential("usuario", "password");&lt;/p&gt;
&lt;p&gt;Ya que tenemos estos pasos realizados vamos a mandar el mensaje, para esto vamos a utilizar un bot&amp;oacute;n al que le llamaremos "Enviar" y en el evento click de este bot&amp;oacute;n escribimos el siguiente c&amp;oacute;digo:&lt;/p&gt;
&lt;p&gt;VB.NET&lt;br /&gt;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; smtp.Send(_mail)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LabelError.Text = "El correo ha sido enviado con &amp;eacute;xito"&lt;br /&gt;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LabelError.Text = "Mensaje del Administrador: " &amp;amp; ex.Message&lt;br /&gt;End Try&lt;/p&gt;
&lt;p&gt;C#&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; smtp.Send(_mail);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LabelError.Text = "El correo ha sido enviado con &amp;eacute;xito";&lt;br /&gt;}&lt;br /&gt;catch(Exception ex)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LabelError.Text = "Mensaje del Administrador: " + ex.Message;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;Les agradezco su atenci&amp;oacute;n y espero contar con sus comentarios. Cualquier duda o si quieren que ampliemos el tema por favor hag&amp;aacute;noslo saber en sus comentarios o en los foros de discusi&amp;oacute;n y con mucho gusto lo haremos.&lt;/p&gt;
&lt;p&gt;Suerte!&lt;br /&gt;V&amp;iacute;ctor Alameda&lt;/p&gt;</description><pubDate>Wed, 28 Sep 2011 16:01:31 GMT</pubDate><guid isPermaLink="true">http://www.developersdotnet.com:80/blogs/enviado-correo-electronico-con-asp.net-2.0</guid></item><item><title>Encriptación de Secciones del Web.Config en ASP.NET 2.0 mediante RSA</title><link>http://www.developersdotnet.com:80/blogs/encriptacion-de-secciones-del-web.config-en-asp.net-2.0-mediante-rsa</link><description>&lt;p&gt;Siempre necesitamos proveer a nuestras soluciones un alto nivel de seguridad para evitar los posibles ataques tanto del exterior como dentro de nuestra propia empresa. Para lograr esto vamos a utilizar el proveedor de configuraci&amp;oacute;n protegida RSA y la herramienta aspnet_regiis.exe para poder lograr la encriptaci&amp;oacute;n de secciones del Web.Config.&lt;/p&gt;
&lt;p&gt;Es posible importar y exportar las claves RSA de un servidor a otro, esto nos ayudar&amp;aacute; a utilizar el mismo cifrado en varios servidores.&lt;/p&gt;
&lt;p&gt;Para encriptar la secci&amp;oacute;n connectionString del Web.Config vamos a realizar los siguientes pasos:&lt;/p&gt;
&lt;p&gt;1. Vamos a crear un sitio llamado EncriptacionRSA&lt;/p&gt;
&lt;p&gt;2. Vamos a agregar el siguiente c&amp;oacute;digo en la secci&amp;oacute;n connectionString dentro del archivo Web.Config&lt;/p&gt;
&lt;p&gt;&amp;lt;connectionStrings&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add name="MyLocalSQLServer" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connectionString="Initial Catalog=aspnetdb;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data source=localhost;Integrated Security=SSPI;" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; providerName="System.Data.SqlClient"/&amp;gt;&lt;br /&gt;&amp;lt;/connectionStrings&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;3. Ahora vamos a la l&amp;iacute;nea de comandos para ejecutar la siguiente instrucci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;%WinDir%\Microsoft.NET\Framework\&amp;lt;n&amp;uacute;meroVersi&amp;oacute;n&amp;gt;\aspnet_regiis -pe "connectionStrings" -app "/EncriptacionRSA"&lt;/p&gt;
&lt;p&gt;El comando anterior, con el modificador -app, asume que hay un directorio virtual IIS llamado MachineRSA. Si est&amp;aacute; utilizando el servidor Web de Visual Studio .NET 2005 en lugar de IIS, utilizaremos el modificador -pef, que nos permitir&amp;aacute; especificar la ubicaci&amp;oacute;n f&amp;iacute;sica del directorio del Web.Config&lt;/p&gt;
&lt;p&gt;%WinDir%\Microsoft.NET\Framework\&amp;lt;n&amp;uacute;meroVersi&amp;oacute;n&amp;gt;\aspnet_regiis.exe -pef "connectionStrings" C:\Projects\EncriptacionRSA&lt;/p&gt;
&lt;p&gt;Si el comando es ejecutado de forma correcta deberemos de obtener el siguiente resultado:&lt;/p&gt;
&lt;p&gt;Encrypting configuration section... &lt;br /&gt;Succeeded!&lt;/p&gt;
&lt;p&gt;Las claves RSA se almacenan en la siguiente ruta:&lt;/p&gt;
&lt;p&gt;\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys&lt;/p&gt;
&lt;p&gt;Una vez que ejecutamos esto, en el archivo Web.Config tendremos el siguiente resultado:&lt;/p&gt;
&lt;p&gt;&amp;lt;connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"&amp;gt; &amp;lt;EncryptedData Type="&lt;a href="http://www.w3.org/2001/04/xmlenc#Element"&gt;http://www.w3.org/2001/04/xmlenc#Element&lt;/a&gt;" xmlns="&lt;a href="http://www.w3.org/2001/04/xmlenc"&gt;http://www.w3.org/2001/04/xmlenc&lt;/a&gt;#"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;EncryptionMethod Algorithm="&lt;a href="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"&gt;http://www.w3.org/2001/04/xmlenc#tripledes-cbc&lt;/a&gt;" /&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;KeyInfo xmlns="&lt;a href="http://www.w3.org/2000/09/xmldsig"&gt;http://www.w3.org/2000/09/xmldsig&lt;/a&gt;#"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;EncryptedKey xmlns="&lt;a href="http://www.w3.org/2001/04/xmlenc"&gt;http://www.w3.org/2001/04/xmlenc&lt;/a&gt;#"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;EncryptionMethod Algorithm="&lt;a href="http://www.w3.org/2001/04/xmlenc#rsa-1_5"&gt;http://www.w3.org/2001/04/xmlenc#rsa-1_5&lt;/a&gt;" /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;KeyInfo xmlns="&lt;a href="http://www.w3.org/2000/09/xmldsig"&gt;http://www.w3.org/2000/09/xmldsig&lt;/a&gt;#"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;KeyName&amp;gt;Rsa Key&amp;lt;/KeyName&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/KeyInfo&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CipherData&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CipherValue&amp;gt;R7cyuRk+SXJoimz7wlOpJr/YLeADGnwJVcmElHbrG/B5dDTE4C9 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rzSmmTsbJ9Xcl2oDQt1qYma9L7pzQsQQYqLrkajqJ4i6ZQH1cmiot8ja7Vh+yItes7TRU &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1AoXN9T0mbX5H1Axm0O3X/285/MdXXTUlPkDMAZXmzNVeEJHSCE=&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/CipherValue&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/CipherData&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/EncryptedKey&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/KeyInfo&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CipherData&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CipherValue&amp;gt;d2++QtjcVwIkJLsye+dNJbCveORxeWiVSJIbcQQqAFofhay1wMci8FFlb &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QWttiRYFcvxrmVfNSxoZV8GjfPtppiodhOzQZ+0/QIFiU9Cifqh/T/7JyFkFSn13bTKjbYmHObKA&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zZ+Eg6gCXBxsVErzH9GRphlsz5ru1BytFYxo/lUGRvZfpLHLYWRuFyLXnxNoAGfL1mpQM7M46x5Y&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WRMsNsNEKTo/PU9/Jvnh/lT+GlcgCs2JRpyzSfKE7zSJH+TpIRtd86PwQ5HG3Pd2frYdYw0rmlml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I9D&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/CipherValue&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/CipherData&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/EncryptedData&amp;gt; &lt;br /&gt;&amp;lt;/connectionStrings&amp;gt;&lt;/p&gt;
&lt;p&gt;Ahora vamos a comprobar si el encriptaci&amp;oacute;n y desencriptaci&amp;oacute;n funciona correctamente, para esto vamos a nuestra p&amp;aacute;gina Default.aspx y vamos a agregar el siguiente c&amp;oacute;digo de la secci&amp;oacute;n HTML&lt;/p&gt;
&lt;p&gt;&amp;lt;%@ Page Language="C#" %&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script runat="server"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Page_Load(object sender, EventArgs e) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write("Clear text connection string is: " + ConfigurationManager.ConnectionStrings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ["MyLocalSQLServer"].ConnectionString); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;html&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body/&amp;gt; &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;
&lt;p&gt;MyLocalSQLServer es la cadena de conexi&amp;oacute;n que especificamos en el Web.Config&lt;/p&gt;
&lt;p&gt;Por &amp;uacute;ltimo para regresar la secci&amp;oacute;n del configurationString a su estado original vamos a ocupar el siguiente comando:&lt;/p&gt;
&lt;p&gt;%WinDir%\Microsoft.NET\Framework\&amp;lt;n&amp;uacute;meroVersi&amp;oacute;n&amp;gt;\aspnet_regiis -pd "connectionStrings" -app "/EncriptacionRSA"&lt;/p&gt;
&lt;p&gt;y para si ocupamos una ruta f&amp;iacute;sica ocupamos el siguiente comando:&lt;/p&gt;
&lt;p&gt;%WinDir%\Microsoft.NET\Framework\&amp;lt;n&amp;uacute;meroVersi&amp;oacute;n&amp;gt;\aspnet_regiis -pdf "connectionStrings" C:\Projects\EncriptacionRSA&lt;/p&gt;
&lt;p&gt;Si el comando funciona correctamente obtendremos el siguiente resultado:&lt;/p&gt;
&lt;p&gt;Decrypting configuration section... &lt;br /&gt;Succeeded!&lt;/p&gt;
&lt;p&gt;Espero que esto les ayude en sus aplicaciones y no olviden de colocar sus comentarios, si les parece bien todo esto, y recuerden postear en los foros, esta comunidad es para ustedes y s&amp;oacute;lo con la participaci&amp;oacute;n de todos haremos que sea la m&amp;aacute;s grande de toda Am&amp;eacute;rica Latina.&lt;/p&gt;
&lt;p&gt;Saludos!&lt;br /&gt;V&amp;iacute;ctor Alameda&lt;/p&gt;</description><pubDate>Wed, 28 Sep 2011 14:16:20 GMT</pubDate><guid isPermaLink="true">http://www.developersdotnet.com:80/blogs/encriptacion-de-secciones-del-web.config-en-asp.net-2.0-mediante-rsa</guid></item></channel></rss>
