Presentación de la charla sobre computación paralela

🙂
Hola de nuevo,

En esta ocasión quiero compartir con vosotros una presentación sobre computación paralela que he realizado algunas veces este año, y que -al menos- todavía realizaré un par de veces más antes de finalizar el mismo. De hecho, si vais a estar en Barcelona el próximo 19 de Noviembre, los chicos de BcnDev y un servidor estamos organizando un evento en el que trataremos varios temas interesantes: IE9, Behaviour Driven Development, Entity Framework ‘a fondo’, Windows Phone 7, y como no… Paralelismo!

Os dejo la presentación publicada en SlideShare, como viene siendo habitual es jabugoware… De modo que podéis usarla libremente citando la fuente o mandando un jamón al apartado de correos: DALE_CAÑA_AL_JAMON_582 de Andorra la vella 🙂

Happy coding!

How to: Obtener controles de un formulario con generics

Nota: Es una pregunta recurrente en los foros de MSDN y como he tenido que contestarla en varias ocasiones, me he decidido a hacer este post para en futuras preguntas, poder referenciarlo como respuesta en lugar de contestar una y otra vez (no es que cueste demasiado pero con la edad uno se vuelve más vago :-P).

Pregunta: Cómo recorrer todos los TextBox de un formulario (incluidos los contenedores de controles) y vaciar su contenido.

Respuesta: Mediante el uso de generics, esto es tan sencillo como crear un método extensor de la clase Control, que devuelva una colección de los controles de un tipo determinado. Posteriormente, usamos esta colección para realizar alguna acción sobre cada uno de los elementos devueltos.

Método extensor:

   1: public static List<T> GetControls<T>(this Control container) where T : Control

   2: {

   3:   List<T> controls = new List<T>();

   4:   foreach (Control c in container.Controls)

   5:   {

   6:     if (c is T)

   7:       controls.Add((T)c);

   8:     controls.AddRange(GetControls<T>(c));

   9:   }

  10:   return controls;

  11: }

Básicamente recorre la colección de controles del tipo suministrado en tiempo de compilación, llamándose además recursivamente para cada control contenedor que contiene.

Cómo se usa:

   1: this.GetControls<TextBox>().ForEach(p => p.Text = string.Empty);

Se llama al método extensor para el formulario (si, un formulario hereda de ContainerControl, que a su vez hereda de ScrollableControl, y éste de Control). Dicho de otro modo, un objeto Form va a implementar también el método GetControls. En tiempo de compilación se especifica el tipo de la colección de objetos a buscar y retornar (*), y posteriormente se aplica una acción sobre cada uno de los elementos devueltos mediante el método ForEach.

(*) Evidentemente si deseamos devolver todos los botones del formulario basta sustituir TextBox por Button en el ejemplo anterior.

Por otro lado, si deseamos devolver sólo los controles contenidos dentro de un contenedor específico, por ejemplo un GroupBox, Panel o TabControl, basta con llamar al método extensor para el ese control determinado:

   1: this.GroupBox1.GetControls<TextBox>().ForEach(p => p.Text = "hola");

   2: this.Panel1.GetControls<TextBox>().ForEach(p => p.Text = string.Empty);

Para terminar, en el caso anterior sólo vaciamos el contenido del control, es decir realizamos una sola acción sobre el control. En el caso que deseemos realizar varias acciones para un control, basta con llamar a un método que reciba un parámetro del tipo deseado y realice las acciones oportunas:

   1: this.GetControls<TextBox>().ForEach(p => ApplyFormat(p));

   2:  

   3: private void ApplyFormat(TextBox text)

   4: {

   5:     text.BackColor = Color.LightGray;

   6:     text.ForeColor = Color.Red;

   7:     text.Text = "hello";

   8:     text.TextAlign = HorizontalAlignment.Center;

   9: }

O bien, utilizar un ‘Action Delegate’ para tener el código ‘inline’, ambas opciones son equivalentes.

   1: this.GetControls<TextBox>().ForEach(p => {

   2:                 p.BackColor = Color.LightGray;

   3:                 p.ForeColor = Color.Red;

   4:                 p.Text = "hello";

   5:                 p.TextAlign = HorizontalAlignment.Center;

   6:             });

Saludos y nos leemos!

MVP por octavo año! Gracias a todos :-)

En mitad de la vorágine del TTT 2010 (ya sabéis, un evento de geeks, nerds y frikis pero que en realidad es una tapadera, y todo se reduce a cerveza, sexo y Rock & Roll) tuve lo que los alcohólicos llaman un momento de lucidez. De modo que apuré el vaso, despedí a las chicas y a la banda de rock, y me puse a consultar el correo de un modo febril, a ver si encontraba un mensaje en especial… Y es que cada 1 de Octubre de los últimos 8 años he recibido un mail que no estoy muy seguro de merecer, pero por si acaso… ¡yo no digo nada! 😀

mvplogohor

Se trata de la notificación de bienvenida al programa MVP de Microsoft:

Enhorabuena. Nos complace presentarle el programa de nombramiento MVP de Microsoft® de 2010. Este nombramiento se concede a los líderes excepcionales de la comunidad técnica que comparten de forma activa su experiencia de alta calidad y de la vida real con otras personas…

El hecho de recibir esta notificación me produce una tremenda alegría, no sólo por el reconocimiento que conlleva (y que como os decía antes, no estoy muy seguro de merecer), sino porque me permite estar en contacto con un grupo de una tremenda calidad, tanto técnica como humana. Sin duda alguna, esto es lo mejor del programa MVP.

Aquí tenéis algunos momentos de estos años:

DCP_1608DCP_1652DCP_1629

P1010037P1010059P1010029

fb1fb2fb3

 

fb6fb4fb5

 

Son simplemente algunos momentos escogidos al azar entre tantos buenos momentos. Encontraréis a algunos de los que ya no están, y también veréis a algunos que casi no se reconocen, jejeje… A ver que día me pongo a revisar más a fondo los cientos de archivos de fotos que tengo (sobretodo de los primeros años), seguro que aparecen auténticas ‘perlas’:-)

Un abrazo enorme a todos, los que son MVP, los que no, y en general a todos aquellos que dedican su tiempo a hacer más grande la comunidad. Todos son MVP, tengan o no tengan la distinción. Chavales, entre todos estamos contribuyendo a hacer algo grande.

Nos vemos en las comunidades y eventos por esos mundos de Yupi! 😛

Lluís Franco, Octubre 2010

** crossposting desde el blog de Lluís Franco en geeks.ms **

Materiales de la charla: Parallel computing @ BcnDev

13Antes de nada: Lo se, soy un desastre. Hace ya más dos semanas del evento que realizamos en BcnDev, y debería haberlos subido hace unos cuantos días… pero he estado unos días de vacaciones (totalmente offline), y la vuelta ha sido demasiado traumática para pensar en cosas como esta 🙂

Es lo que suele suceder cuando no te acercas a menos de 10 metros de un ordenador durante más de dos semanas (por orden judicial). Luego a la vuelta todo resulta un poco más difícil y acabas preguntándote si realmente quieres hacer esto el resto de tu vida 😛

En fin, os dejo por un lado la PPT de la charla y por otro el proyecto Web que ejecutaba las demos desde un WebRole en AZURE. Lógicamente el proyecto ya no está publicado en AZURE, más que nada porque estaba configurado para usar 8 cores y eso cuesta una pasta gansa al mes. Sin embargo, lo podeis instalar en vuestro entorno de desarrollo VS2010 para “cacharrear” un poco. Eso si, quiero recordaros que para poder experimentar paralelismo real deberá existir más de un core, y las máquinas virtuales acostumbran a tener sólo uno.

 

PPT:

http://cid-f3a970280830b5fe.office.live.com/view.aspx/AndorraDotNet/Events/BcnDev-Parallel/News40-ParallelComputing.pptx

Código fuente proyecto web:

http://cid-f3a970280830b5fe.office.live.com/self.aspx/AndorraDotNet/Events/BcnDev-Parallel/DemoParallelWeb.zip

Es bastante posible que el evento se repita en el mes de Octubre, así que manteneros a la escucha en Facebook o Twitter.

Nos vemos!

** crossposting desde el blog de Lluís Franco en geeks.ms **

Evento BcnDev Reloaded – Jueves 22 de Julio

El próximo jueves tenemos otro evento en Barcelona. Espero veros allí 🙂

 

jueves, 22 de julio

AGENDA             

09:00 – Registro
09:30 –  Introducción.
10:00 – Novedades Visual Studio 2010 y .net 4.0
11:00 – Parallel Computing with .NET 4.0.
12:00 – Entity Framework 4.0.
13:00 – Novedades ASP.NET 4.0 y JQuery con Visual Studio 2010.
14:00 – Sorteo de licencias, productos y otras sorpresas.

Ponentes

Para este evento podremos disfrutar de ponentes de amplia experiencia.

  • Benjami Adell
  • Luis Franco
  • Pep Lluis Baño
  • Marc Rubiño

Registro

https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032455485&Culture=es-ES

** crossposting desde el blog de Lluís Franco en geeks.ms **

Creando aplicaciones para Windows Phone 7 usando Silverlight

Ya empiezan a verse los primeros ejemplos interesantes de desarrollo para Windows Phone 7.

En el blog de ScottGu, podéis encontrar dos pequeños ejemplos que utilizó en su charla del MIX10 (vídeo aquí). El primero es un sencillo Hello world, y el segundo utiliza LINQ to XML y el APi de Twitter para mostrar todas los tweets de un tag determinado (en el ejemplo scottgu).

Darle un vistazo porque vale la pena, y además, más sencillo imposible! 🙂

Artículo original en:

http://weblogs.asp.net/scottgu/archive/2010/03/18/building-a-windows-phone-7-twitter-application-using-silverlight.aspx

image

Saludos! 🙂

** crossposting desde el blog de Lluís Franco en geeks.ms **

Silverlight 4.0 RC disponible

Silverlight340x98

Al fin! Después de unas semanas de incertidumbre, por fin se ha desvelado que Silverlight 4.0 verá la luz el próximo mes. Suerte de aquellos que puedan asistir al ASP.NET and Silverlight Conference en las Vegas, del 12 al 14 de Abril, porque además podrán ver el lanzamiento de VS2010 a nivel mundial.

De momento y para hacer boca (y poder desarrollar con la Release Candidate sobre VS2010 :-P), os dejo el enlace y algo e información (en inglés) para que os podáis descargar las herramientas necesarias:

  • Silverlight 4 Tools for Visual Studio 2010
    This will install the developer runtime of Silverlight 4, the Visual Studio project support and the Silverlight 4 SDK. If you are developing Silverlight 4 applications, this will be the minimum you want to install!
  • Windows Runtime or Mac Runtime
    If you installed the tools above, you will get the developer runtime and there is no need to install again. These downloads are being made available for test machines for the Windows and Mac platforms for your applications.
  • Expression Blend 4 Beta
    This is a beta version of Expression Blend that will enable authoring of Silverlight 4 applications.
  • Silverlight Toolkit
    The toolkit has been updated to provide support for Visual Studio 2010 and Silverlight 4 development. The Toolkit provides numerous controls for your application and source code is also included for these controls using an Open Source license.
  • WCF RIA Services
    Microsoft WCF RIA Services simplifies the traditional n-tier application pattern by bringing together the ASP.NET and Silverlight platforms. The RIA Services provides a pattern to write application logic that runs on the mid-tier and controls access to data for queries, changes and custom operations. It also provides end-to-end support for common tasks such as data validation, authentication and roles by integrating with Silverlight components on the client and ASP.NET on the mid-tier.

Más información en:

http://silverlight.net/getstarted/silverlight-4/

Saludos,

** crossposting desde el blog de Lluís Franco en geeks.ms **

Usando ASP.NET membrership en Winforms (3 / n)

El modelo de objetos de membresía (Membership object model)

Membershipom

O lo que es lo mismo, el pan nuestro de cada día en lo relativo a administrar la seguridad basada en membresía. Para acceder a este cojunto de clases es necesario agregar los namespaces System.Web y System.Web.Extensions, que contienen las clases necesarias para interactuar con la base de datos de membresía descrita en el artículo anterior.

References

Conocer este conjunto de clases es vital para poder aprovechar todas las características de este sistema, de modo que aquí va una tabla con las principales elementos y funcionalidades:

Clase/interfaz

Funciones

Membership

Proporciona los servicios de suscripción generales.

Crea un nuevo usuario.

Elimina un usuario.

Actualiza un usuario con nueva información.

Devuelve una lista de usuarios.

Encuentra un usuario por el nombre o el correo electrónico.

Valida (autentica) un usuario.

Obtiene el número de usuarios conectados.

Busca los usuarios por el nombre de usuario o la dirección de correo electrónico.

MembershipUser

Proporciona información sobre un usuario concreto.

Obtiene la contraseña y la pregunta de la contraseña.

Cambia la contraseña.

Determina si el usuario está conectado.

Determina si el usuario está validado.

Devuelve la fecha de la última actividad, del último inicio de sesión y del último cambio de contraseña.

Desbloquea un usuario.

MembershipProvider

Define la funcionalidad de los proveedores de datos que el sistema de suscripción puede utilizar.

Define los métodos y las propiedades que necesita implementar un proveedor utilizado en la suscripción.

MembershipProviderCollection

Devuelve una colección de todos los proveedores disponibles.

MembershipUserCollection

Almacena las referencias a los objetos MembershipUser.

MembershipCreateStatus

Proporciona los valores descriptivos de éxito o error al crear un nuevo usuario suscrito.

MembershipCreateUserException

Define la excepción que se produce si no se puede crear un usuario. Hay un valor de enumeración MembershipCreateStatus disponible a través de la propiedad StatusCode que describe el motivo de la excepción.

MembershipPasswordFormat

Especifica los posibles formatos de almacenamiento de contraseñas utilizados por los proveedores de suscripciones incluidos con ASP.NET (Clear, Hashed, Encrypted).

Configurando nuestra aplicación

Nota: Esto pensaba dejarlo para más adelante, pero lo posteo aquí también por si alguien quiere animarse a hacer pruebas 😉

Para poder acceder al modelo de objetos, además de agregar las dos referencias que hemos comentado antes, también es necesario modificar el fichero de configuración de la aplicación (Web.config en un proyecto Web y App.config en un proyecto WinForms). Existen multitud de artículos que describen cómo hacerlo en el primero de los casos, así que nos vamos a centrar en el segundo.

Empezaremos con la configuración mínima para que funcione nuestra aplicación, y posteriormente iremos viendo distintas opciones para permitir que el sistema de seguridad se comporte de un modo distinto, por ejemplo, pidiendo una contraseña no tan restrictiva, o que no sea necesario indicar el email del usuario, o la pregunta y respuesta de seguridad.

El primer paso para configurar nuestra aplicación es agregar un fichero de configuración (App.config) a nuestro proyeco, o si ya tenemos uno, abrirlo para su edición. Toda la configuración se va a centrar en dos secciones: <connectionStrings> y <system.web>. En la primera es especificará una entrada que apunte a la base de datos de membresía, mientras que en la segunda se especificarán los valores para los proveedores de usuarios y roles:

<configuration>
  <connectionStrings>
    <add name="MemberShipConnectionString"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=True;DataBase=Test"
         providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <roleManager enabled="true">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider"
             type="System.Web.Security.SqlRoleProvider"
             connectionStringName="MemberShipConnectionString"
             applicationName="Test"/>
      </providers>
    </roleManager>
    <membership defaultProvider="SqlProvider">
      <providers>
        <clear/>
        <add name="SqlProvider" 
             type="System.Web.Security.SqlMembershipProvider"
             connectionStringName="MemberShipConnectionString"
             applicationName="Test"/>
      </providers>
    </membership>
  </system.web>
</configuration>

Oservemos que la cadena de configuración apunta a la BD que creamos en el post anterior, y que esta cadena de conexión se usa en la configuración de los proveedores de usuarios y roles. Otro detalle muy importante es que la clave applicationName contiene el nombre de nuestra aplicación para el sistema de membresía, de modo que todos los usuarios y roles que se creen estarán agrupados bajo este nombre de aplicación.

Por defecto, esta configuración hace que al momento de crear un usuario sea necesario proporcionar: Nombre, contraseña de un mínimo de 7 carácteres y uno de ellos ‘especial’ (por ejemplo: @#$%), email, pregunta de seguridad, respuesta de seguridad, y si va a estar aprobado o no. No está nada mal, de hecho podríamos decir que la configuración predeterminada es a su vez, la más segura.

Si deseamos cambiar esta configuración, par permitir que un usuario no pueda preguntarle al sistema cuál es su contraseña (sólo pueda resetearla), o por ejemplo para ‘relajar’ un poco la seguridad (que quede claro que esto no lo recomiendo en absoluto, y que es simplemente un ejercicio didáctico) podemos agregar atributos al fichero de configuración:

<membership defaultProvider="SqlProvider">
  <providers>
    <clear/>
    <add name="SqlProvider" 
         type="System.Web.Security.SqlMembershipProvider"
         connectionStringName="MemberShipConnectionString"
         applicationName="Test"
         enablePasswordRetrieval="false" 
         enablePasswordReset="true" 
         requiresQuestionAndAnswer="false" 
         requiresUniqueEmail="false" 
         passwordFormat="Hashed"/>
  </providers>
</membership>

Tenéis una lista completa de los atributos en las propiedades de la clase SqlMemberShipProvider.

Y ahora, un poco de ‘chicha’ en forma de código:

Ejemplos a cholón:

Crear un usuario:

MembershipUser user = Membership.CreateUser("admin", "$admin123");

Más sencillo imposible, verdad? Ahora bien, hay que tener presente que este código fallará con la configuración predeterminada, ya que debe suministrarse email, y la pregunta y respuesta de seguridad. En su lugar debería usarse este código:

MembershipCreateStatus status;
MembershipUser user = Membership.CreateUser(
    "admin", "$admin123", "admin@test.com",
    "pregunta de seguridad?", "respuesta de seguridad", 
    true, out status);
if (status == MembershipCreateStatus.Success)
{
    MessageBox.Show("Usuario creado correctamente!");
}

Bueno, tampoco no es demasiado complicado. La única diferencia es que se proporcionan más argumentos y que devuelve un objeto que define el estado de la creación del usuario, para saber si se ha creado con éxito.

Eliminar un usuario:

Membership.DeleteUser("admin");

Casi demasiado facil 😛

Obtener un usuario:

MembershipUser user = Membership.GetUser("admin");

A partir de este usuario recuperado podemos efectuar cualquier operación soportada.

Obtener todos los usuarios:

MembershipUserCollection users = Membership.GetAllUsers();
foreach (MembershipUser user in users)
{
    Console.WriteLine(user.UserName);
}

Obtenemos una colecció e iteramos por ella para mostrar los nombres.

Validar un usuario:

if (Membership.ValidateUser("admin", "$admin123"))
{
    MessageBox.Show("usuario correcto!");
}
else
{
    MessageBox.Show("usuario o contraseña incorrecto!");
}

Ideal para formularios de inicio de sesión. Tened cidado, que si se introduce mal 3 veces se bloquea el usuario.

Obtiene el número de usuarios conectados:

int num = Membership.GetNumberOfUsersOnline();

Sin comentarios.

Busca usuarios por el nombre de usuario o la dirección de correo electrónico:

MembershipUserCollection users = Membership.FindUsersByName("pepe");
MembershipUserCollection users = Membership.FindUsersByEmail("pepe@test.com");

Del mismo modo que GetAllUsers devuelve una colección de usuarios.

Obtiene la contraseña de un usuario:

MembershipUser user = Membership.GetUser("admin");
string pwd = user.GetPassword();
string pwd = user.GetPassword("respuesta de seguridad");

Tiene dos sobrecargas, en la segunda debe especificarse la respuesta de seguridad.

Sólo es válido si se ha especificado el atributo EnablePasswordRetrieval.

Cambia la contraseña de un usuario:

MembershipUser user = Membership.GetUser("admin");
user.ChangePassword("$admin123", "@nuevapassword2010");

Resetea la contraseña de un usuario:

MembershipUser user = Membership.GetUser("admin");
string pwd = user.ResetPassword();
string pwd = user.ResetPassword("respuesta de seguridad");

Tiene dos sobrecargas, en la segunda debe especificarse la respuesta de seguridad.

Sólo es válido si se ha especificado el atributo EnablePasswordReset.

Desbloquea un usuario:

MembershipUser user = Membership.GetUser("admin");
bool success = user.UnlockUser();

Particularmente útil cuando tenemos un usuario bloqueado, ya sea por un intento de intrusión, como por la típica amnesia matutina.

Y esto es todo por hoy, la semana que viene más 🙂

Espero que esto anime a más de uno a usar este sistema de gestión de usuarios, ya veis que no es nada complicado.

Saludos a 0º (hoy ni frío ni calor),

Nota: Es la primera vez que escribo en el blog todos los días de una semana, así que esto hay que celebrarlo con un cafelito. Hasta luego! 🙂


Artículos anteriores de la serie:

Usando ASP.NET membrership en Winforms (1 / n)

Usando ASP.NET membrership en Winforms (2 / n)

** crossposting desde el blog de Lluís Franco en geeks.ms **

Usando ASP.NET membrership en Winforms (2 / n)

Creando la base de datos de membresía

La base de datos de membrsía es el lugar en el que se van a almacenar los datos de los usuarios de nuestras aplicaciones. Si, de nuestras aplicaciones en plural, porque este sistema está preparado para gestionar datos de tantas aplicaciones como sea necesario. De modo que el primer paso va a ser crear esta base de datos en un servidor SQL Server. Por cierto, cualquier edición vale, desde la Express hasta la Professional.

Lo primero que vamos a hacer es ejecutar el comando aspnet_regsql desde la línea de comandos de Visual Studio, para iniciar el asistente que nos guiará en la creación de nuestra base de datos de membresía:

aspnet_regsql

Una vez iniciado, el aisitente pregunta si vamos a crear la base de datos o a eliminar la información de membresía de una base de datos ya existente. Una vez elegimos la primera opción nos pedirá el nombre del servidor de SQL y de la base de datos. En caso que no exista la base de datos se creará una. En nuestro caso elegiremos la instancia de SQL Server express local y (en un derroche de imaginación) llamaremos a nuestra base de datos ‘Test’:

createdbwizard1

Examinando la base de datos creada

testdb Una vez creada, nos conectaremos a la base de datos para examinar que objetos se ha creado. Lo primero que llama la atención es que hay una serie de tablas, vistas y procedimientos almacenados cuyo nombre empieza por el prefijo ‘aspnet_’, y yo me pregunto ¿no hubiese sido mucho más elegante utilizar un Schema en lugar de esta nomenclatura? Bueno, supongo que si se ha usado esta nomenclatura será por compatibilidad con SQL Server 2000, ya que los esquemas no aparecieron hasta la versión 2005.

La estructura de esta base de datos no es importante para nosotros, ya que en ningún caso vamos a acceder directamente a la base de datos. Todos nuestro trabajo se realizará a través del modelo de objetos de membresía desde nuestra aplicación .NET. De todos modos demos un vistazo a las tablas más interesantes:

aspnet_Applications: Es la tabla en la que se almacenan los datos de las distintas aplicaciones que van a usar esta base de datos. Sólo guarda el nombre y un identificador GUID para usarlo como clave en las tablas de usuarios, roles, etc.

aspnet_MemberShip: Guarda los datos de los usuarios del sistema de Membresía de forma conjunta con otra tabla llamada aspnet_Users. Así, los datos de cada usuario del sistema quedan divididos entre estas dos tablas, guardando la primera los datos relativos a la seguridad (contraseña, tipo de almacenamiento de la contraseña, pregunta y respuesta de seguridad) y en la segunda los datos propios del usuario (nombre, fecha de la última actividad).

aspnet_Roles: Almacena los datos relativos a los grupos de usuarios. Los grupos son usados para establecer los permisos de uno o varios usuarios. Posteriormente desde nuestra aplicación preguntaremos si un usuario pertenece a uno u otro rol para permitir o revocar permiso sobre ciertas acciones.

aspnet_UsersInRoles: Como su nombre indica mantiene una relación de los usuarios que pertenecen a cada uno de los roles. De este modo podremos saber qué usuarios pertenecen a qué roles.

Existen otras características que pasaremos por alto porque dan para otros artículos, como por ejemplo la posibilidad de almacenar datos para distintos usuarios  sin tener que almacenarlos en otra tabla de otra base de datos.

Nota: Hay un detalle curioso que refuerza la posibilidad de la compatibilidad con versiones anteriores, y es la auséncia de funciones de usuario en la base de datos. Resulta curioso como muchas de las características de los procedimientos almacenados se podrían haber implementado como funciones.

Accediendo a la base de datos desde .NET

En el siguiente post veremos el modelo de objetos de membresía, este modelo está disponible para acceder y manipular este repositorio desde nuestras aplicaciones .NET, y que se encuentra en los namespaces System.Web y System.Web.Extensions (aunque como decíamos podemos usarlo desde cualquier tipo de aplicación).

Saludos,


Artículos anteriores de la serie:

Usando ASP.NET membrership en Winforms (1 / n)

 


 

Actualización (artículos siguientes):

Usando ASP.NET membrership en Winforms (3 / n)

** crossposting desde el blog de Lluís Franco en geeks.ms **

Usando ASP.NET membrership en Winforms (1 / n)

membership

Sistemas de autenticación de usuarios

Una de las preguntas más habituales en los foros de desarrollo tiene relación con los sistemas de autenticación de usuarios. Normal ¿qué aplicación de hoy en día no necesita de un sistema que gestione los usuarios, roles y permisos de la aplicación?

Para ello existen varias alternativas pensadas para diferentes tipos de aplicaciones: Por ejemplo, si sabemos que nuestra aplicación va a ejecutarse en un entorno corporativo, ¿qué mejor que usar el directorio activo de la empresa para gestionar lo relativo a la seguridad? Por otro lado, si no estamos seguros si va a existir un directorio activo, lo mejor va a ser usar nuestra propia base de datos de gestión de usuarios.

En este punto es dónde veo más lagunas y en el que se va a centrar esta serie de posts.

Antes de nada, que es mejor? Usar un sistema existente o crear nuestro propio sistema de gestión de usuarios? Hablaremos de esto más adelante 🙂

ASP.NET Membership

Existe un sistema de seguridad basado en proveedores de autenticación llamado ASP.NET Membership, que apareció con ASP.NET 2.0, y que originariamente estaba pensado para su uso en proyectos Web. Este sistema permite gestionar los usuario y roles de nuestras aplicaciones, y expone un completo modelo de objetos para usar en nuestras aplicaciones y simplificar la creación de usuarios, roles, validaciones, y todas aquellas tareas típicas de una gestión de usuarios.

Lo mejor de este sistema es que está basado en proveedores y que es extensible. Dicho de otro modo, podemos usar una base de datos de SQL para validar los usuarios, pero también admite otros proveedores de validación, como un directorio activo o de otros fabricantes como Oracle. Además, el hecho de que sea extensible hace que incluso nosotros podamos escribir nuestro propio proveedor de autenticación.

Escenarios

Lo habitual es usar este sistema en aplicaciones Web, ya que no suele ser habitual que los usuarios de un sitio Web utilicen autenticación contra un directorio activo. Por otro lado, desde hace unos años, cada vez oigo lo útil que sería disponer de este modelo para aplicaciones cliente, ya sean WinForms o WCF. Bien, en esta serie nos centraremos en esto: Usar ASP.NET membership en aplicaciones cliente para disponer de un sistema de gestión de usuarios ‘prefabricado’.

Existen dos posibles escenarios: En el primero estamos desarrollando una única aplicación cliente y queremos usar este sistema. En la segunda, estamos creando varias aplicaciones (WinForms, WPF, e incluso Web) y nos gustaría montar un único sistema centralizado basado en servicios, que serán usados por las distintas aplicaciones. Esto es posible desde el Framework 3.5 SP1 y se llama ‘Client applicaction Services’.

Al lío

En los próximos posts vamos a ver cómo:

  • Crear la base de datos de membresía.
  • Escenario 1: Crear una aplicación WinForms que utilice el sistema de membresía.
  • Escenario 2: Crear una solución de ejemplo para ver el uso de ‘Client applicaction Services’.
  • Desmitificando: Discutir acerca de si es mejor un sistema estándar o crear nuestro propio sistema.
  • Y alguna cosilla más que se nos ocurrirá… ðŸ™‚

En los próximos días (si hay suerte uno por día, y si no uno por mes :-P) iré publicando los siguientes posts de la serie.

Nos leemos pronto!


Actualización (artículos siguientes):

Usando ASP.NET membrership en Winforms (2 / n)

Usando ASP.NET membrership en Winforms (3 / n)

** crossposting desde el blog de Lluís Franco en geeks.ms **