Mostrar la IP y el tipo del Browser en Silverlight 3


Uno de los cambios que se realizaron en Silverlight 3, fue la eliminación del control asp:Silverlight, ahora se usa el Tag <Object> para inicializar parámetros desde el Servidor. Aunque si se desea seguir usando el control asp:Silverlight se puede descargar : http://code.msdn.microsoft.com/aspnetprojects.

Bien, pues vamos a enviar como parámetro la IP del usuario y una información del Browser para ser mostrada en una página de Silverlight.

Empezamos creando un nuevo proyecto en Silverlight, dejando que automáticamente se cree un proyecto web, el explorador de proyectos debe quedar más o menos así:

 Proyecto Silverlight

Ingresamos al archivo SilverlightApplication2TestPage (este es el nombre de mi archivo, ya que puede variar por el proyecto) en el código de diseño, al final del código veremos dentro de un Tag Div, el tag <object>:

<div id="silverlightControlHost">

        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">

              <param name="source" value="ClientBin/SilverlightApplication3.xap"/>

              <param name="onError" value="onSilverlightError" />

              <param name="background" value="white" />

              <param name="minRuntimeVersion" value="3.0.40624.0" />

              <param name="autoUpgrade" value="true" />

              <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">

                    <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>

              </a>

          </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>

Desde aquí podemos cambiar el tamaño del plugin de Silverlight, el color de fondo, nuestro archivo que manejara los errores, etc.

Dentro del tag object, se encuentran unos tags <param>, agregamos un nuevo tag <param>:

<param name="initParams" value='<asp:Literal runat="server"/>' />

El nombre del tag es initParams, y le decimos que el valor va a ser una etiqueta literal llamada parametros, ¿por qué? , porque desde el código vamos a adicionarle valores al literal y estos valores los tomara el tag <param>.

Para una lista de todos los parámetros  que maneja el tag <object>, en una entrada de la Liga Silverlight se encuentran listados.

Ahora, en el Código de la página SilverlightApplication2TestPage.cs, en el evento Page_Load, obtenemos la IP del usuario y las características del Explorador que está usando el usuario:

HttpBrowserCapabilities browser = Request.Browser;

String tipo = "Type= " + browser.Type;

String nombre = "Name= " + browser.Browser;

String IP = "EquipoIP=" + HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

this.parametros.Text = tipo + "," + nombre + "," + IP;

Con la clase HttpBrowserCapabilities podemos obtener información del Browser del usuario como versión, Plataforma, Si es beta, Si soporta cookies, si soporta Javascript y otras más, y con la clase HttpContext.Current.Request.ServerVariables podemos obtener la IP del Usuario, esta es una de las muchas formas de obtener la IP.

Luego de obtener los parámetros iniciales que queremos enviar, asignamos todos los campos en nuestro literal llamado parámetros, teniendo en cuenta de enviar un nombre y luego el valor del parámetro, para que cuando se envíen podamos reconocerlos.

En el Código del archivo App.cs, declaramos un Diccionario genérico que recibirá como Key el nombre del parámetro y como Value el valor del parámetro, luego a nuestra página principal enviamos el diccionario:

 

IDictionary<String, String> parametros = e.InitParams;

this.RootVisual = new MainPage(parametros);

Después de hacer esto, debemos cambiar el constructor de la página principal, para que reciba como parámetro un diccionario:


public MainPage(IDictionary<String,String> parametros)

Ahora que cambiar el constructor creamos nuestra interfaz para mostrar los parámetros que recibimos:

<UserControl x:Class="SilverlightApplication2.MainPage"

    xmlns=<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation">http://schemas.microsoft.com/winfx/2006/xaml/presentation</a>

    xmlns:x=<a href="http://schemas.microsoft.com/winfx/2006/xaml">http://schemas.microsoft.com/winfx/2006/xaml</a>

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc=<a href="http://schemas.openxmlformats.org/markup-compatibility/2006">http://schemas.openxmlformats.org/markup-compatibility/2006</a>

    mc:Ignorable="d" d:DesignWidth="320" d:DesignHeight="240">

      <Grid x:Name="LayoutRoot">

            <Grid.ColumnDefinitions>

                  <ColumnDefinition></ColumnDefinition>

            </Grid.ColumnDefinitions>

            <Grid.RowDefinitions>

                  <RowDefinition Height="50"></RowDefinition>

                  <RowDefinition Height="50"></RowDefinition>

                  <RowDefinition Height="50"></RowDefinition>

            </Grid.RowDefinitions>

            <TextBlock Name ="tipo" Text="Tipo del Browser" Grid.Row="0" Margin="10,10,10,10" Height="30"></TextBlock>

            <TextBlock Name ="nombre" Text="Nombre del Browser" Grid.Row="1" Margin="10,10,10,10" Height="30"></TextBlock>

            <TextBlock Name="ip" Text="IP Usuario" Grid.Row="2" Margin="10,10,10,10" Height="30"></TextBlock>

      </Grid>

</UserControl>

Tenemos 3 TextBlock para mostrar los 3 parámetros que recibimos.

En el código de nuestra clase principal, en el constructor asignamos los parámetros recibidos:

public MainPage(IDictionary<String,String> parametros)

{

InitializeComponent();

this.tipo.Text = "Tipo Explorador: " + parametros["Type"];

this.nombre.Text = "Nombre del Explorador: " + parametros["Name"];

this.ip.Text = "IP del Usuario: " + parametros["EquipoIP"];

}

 Como vemos, al recibir el diccionario, podemos accederlo través del nombre de la Key.

Si probamos:

 ExploradorIPBrowser1

 ExploradorIPBrowser2

Se muestra la IP 127.0.0.1 porque estoy ejecutando todo localmente y no he subido mi proyecto a un servidor web.

El código AQUI.

Visto en:

La Liga Silverlight .

Anuncios

Deseas comentar o sugerir algo?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s