Agregar un nuevo servicio en Windows Azure

Windows Azure es el nombre de la plataforma de servicios de Microsoft basada en cloud computing, tal y como nos cuenta Wikipedia.

Una vez que hemos conseguido nuestra cuenta para probar Azure, podemos comenzar a crear Servicios en la nube. Voy a comenzar con la configuración desde www.microsoft.com/azure, donde debemos crear un nuevo servicio para después publicarlo.

Al hacer clic en Windows Azure, nos abrirá una nueva ventana del explorador, y podremos seleccionar el proyecto, en el apartado My Proyects. Una vez realizado este paso, necesitamos agregar un nuevo servicio, haciendo clic en cualquiera de los dos link New Service que indico en la imagen:

En la siguiente ventana, solamente tenemos que escribir el nombre que tendrá nuestro servicio en la nube y una descripción del mismo. La descripción se podrá editar después de crear el servicio pero tened en cuenta que no ocurrirá lo mismo para el campo Service Label.

Ahora tenemos que pensar un dato importante: Necesitamos establecer el nombre público que tendrá nuestro servicio y comprobar si el que hemos seleccionado está aún disponible. Además se nos pregunta si nuestro servicio necesita ser hosteado en la misma ubicación de procedencia o si es indiferente. Este último punto, lo dejaremos como está por defecto.

Pulsamos en Create y esperamos a que nuestro servicio sea generado por Windows Azure.

Una vez que haya finalizado, tendremos dos entornos, Production y Staging, pero ninguno de los dos tendrá un Service Package subido aún, por lo que en estos momentos está preparado para recibir el paquete de nuestra aplicación.

 

¡Saludos!

Cómo obtener una cuenta para Windows Azure

Conseguir una cuenta para participar en Windows Azure es tarea complicada, sobre todo por el tiempo que tardan en dar una respuesta.
Voy a intentar explicar lo mejor posible la manera de obtener la invitación.
Es importante saber que hay dos tipos de invitaciones: Azure Service Invitations, la cual habilita Windows Azure y SQL Azure para trabajar únicamente con la base de datos. Existe una tercera funcionalidad, .NET Services, la cual no necesita invitación y se puede acceder a través de este link.

Para conseguir las otras dos invitaciones, podemos acceder directamente a la página de Microsoft Connect que es donde realmente nos redirige www.microsft.com/azure. Así nos evitamos la vuelta 😉

Nos pedirá una cuenta Passport y, si nunca hemos entrado a esta página, nos aparecerá una ventana como la siguiente:


Obviamente nos tenemos que registrar, nos informan de que nos van a solicitar información para el registro, tendremos que aceptar las condiciones de uso y, finalmente nos aparecerá una pantalla para ingresar nuestros datos:

Pulsamos el botón Aceptar y se nos solicita un nombre de usuario, el cual debe estar disponible dentro de Microsoft Connect para enviar comentarios, participar en publicaciones, etc.


Probamos suerte para ver cual está disponible y finalizamos el registro. A partir de este momento, pertenecemos a Microsoft Connect y tenemos a nuestra disponibilidad una cantidad considerable de proyectos en los que podemos participar.
Para localizar las invitaciones de Windows Azure y SQL Azure, tenemos que dirigirnos al Directorio de Conexiones.


Una vez allí, debemos localizar Azure Services Invitations y hacemos clic en Solicitar Participación Ahora.


Ahora tendremos que rellenar otro formulario con información relacionada con la empresa, cómo conociste Windows Azure, el nivel que tienes…


Y, al finalizarlo, aparecerá el siguiente mensaje:


En este apartado nos cuentan que nuestro código de invitación será enviado cuando esté disponible para Windows Azure, para SQL Azure exactamente igual, pero justo en el segundo punto tenemos un nuevo enlace dónde también debemos registrarnos para recibir el token de este último. Dentro de la página de SQL Azure Dev Centre, debemos hacer clic en el siguiente enlace y rellenar un formulario prácticamente igual que el de Applying to the Azure Services Invitations Program.


Finalizados todos estos pasos, en nuestro Panel de información de Connect, deberían aparecer tanto Azure Services Invitations como SQL Azure.


¡Pero esto acaba de comenzar! A partir de ahora, debemos esperar a que nos lleguen los correos oportunos con los tokens que se nos solicita en la página de Windows Azure.


Una vez que recibamos el email, deberemos introducir el token recibido por correo, para que algunos de los servicios queden habilitados (Windows Azure o SQL Azure). Hasta entonces poco más podemos hacer. Desconozco cuánto tiempo tardan en facilitarlos, pero en la solicitud de SQL Azure indican que debido a la demanda están tardando en responder.

Al menos, los que no lo hayan solicitado aún, pueden ir ganando tiempo.

¡Saludos!

Estructura de un proyecto ASP.NET MVC

MVC (Model View Controller) es un patrón de arquitectura, descrito por primera vez por  Trygve Reenskaug en el año 1979, que tiene como objetivo separar nuestra aplicación en tres capas fundamentalmente:

  • Modelo: Es la encargada del manejo de los datos de nuestra aplicación (Persistencia).
  • Vista: La interfaz de usuario, la cual no contiene absolutamente nada de lógica de negocio. En MVC las vistas no contienen un archivo .cs/.vb enlazado como pasaba en WebForms.
  • Controlador: Es la capa que actúa como intermediaria entre la Vista y el Modelo.

Es importante conocer cuál es el rol de cada una de las capas para no introducir código donde no corresponde. Es decir, el Modelo es el dueño de los datos, el Controlador es un simple intermediario (Ni le importa cómo accede el modelo a sus datos, ni le importa como la vista muestra la información) y la Vista no debe saber nada de la existencia del Modelo. Cada uno va a tener sus propios problemas creo yo 🙂

Actualmente tenemos la versión 1.0 como release y la versión 2.0 Preview 2. Os facilito el enlace de ambas ya que podemos tener instaladas las dos plantillas en nuestra máquina a la vez. (También podemos instalar el framework de MVC usando Web Platform Installer).

ASP.NET MVC 1.0

ASP.NET MVC 2.0 Preview 2

Si creamos un proyecto con cualquiera de las dos plantillas, obtendríamos el siguiente resultado:

 

  • /Content: Esta carpeta está pensada para almacenar los recursos de nuestra aplicación, como imágenes, estilos (CSS), etcétera.
  • /Controllers: Almacena todos los controladores de nuestro proyecto.
  • /Models: Todas las clases relacionadas con nuestra capa de datos.
  • /Scripts: Contiene los scripts que se ejecutan del lado del cliente.
  • /Views: Todas las vistas de todos los controladores. Dentro de la misma hay una carpeta por controlador.
  • /App_Data: Podemos almacenar nuestros archivos de datos.

Entonces… si cada controlador tiene su vista y disponemos de varias para cada uno ¿En qué vista comienza mi aplicación? Tenemos un archivo Global.asax que nos ayudará a definirlo.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Routing;

 

namespace MovieManagerTwo

{

    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 

    // visit http://go.microsoft.com/?LinkId=9394801

 

    public class MvcApplication : System.Web.HttpApplication

    {

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

            routes.MapRoute(

                "Default",                                              // Route name

                "{controller}/{action}/{id}",                           // URL with parameters

                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults

            );

 

        }

 

        protected void Application_Start()

        {

            RegisterRoutes(RouteTable.Routes);

        }

    }

}

Cuando la aplicación arranca, el método Application_Start() llama a su vez a RegisterRoutes. En él se puede apreciar que se crea una tabla de rutas y tenemos una ruta por defecto. En ella se indica el nombre del controlador, la acción que va a realizar y un parámetro id. En este caso vemos que el controlador que se ejecutará por defecto será HomeController y dentro del mismo se llamará a la acción Index. Tanto las acciones como la tabla de rutas lo veremos con más detenimiento. Por el momento es todo lo que necesitamos saber.

Si arrancamos la aplicación, podemos ver como efectivamente se ejecuta la acción Index del controlador Home.

Algunas de las ventajas que supone utilizar esta arquitectura pueden ser la siguientes:

  • El mantenimiento es más fácil debido a la división de responsabilidades.
  • No usa ViewState ni controles de servidor.
  • Es una arquitectura óptima para realizar pruebas unitarias (TDD).
  • Tenemos las herramientas necesarias para aplicar técnicas SEO.

Adjunto el Cheat Sheet dedicado al framework de MVC  que seguro que será de utilidad.

Para más información ASP.NET MVC.

 

¡Saludos!

Parámetros opcionales en C# 4.0

Una de las nuevas características preparadas para C# 4.0 son los parámetros opcionales,
ya conocidos por Visual Basic .NET. El objetivo será declarar nuestros
métodos, constructores e indexadores con unos valores por defecto, en
el caso de no indicarlos en la llamada.

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace ParametrosOpcionales
   7: {
   8:     class Program
   9:     {
  10:         static void Main(string[] args)
  11:         {
  12:             DatosPersonales("Gisela");
  13:             DatosPersonales("Gisela","Perez");
  14:             DatosPersonales("Gisela", "Perez", 10);
  15:  
  16:             System.Console.ReadLine();
  17:         }
  18:  
  19:         static void DatosPersonales(string nombre, string apellido = "Torres", int edad = 20)
  20:         {
  21:             System.Console.WriteLine("Nombre:{0} Apellido:{1} Edad:{2}", nombre, apellido, edad);
  22:         }

Podemos
realizar distintas llamadas indicando únicamente el obligatorio, el
obligatorio y uno de los opcionales o todos ellos. Visto así, podemos
preguntarnos cuál sería la manera de llamar a nuestro método pasándole
como argumentos el primer parámetro y el último, sin querer saber nada
del segundo. ¿Esto es posible? Afortunamente si y aquí es donde entran
en juego los argumentos nombrados, pensados para casos como este.

   1: DatosPersonales(nombre: "Jose");
   2: DatosPersonales(nombre: "Pedro",apellido:"Leal");
   3: DatosPersonales(edad: 40, apellido: "Rodriguez", nombre: "Laura");

Si utilizamos este tipo de llamada, incluso es posible alterar el orden de los parámetros.

Podemos
llegar a pensar en la posibilidad de olvidarnos de la sobrecarga en
algunos casos, sobre todo por el ahorro de código que esto supone.
También es cierto que podemos necesitar que la sobrecarga y los
parámetros opcionales convivan.

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace ParametrosOpcionales
   7: {
   8:     class Program
   9:     {
  10:         static void Main(string[] args)
  11:         {
  12:             ejemplo("Hola");
  13:  
  14:             System.Console.ReadLine();
  15:         }
  16:  
  17:         static void ejemplo(object saludo)
  18:         {
  19:             System.Console.WriteLine("Object: {0}",saludo);
  20:         }
  21:         static void ejemplo(string saludo,string nombre = "Gisela")
  22:         {
  23:             System.Console.WriteLine("{0} {1}",saludo,nombre);
  24:         }
  25:         static void ejemplo(string saludo)
  26:         {
  27:             System.Console.WriteLine("Simplemente {0}", saludo);
  28:         }
  29:     }
  30: }

En este ejemplo, existen tres tipos de sobrecarga. Si nosotros únicamente pasamos como argumento un string («Hola») debemos tener claro cual de los tres métodos será el candidato. Hay que tener en cuenta lo siguiente:

Siempre se eligirá en primer lugar aquel método que no necesite convertir el dato que le estamos pasando a otro tipo.

Tendrá preferencia aquel método que no necesite omitir sus parámetros opcionales.

Asi
pues, si arrancamos este ejemplo comprobaremos que la sobrecarga
elegida será la tercera por ser el arguménto del mismo tipo y por no
contenter parámetros opcionales que no se están teniendo en cuenta en
nuestra llamada.


¡Saludos!

SQL Server 2008 me impide modificar mis tablas

Cuando estamos diseñando las tablas de nuestra base de datos, es posible que necesitemos modificar la estructura de las mismas una vez creadas (Añadir claves primarias, modificar el nombre de las columnas, etcétera).

En SQL Server 2008 existe una protección, habilitada por defecto, para prevenir modificaciones en las tablas que ya han sido creadas. Si intentamos hacer cualquier cambio, al querer salvarlo,  nos aparecerá el siguiente mensaje:

 

«No se permite guardar los cambios. Los cambios que ha realizado
requieren que se quiten y vuelvan a crear las siguientes tablas. Quizá
ha realizado cambios en una tabla que no se puede volver a crear o ha
habilitado la opción Impedir guardar cambios que requieran volver a
crear tablas.»

Para deshabilitar esta protección vamos a Tools  => Options…  y en el apartado Designers deshabilitamos el checkbox  «Prevent saving changes that require table re-creation«.

 

 

¡Saludos!

Este es mi nuevo hogar

Después de luchar con los estilos en Blogger, modificar todos los
menús, mejorar la búsqueda, etcétera … Pues nada, que me mudo 🙂

Ante todo, quiero dar las gracias a la gente que está detrás del nombre de Geeks.ms
por hacerme un rinconcito en este gran lugar, donde se puede encontrar
infinidad de información relacionada con el mundo de Microsoft.
Mi
intención es trasladar los posts a este nuevo sitio, redireccionar las
peticiones de Blogger y mejorar aquellos post que comencé en su momento
y quedaron pendientes de revisión.

Por último, quisiera pedir
disculpas a aquellas personas que estaban vinculadas al antiguo Blog,
aunque intentaré hacerlo de la forma más transparente posible.

… Blog nuevo, diseño nuevo … 😉 

¡Saludos!