[ASP.NET MVC] Atributos para gestionar Rutas en MVC 5

En MVC la configuración por defecto de las rutas se hace a través del método estático RegisterRoutes de la clase App_Start\RouteConfig.cs, cuyo contenido inicial es:

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

Según esta configuración, la ruta puede estar formada por 0,1,2 o 3 segmentos
Por ejemplo

http://localhost:XXXXX/Home/Edit/

llama al “Action Method” Edit del controlador Home

En MVC 5 se ha incluido la característica Attribute routing, la cual permite usar atributos C# en los controladores y en los “Action Method”. Esta funcionalidad esta desactivada por defecto y para activarla hay que usar el método de extensión MapMvcAttributeRoutes

Continue reading…

[SQL SERVER] Revisar los bloqueos usando “blocked process threshold”

Cuando administramos una base de datos SQL SERVER, es conveniente revisar si hay procesos que están bloqueados, por ejemplo, consultas que tardan mucho en completarse debido a bloqueos.

A partir de SQL SERVER 2008 R2, se incluyó la opción Blocked Process Threshold, la cual permite especificar el umbral en segundos con el que generar informes de procesos bloqueados.

El valor se debe establecer es segundos en el intervalo de 0 hasta 86400 segundos.

Continue reading…

[Dropbox Portable SDK .NET] Sincronización (y XII)

En esta última entrega vamos a ver como recuperar información para llevar a cabo una sincronización manual. No vamos a explicar el proceso en detalle, pero básicamente el proceso consiste en:

1. Hacer una petición POST a la url https://api.dropbox.com/1/delta incluyendo el token de acceso en la cabecera HTTP Autorization.

2. Si la petición es procesada correctamente, se retornará una cadena en formato JSON la cual es deserializada a una instancia del tipo “InfoDelta

    public class InfoDelta
    {
        public bool reset { get; set; }
        public string cursor { get; set; }
        public bool has_more { get; set; }
        public object[][] entries { get; set; }
    }

3. El campo “entries” contiene un array donde cada elemento contiene metadatos asociados a ficheros y carpetas de DropBox. Inicialmente, se retornarán todos los ficheros y carpetas que tenemos en nuestra cuenta DropBox

4.  Si el campo “has_more” es “true”, hay que volver a hacer la misma petición para recuperar el resto de metadatos. Este proceso hay que repetirlo hasta que “has_more=false”.

5. Una vez que tenemos todas las entradas, debemos realizar las siguientes comprobaciones:

– Si el fichero no existe en local, entonces debemos descargarlo

– Si el fichero existe, debemos comprobar el identificador de la versión. Si el id local coincide con el de dropbox, entoces el fichero no ha cambiado. Si el id de versión es nuevo, entonces debemos actualizarlo.

– Si hay un fichero local que no esta en los metadatos retornados por delta, entonces debemos subirlo a DropBox

NOTA: En el siguiente enlace podéis encontrar mas detalles sobre la sincronización.

6. Una vez que terminemos de revisar todos los metadatos retornados por la petición /delta, debemos guardar el valor “cursor“.

7. En la siguiente comprobación de sincronización, tenemos que volver a hacer una petición /delta, incluyendo el parámetro “cursor” con el valor recuperado de la petición anterior. Esto hará que dropbox nos retorne solo los cambios registrados desde la última petición /delta. Nota: En caso de no incluir el parámetro “cursor“, se volverán a retornar todos los ficheros y carpetas.

Continue reading…