- Discriminar acciones según el nombre de los parámetros, por Pablo
Fecha: 09/09/2011 - OpenRa: clon open source del clásico Command&Conquer escrito en C#.
Fecha: 08/09/2011 - MonoDevelop 2.6 is out, by Miguel de Icaza.
Fecha: 08/09/2011 - Serie "Javascript OMGs!", by Mike Taulty.
Fecha: 08/09/2011 - How to write a small game using HTML5 and Javascript
Fecha: 08/09/2011 - Extending the ASP.NET error page (show me the SQL edition), vía Pablo Iglesias.
Fecha: 08/09/2011 - Creating Multiple Javascript Objects when using the Revealing Module Pattern, by Dan Wahlin.
Fecha: 08/09/2011 - Best Tools for Professional Javascript Development, by Joe Stagner
Fecha: 08/09/2011 - Entity Framework Code First Migrations Alpha 2 released.
Fecha: 07/09/2011 - TinyMCE HTML Text Editior & ASP.NET MVC - Setting It Up Has Become Easy With Nuget
Fecha: 07/09/2011 - NerdDinner 3.0 released with ASP.NET MVC 3.0, Razor, HTML5, jQuery Mobile, etc...
Fecha: 07/09/2011 - Adding Export Capabilities to the Razor WebGrid, by Mike Ceranski
Fecha: 06/09/2011 - SQL Server Compact Toolbox for Visual Studio 2010 now available, vía José Miguel Torres Fecha: 06/09/2011
- Model Binding: Obteniendo datos, por Luis Ruiz Pavón
Fecha: 06/09/2011 - ASP.NET vNext Series - Model Binding SelectMethods
Fecha: 06/09/2011 - ASP.NET MVC Mobile ViewEngines available on NuGet
Fecha: 05/09/2011 - Synchronisation in Parallel Loops.
Fecha: 05/09/2011 - Gestionando la memoria Cache en ASP.NET MVC, por Sebis.
Fecha: 05/09/2011 - CSS Tricks and the Alternate Universe of Graphics Primitives, by K. Scott Allen.
Fecha: 05/09/2011 - Using Lucene.NET search engine library in .NET applications.
Fecha: 05/09/2011 - Recibir resultados de una página en otra: Transferencias y Cross-page posting, por José Manuel Alarcón.
Fecha: 05/09/2011 - How to Navigate the HTML5 Video Maze.
Fecha: 05/09/2011 - Offline web applications: a working example.
Fecha: 05/09/2011 - Interesante comparación de herramientas de logging, vía Jorge Serrano.
Fecha: 05/09/2011
Publicado en: Variable not found
Publicado por José M. Aguilar a las 10:00 a. m.
Etiquetas: enlaces
En este post vamos a ver un ejemplo ómo podemos utilizar este nuevo componente para montar en pocos segundos el sistema de membresía, roles y perfiles de una aplicación web utilizando SQL Compact Edition, algo que por otra parte no es una idea nada descabellada para sitios de pequeño calibre. Recordad que esta edición de SQL Server no requiere un servicio funcionando en el servidor (se ejecuta en el mismo proceso que la aplicación web), por lo que puede resultar muy apropiada para su uso en pequeños sitios donde no se justifica la implantación de sus hermanas mayores (express o superiores).
1. Instalamos el tooling en Visual Studio 2010 SP1
Lo primero que vamos a hacer es instalar las herramientas de SQL Compact Edition para el Visual Studio. Éstas las podéis descargar desde este enlace, aunque antes debéis aseguraros de tener instalado el Service Pack 1 de Visual Studio.Esto no es estrictamente necesario si no pensamos crear o acceder a la base de datos desde Visual Studio, aunque en cualquier caso es recomendable para poder echar un vistazo a la estructura y datos más adelante.
2. Creamos una aplicación web
Creamos ahora una aplicación Web desde Visual Studio. No importa si es ASP.NET MVC o WebForms: en la pila de tecnologías estamos un nivel por abajo, directamente jugando con características de ASP.NET, que, como sabéis, son comunes a ambos frameworks.3. Descargamos de Nuget los componentes que necesitamos
- el proveedor de datos SQL CE, que nos permitirá conectarnos a esta base de datos y acceder a su información ya sea utilizando directamente las clases de ADO.NET como Entity Framework,
- el paquete de Proveedores Universales para ASP.NET, que creará la abstracción sobre el origen de datos concreto y nos permitirá trabajar virtualmente con cualquier motor relacional (aunque, como comentaba en el post anterior, por las pruebas que he hecho de momento no sea así).
PM> Install-Package System.Web.Providers [...] Successfully installed 'System.Web.Providers 1.0.1'. PM> Install-Package SqlServerCompact [...] Successfully installed 'SqlServerCompact 4.0.8482.1'.
Si en cambio sois más de utilizar el GUI, podéis buscar en la galería los paquetes “ASP.NET Universal Providers” y “SqlServerCompact”:
4. Modificamos la cadena de conexión
El proceso de instalación del paquete de proveedores habrá modificado nuestro web.config, dejándolo listo para su utilización con SQL Express. Como no es esto lo que queremos, acudimos a este archivo y modificamos la cadena de conexión usada por los proveedores:<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|\Datos.sdf;" providerName="System.Data.SqlServerCe.4.0" /> </connectionStrings>
Observad que estamos indicando que el proveedor de datos es SqlServerCe (lo hemos descargado previamente usando Nuget), y que la base de datos se llamará datos.sdf y estará ubicada en la carpeta App_Data del proyecto.
De forma opcional, podemos aprovechar el momento para limpiar un poco el web.config, eliminando líneas que vienen en la plantilla de proyectos por defecto, pero que ya no vamos a necesitar.
5. ¡Y esto es todo!
Pues sí, eso es todo lo que necesitamos hacer. En este momento ya tenemos configurados los proveedores de membresía, roles y perfiles. De hecho, dado que las plantillas de proyecto tanto para MVC como para Webforms ya incluyen un sistema de autenticación y registro básico, podemos directamente ejecutarla y utilizar sus funcionalidades para registrarnos y autenticarnos en el sistema:Eso sí, para comenzar a definir roles y asignarlos a usuarios es necesario activar previamente el proveedor de roles (
DefaultRoleProvider
), ya sea desde la herramienta de administración, bien añadiendo en el nodo <RoleProvider>
del web.config el atributo enabled="true"
.De la misma forma, podemos activar la persistencia del estado de sesión sobre la misma base de datos estableciendo el atributo
mode="Custom"
en el nodo <sessionState>
(por defecto está configurado como "InProc"
).En cualquier caso, una vez accedamos a alguno de estos proveedores, podremos observar que se ha creado de forma automática la base de datos llamada Datos.sdf en la carpeta App_Data. Por supuesto, también podríamos haber indicado el nombre de un base de datos existente (creada por ejemplo desde el mismo VS) y el sistema habría creado únicamente las tablas e índices usados por los proveedores sin afectar al resto de objetos.
Recapitulando: si ya tenemos el tooling y el proveedor de datos para SQLCE en un proyecto, lo único que tenemos que hacer es, en primer lugar, descargar a través de Nuget el paquete de Proveedores Universales de ASP.NET, y a continuación ajustar la cadena de conexión en el web.config. Más sencillo, imposible.
He dejado en Skydrive una solución de ejemplo con un proyecto Webforms y otro MVC para que podáis probarlo de forma sencilla. En la base de datos hay un usuario creado (jmaguilar con clave jmaguilar, aunque podéis registraros desde las propias aplicaciones); para que podáis ver cómo se comporta el sistema de autenticación y membresía, no se permite el acceso a las páginas “Acerca de” a usuarios no identificados previamente.
Publicado en: Variable not found.
Lo interesante que tiene el ensamblado
System.Web.Providers
, que así es como se distribuye el componente, es que podemos modificar el motor de persistencia sobre el que trabajan simplemente tocando la cadena de conexión en el web.config, evitándonos el tener que crear proveedores en cuanto nos salíamos de los provistos por defecto en la plataforma (SQL Server). O en otras palabras, tenemos aquí un proveedor para gobernarlos a todos ;-) Como no podría ser de otra forma, la distribución del paquete de proveedores se realiza a través de Nuget, por lo que su instalación y puesta en marcha es sencillísima.
Una vez descargado e instalado el paquete “ASP.NET Universal Providers”, además de añadirse el ensamblado
System.Web.Providers
y sus correspondientes referencias al proyecto, veremos que en el web.config se ha incluido una cadena de conexión, llamada “DefaultConnection
”, que es la que será utilizada por estos nuevos proveedores. Por defecto podremos comprobar que esta conexión está configurada para trabajar sobre una instancia de usuario de SQL Express, pero simplemente modificándola podremos hacer que funcione sobre ediciones superiores de SQL Server, SQL Azure o SQL Compact.Un detalle importante es que, para evitar daños colaterales, el proceso de instalación no elimina la cadena de conexión previa (esa que vemos con la denominación “
ApplicationServices
”), ni la configuración de proveedores previa: simplemente añade el nuevo proveedor y lo establece por defecto, por lo que podemos eliminar tranquilamente esas configuraciones que ya no utilizamos.DefaultConnection
”) ya no será necesario tocar nada más; el sistema se encargará de crear las tablas necesarias para almacenar la información de usuarios, roles, perfiles, e incluso para hacer persistente el estado de sesión (si utilizamos el proveedor incluido en este componente); además, si no existe la base de datos, será capaz de crearla automáticamente si tenemos permisos para ello. Como nota negativa, seguro que habéis pensado que ya que es posible modificar el proveedor de datos a nivel de archivo de configuración, parece lógico que podamos utilizar cualquier origen de datos disponible, ¿verdad? Pues no necesariamente. He probado con el conector MySQL y no ha habido forma de echar a andar estos proveedores debido a un problema de incompatibilidad del tipo “image” en los metadatos. No sé si se debe a limitaciones del Universal Provider, o bien se trata de algún problema en la implementación del conector MySQL.
Sin duda, es un avance interesante que puede ahorrarnos bastante tiempo en esa tarea tan molesta que es montar la infraestructura de membresía y seguridad de nuestras aplicaciones. Y además, como comentaba Hanselman en su momento, estos proveedores es posible que formen parte de la próxima versión del framework, por lo que habrá que estar atentos a ellos.
En un próximo post os mostraré un ejemplo práctico, cómo utilizar este componente para poner en marcha el sistema de membership, roles y perfiles sobre una base de datos SQLCE.
Publicado en: Variable not found.
Publicado por José M. Aguilar a las 9:43 a. m.
Etiquetas: asp.net, aspnetmvc, desarrollo, novedades, webforms
Espero que te resulten interesantes. :-)
- Strongly Typed Data Controls, No más Eval y Bind!, por Luis Ruiz Pavón.
Fecha: 02/09/2011 - Esto lo haces tú en dos días, por Jorge Serrano
Fecha: 01/09/2011 - Moving Beyond Enumerations.
Fecha: 01/09/2011 - T4 Metadata and Data Annotations Template. ASP.NET MVC
Fecha: 01/09/2011 - The 4 Characteristics of Highly Effective Developers (vía Lluis Franco)
Fecha: 01/09/2011 - Detectar cambios en los datos en SQL Server, por Rodrigo Corral
Fecha: 1/09/2011 - Asynchronous scalable web applications with real-time persistent long-running connections with SignalR, por Scott Hanselman.
- Etiquetas autocerradas y tipo de contenido en XHTML y HTML5.
Fecha: 01/09/2011 - Smart Tasks y generación de eventos de controles desde la vista HTML, por Luis Ruiz Pavón
Fecha: 01/09/2011 - Sensacionales las novedades para trabajar con ISOs y VHDs en Windows 8 (vía CampusMVP)
Fecha: 01/09/2011 - HTML Editing Smart Tasks and Event Handlers generation, por ScottGu
Fecha: 01/09/2011 - Rules to Better Interfaces.
Fecha: 31/08/2011 - Nuget 1.5 Released, por Phil Haack
Fecha: 31/08/2011 - JavaScript básico en 10 minutos (vía Marc Rubiño)
Fecha: 31/08/2011 - JavaScript no es el demonio (creo)!, por Josep Maria Camps.Fecha: 29/08/2011
Publicado en: Variable not found
El caso es que ya estamos aquí de nuevo. Descansados, oxigenados, ilusionados y listos para enfrentarnos a otro emocionante año que seguro nos traerá grandes alegrías :-)
Por empezar con novedades, habréis notado le he dado un lavado de cara a la plantilla del blog, que ya se le iban notando los años. He sustituido el layout líquido por uno de ancho fijo, más apropiado para facilitar la lectura en las ya extendidas pantallas panorámicas, he simplificado algo el código pasando a usar características de CSS3 (lo siento por los que aún navegáis en galeones ;-)), y he reestructurado la columna derecha, pasando a segundo plano la publicidad de los laterales a pesar de los vastos ingresos que generaban, y potenciando la vertiente social y de comunidad del blog.
Y dicho esto, ¡queda inaugurada la temporada 2011-2012 de Variable not found!
Como siempre, nos vemos por aquí.
Publicado por José M. Aguilar a las 9:32 p. m.
Etiquetas: blogging, vacaciones, variablenotfound, variablenotfound.com
¿Y qué planes tenemos? Pues inmejorables. :-)
Este año vamos a tener la fortuna de poder pasar unos días en Mallorca, una isla que tengo muchas ganas de visitar, y donde seguro que vamos a disfrutar de lo lindo. Todo el mundo que la conoce no duda en calificarla como una auténtica maravilla, así que estamos ya locos por hacer las maletas y montarnos en el avión :-)
También, al igual que en ocasiones anteriores, pasaremos unos días en Sanlúcar de Barrameda, un pueblo que ya nos cautivó hace años y al que seguimos acudiendo cada verano a disfrutar de sus playas, sus calles, su gastronomía y todo lo que le rodea. Y por último, probablemente nos dejemos caer algunos días por El Portil, otro enclave costero al que solemos ir a descansar cada verano y algunos fines de semana (como el del viaje con sorpresa ;-)).
Así pues, dejo el blog con el piloto automático hasta el inicio de la nueva temporada, allá por finales de agosto o principios de septiembre, cuando volveremos con las pilas recargadas, los ánimos a tope y totalmente listos para afrontar el año con ganas e ilusión.
¡Felices vacaciones, amigos! :-)
PD: Como de costumbre, cierro los comentarios anónimos para que los spammers no se ceben en ellos y conviertan variablenotfound.com en un festival de enlaces a sitios inapropiados ;-)