Mad.Nug & Second.Nug os presenta ¿Qué es App Fabric?

En Mag.Nug estamos abriendo horizontes y qué mejor forma que de la mano de Second.Nug 🙂

Si bien este evento va tener lugar en Madrid el 24 de Junio, vamos a tener la oportunidad de poder seguirlo, a la vez que participar, de manera online. Creemos que es un gran acierto llevar un paso más allá los eventos presenciales con el fin de que más oyentes puedan disfrutar y aprender con estas reuniones.

Por ello, para aquellos que podáis acudir a las oficinas de Microsoft Ibérica en Madrid podéis registraros a través del siguiente link y los que queráis asistir de manera online será necesario inscribiros a través del siguiente enlace.

¡Os esperamos en analógico o en digital! ¡Saludos!

MAD.NUG: ¿Qué es Windows Server AppFabric?

AppFabric_evento

Es posible que muchos de vosotros hayais oído hablar de AppFabric como parte de Windows Azure. El 24 de Junio, vamos a ver con la ayuda de Roberto Gonzalez, MVP de Biztalk, qué es Windows Server AppFabric fuera de la nube, qué relación tiene con Biztalk y cuándo usar uno u otro.

El evento tendrá lugar en el edificio de Microsoft Ibérica en Pozuelo de Alarcón, Madrid.

Asignar imagen

Para acceder al registro podéis hacerlo a través del siguiente enlace. Por otro lado, si necesitáis más información acerca de esta tecnología podéis acceder al centro de desarrollo de Windows Server.

¡Os esperamos!

Cambiar el idioma en el grid de Telerik

Hace algún tiempo estuve comentado los controles de Telerik que ofrecen con licencia Open Source para ASP.NET MVC. También recuerdo que existía un comentario al respecto donde uno de los lectores comentaba que no era posible el multi-idioma en el grid donde aparecen los literales por defecto en inglés:

Ha llegado el momento en el cual tuve que pelearme con ello y, al menos a día de hoy, sí que es posible modificar estos literales. Actualmente no existía el idioma español, pero he enviado a Telerik las traducciones y me comentan que las incluirán en la próxima release. Para descargar las mismas podemos hacerlo a través de la siguiente dirección.

¿Cómo usarlo?

En primer lugar, debemos crear la carpeta App_GlobalResources en nuestro proyecto, donde incluiremos el archivo GridLocalization.es-ES.resx.

Una vez añadido, necesitamos especificar el idioma en nuestro grid a través del método Localizable que ofrece Telerik:

 <% Html.Telerik().Grid(Model)
.Name("Tweets")
.Pageable(pager => pager.PageSize(5))
.Filterable()
.Sortable()
.Localizable("es-ES")
.Columns(columns =>
{
columns.Bound(c => c.ID).Title("ID");
columns.Bound(c => c.Text).Title("Tweet");
columns.Bound(c => c.User.Name).Title("Usuario");
})
.Render();%>

Si arrancamos la aplicación, vemos que efectivamente los literales han cambiado a perfecto castellano 🙂

Espero que sea de utilidad.

¡Saludos!

Configurar credenciales del proxy en el web.config

Si tenemos una aplicación que necesita hacer uso de Internet y nos encontramos con un proxy, es necesario especificar de alguna manera la dirección del mismo. Si además es necesario hacer uso de unas credenciales para que se nos autorice el acceso, debemos especificar más valores en la configuración.

Cuando solamente se realiza una llamada desde nuestro código a Internet, podemos pensar que esta podría ser una solución válida:

            var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
var proxy = new WebProxy(Settings.Default.UrlProxy);

proxy.Credentials = new NetworkCredential(Settings.Default.UserProxy,
Settings.Default.PasswordProxy,
Settings.Default.DomainProxy);
httpWebRequest.Proxy = proxy;

Sin embargo, puede que esta no sea la forma más correcta cuando necesitamos hacer distintas peticiones en distintos puntos de nuestra aplicación. ¿Cuál sería la mejor solución? Definir un módulo dentro de la sección <defaultProxy> del archivo de configuración. En él especificaremos una clase donde implementaremos la interfaz IWebProxy como muestro a continuación:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using Utils.Properties;

namespace Utils
{
public class Proxy : IWebProxy
{
public ICredentials Credentials
{
get
{
return new NetworkCredential(Settings.Default.UserProxy,
Settings.Default.PasswordProxy,
Settings.Default.DomainProxy);
}
set { }
}

public Uri GetProxy(Uri destination)
{
return new Uri(Settings.Default.UrlProxy);
}

public bool IsBypassed(Uri host)
{
return false;
}
}
}

Por último, añadimos las siguientes líneas en el web.config, dentro de <configuration> para que, cada vez que creemos una petición con WebRequest, automáticamente utilice esta configuración.

<system.net>
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type="Utils.Proxy, Utils" />
</defaultProxy>
</system.net>

¡Saludos!

Estadísticas sobre tus links con bit.ly

Hace algún tiempo cree un pequeño post que hablaba de la forma de obtener una short url a través del servicio Tiny url. Sin embargo, este servicio no soporta en la actualidad un reporte de estadísticas como el que tiene bit.ly. Afortunadamente, disponemos una API para poder crear y consultar direcciones acortadas por ellos.

El primer paso sería registrarnos de manera gratuita en el servicio para poder hacer uso de la API, ya que es necesario el envío de las credenciales cada vez que hagamos una petición a sus endpoints. Una vez registrados, deberemos acceder a la siguiente dirección para obtener nuestra API Key: http://bit.ly/a/your_api_key

Si quisiéramos obtener una short url a través de la API, bastaría con indicar los siguientes valores en la petición:

            var longUrl = Uri.EscapeDataString("http://geeks.ms/blogs/gtorres/archive/2010/06/05/estadisticas-sobre-tus-links-con-bit-ly.aspx");
const string login = "YOUR USER NAME";
const string apiKey = "YOUR API KEY";
const string format = "xml"; //json is valid too

const string urlShorten = "http://api.bit.ly/v3/shorten?";
var credentials = string.Format("login={0}&apiKey={1}&", login, apiKey);
var parameters = string.Format("&longUrl={0}&format={1}", longUrl, format);

var bitLy = WebRequest.Create(string.Format("{0}{1}{2}", urlShorten, credentials, parameters));

var shortUrl = bitLy.GetResponse();

using (var reader = new StreamReader(shortUrl.GetResponseStream()))
{
Console.WriteLine(reader.ReadToEnd());
}

Al especificar el formato XML, como respuesta obtenemos lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<status_code>200</status_code>
<status_txt>OK</status_txt>
<data>
<url>http://bit.ly/9L79lW</url>
<hash>9L79lW</hash>
<global_hash>bUHuTf</global_hash>
<long_url>http://geeks.ms/blogs/gtorres/archive/2010/06/05/estadisticas-sobre-tus-links-con-bit-ly.aspx</long_url>
<new_hash>0</new_hash>
</data>
</response>

Para poder ver las estadísticas de esta URL en concreto, saber si otras personas la han compartido y en qué red social, podemos visualizarlo solamente añadiendo el signo + a la short URLdevuelta: http://bit.ly/9L79lW+

Si por el contrario quisiéramos generar nuestras propias estadísticas, recuperando el número de clicks realizados sobre la URL, podríamos realizar la siguiente consulta:

            const string login = "YOUR USER NAME";
const string apiKey = "YOUR API KEY";
const string shortURL = "http://bit.ly/9L79lW";
const string clicksURL = "http://api.bit.ly/v3/clicks?";
const string format = "xml";
const string hash = "j3";

var credentials = string.Format("login={0}&apiKey={1}&", login, apiKey);
var parameters = string.Format("&shortUrl={0}&format={1}&hash={2}", shortURL, format, hash);

var bitLy = WebRequest.Create(string.Format("{0}{1}{2}", clicksURL, credentials, parameters));

var shortUrl = bitLy.GetResponse();

using (var reader = new StreamReader(shortUrl.GetResponseStream()))
{
Console.WriteLine(reader.ReadToEnd());
}

Con la siguiente respuesta:

<?xml version="1.0" encoding="UTF-8" ?>
<response>
<status_code>200</status_code>
<data>
<clicks>
<short_url>http://bit.ly/9L79lW</short_url>
<global_hash>bUHuTf</global_hash>
<user_clicks>6</user_clicks>
<user_hash>9L79lW</user_hash>
<global_clicks>13</global_clicks>
</clicks>
<clicks>
<user_clicks>112</user_clicks>
<global_hash>lLWr</global_hash>
<hash>j3</hash>
<user_hash>j3</user_hash>
<global_clicks>116</global_clicks>
</clicks>
</data>
<status_txt>OK</status_txt>
</response>

Más información sobre el uso de esta API.

Espero que sea de utilidad.

¡Saludos!