Featured Posts

Diplomado de desarrollo de aplicaciones para Windows Phone 7.1–LatinoaméricaDiplomado de desarrollo de aplicaciones para Windows... Los invito cordialmente a que se inscriban al Diplomado de desarrollo de aplicaciones para Windows Phone 7.1, impulsado por Microsoft México para todo el mundo!  Completamente...

Readmore

Nueva carrera en Microsoft Virtual Academy: Windows Phone 7.1 (Mango)Nueva carrera en Microsoft Virtual Academy: Windows... Tengo el gusto de darles a conocer la disponibilidad de una nueva carrera en el Microsoft Virtual Academy (MVA): La carrera de Windows Phone 7.1 Mango. Esta es la descripción...

Readmore

Nueva carrera en Microsoft Virtual Academy: Silverlight 4Nueva carrera en Microsoft Virtual Academy: Silverlight... ¿Eres estudiante de Microsoft Virtual Academy (MVA)? Tengo el gusto de anunciarles oficialmente el lanzamiento de la nueva carrera de Silverlight 4 para esta plataforma educativa. La...

Readmore

Rodrigo Díaz Concha Rss

Curso gratuito de Introducción a Silverlight 4

Posted on : 09-02-2010 | By : Rodrigo | In : Comunidades, Cursos, MVP, Screencasts, Silverlight 4, Tips

Tags: , , , , , , , ,

51

Hola a todos/as.  Es para mí un gusto informarles de esta iniciativa personal que tiene como objetivo ayudar a difundir Silverlight 4 como plataforma de desarrollo y colaborar con materiales de entrenamiento sin costo alguno para las Comunidades de desarrolladores de habla hispana.

Curso de Introducción a Silverlight 4

sl4logosmall He creado un Curso de Entrenamiento totalmente gratuito, en español, llamado “Curso de Introducción a Silverlight 4” el cual consta en este momento de 12 videos que describen las funcionalidades más destacables de la plataforma, iniciando desde una introducción a la tecnología y conceptos fundamentales al momento de construir soluciones con Silverlight 4, pasando por temas básicos como Xaml, Animaciones, Impresión, MediaElement, etc.  Asimismo el esta primera parte finaliza con una práctica en donde construiremos una aplicación funcional para reforzar los conceptos vistos y sobre todo: ¡para que podamos todos apreciar lo fácil y divertido que es construir aplicaciones poderosas utilizando esta fabulosa tecnología!

El curso es de Nivel 100 y pretender ser una fuente de referencia para todas aquellas personas que deseen adentrarse en la construcción de aplicaciones enriquecidas para Internet (RIA) con Silverlight 4.

Curso de Introduccion a Silverlight 4

Por otro lado, el curso no estará limitado a estos 12 videos ya que mi idea es continuar exponiendo temas de una manera sencilla, rápida y eficaz alrededor de los temas que considero medulares.  Como por ejemplo el tema de las Animaciones, en donde tenemos un sin fin de temas qué podría ser fácilmente material cada uno para un screencast:

Curso de Introduccion a Silverlight 4 - 2

Además, el curso contará pronto con una segunda parte en donde trataré temas como Aplicaciones Fuera del Navegador, Notificaciones, Confianza Elevada, WCF Data Services, WCF RIA Services, Consumiendo datos RSS, Atado de Datos, etc., así como también de una segunda práctica relacionada para reforzar los conceptos mostrados.

Lista de Temas

A continuación enlisto los temas que incluye la primera parte del Curso de Introducción a Silverlight 4.

    Introducción

    Introducción y Bienvenida al Curso de Introducción de Silverlight 4 creado por Rodrigo Díaz Concha, MVP de ASP.NET, fundador de La Liga Silverlight, Orador de INETA Latam y Master Instructor del Silverlight Tour para Latinoamérica y España.

    Este curso introductorio a Silverlight 4 te permitirá comprender los conceptos básicos y diversas funcionalidades con las que cuenta esta fabulosa plataforma de desarrollo. Esta primera parte del curso consta de 12 videos y 1 práctica que refuerza los conceptos vistos en la serie de screencasts.

    Silverlight es una plataforma de desarrollo para construir aplicaciones enriquecidas para Internet (RIA por sus siglas en inglés) que cada vez está siendo más usada como opción tecnológica en aplicativos modernos.

    Una confusión que se tiene hoy en día es que se relaciona únicamente a Silverlight con el sistema operativo Windows, pero lejos de eso, las aplicaciones de Silverlight pueden ejecutar en Mac OS, Linux y Windows.

    En este screencast veremos una introducción a la plataforma de desarrollo Silverlight, sus herramientas, aplicaciones reales y los requisitos necesarios para poder comenzar a construir aplicaciones con esta tecnología. Para más artículos acerca de Silverlight totalmente en español visita La Liga Silverlight: La Primera Comunidad MSDN en Español acerca de Silverlight y tecnologías relacionadas (http://blogs.LigaSilverlight.com).

  1. FundamentosUna vez instaladas las herramientas de Silverlight para Visual Studio .NET es hora de poner manos a la obra, asimismo es muy importante tener en cuenta algunos conceptos fundamentales acerca de la construcción de soluciones en esta tecnología. En este capítulo veremos conceptos fundamentales en el desarrollo de aplicaciones de Silverlight como las plantillas de Visual Studio .NET, el diseñador, el empaquetado XAP y el hospedaje en la página. Para más artículos acerca de Silverlight totalmente en español visita La Liga Silverlight: La Primera Comunidad MSDN en Español acerca de Silverlight y tecnologías relacionadas (http://blogs.LigaSilverlight.com).
  2. XamlXaml (acrónimo de Extensible Application Markup Language) es el lenguaje de marcación utilizado por Silverlight (y también por su hermano mayor WPF) para poder definir las interfaces de usuario de nuestras aplicaciones.  Toda aplicación de Silverlight implica código de Xaml ligado a código en .NET. Por esta razón en este capítulo veremos conceptos básicos acerca de Xaml, sus elementos básicos y transformaciones.
  3. AnimacionesPara darle vida a nuestras aplicaciones de Silverlight podemos hacer uso entre otras cosas de las Animaciones. Las Animaciones son un mecanismo para cambiar el valor de las propiedades de los elementos y transformaciones conforme pasa un tiempo determinado. En este capítulo describiremos de manera rápida y sencilla el uso y creación de Animaciones dentro de Silverlight.
  4. Expression BlendTodo desarrollador de Silverlight debe tener en su cinturón de herramientas Expression Blend, ya que nos ayuda de gran manera a hacer más rápido, efectivo y divertido nuestro trabajo al momento de construir soluciones con la plataforma de desarrollo Silverlight. En este capítulo apreciaremos en conjunto el uso de Expression Blend como herramienta de edición nativa de Xaml  además describiremos las opciones más importantes de la herramienta.
  5. Recursos y EstilosLos recursos son un concepto básico para poder crear aplicaciones que reutilicen elementos ya que permiten ser un almacenaje de objetos de cualquier tipo para poder reusar en cualquier parte de nuestras aplicaciones. Los estilos son elementos que podemos  guardar en el diccionario de Recursos para poder aplicarlos y lograr así una apariencia estándar en la aplicación. En este capítulo describiremos el concepto de Recursos y también describiremos la creación y utilización de Estilos para controles y elementos.
  6. Controles y PlantillasSilverlight cuenta con una gran cantidad de controles que podemos utilizar en nuestras aplicaciones y la gran mayoría soporta el cambio o modificación de su Plantilla.  En este capítulo mostraremos la manera de cómo cambiar la Plantilla en los controles básicos de Silverlight.
  7. MediaElementSilverlight ha sido utilizado como aplicación cliente en la transmisión de importantes eventos en los últimos meses: la toma de poder de Barack Obama, el Memorial de Michael Jackson, los Juegos Olímpicos de Beijing , etc. Debido a su extraordinaria calidad en la reproducción de audio y video Silverlight está siendo la plataforma favorita para sitios multimedia. En este capítulo veremos la utilización del elemento MediaElement, el cual nos permite reproducir audio y video en nuestros aplicativos y apreciaremos la manera tan sencilla de incorporar esta características en nuestras propias aplicaciones.
  8. ImpresiónUna de las características más esperadas y solicitadas por la comunidad de Silverlight es el soporte de impresión dentro de las aplicaciones, esto es, la capacidad de poder mandar a imprimir el contenido que estemos viendo en la aplicación ya sea una lista de datos de un DataGrid o ListBox o simplemente tomarle una “foto” a la pantalla y enviarla a papel o alguna de las impresoras virtuales instaladas en nuestros equipos (por ejemplo: OneNote, XPS, PDF, etc.).  Silverlight 4 incluye esta característica a través de un modelo de clases muy sencillo.En este capítulo mostraremos el uso de la clase PrintDocument para poder crear documentos de impresión a través de nuestras aplicaciones de Silverlight 4.
  9. WebcamCon la llegada de Silverlight 4 también ha llegado a nosotros la posibilidad de implementar en nuestras aplicaciones la capacidad de tomar video a través de la Webcam y capturar audio por medio del micrófono del equipo.  Este fue una de las peticiones más fuertes en Silverlight 3 y la espera ha terminado.  En este capítulo del curso veremos cómo fácilmente podemos utilizar la Webcam para poder realizar capturas de fotografías con el video.
  10. Drag and DropSilverlight 4 cuenta con soporte de arrastrar uno o varios archivos desde afuera de la aplicación hacia adentro de ella y soltarlo(s) para poder leer su información y contenido.  Esta característica nos permite como desarrolladores crear mejores Experiencias para los Usuarios ya que evitan el número de cajas de diálogo y clics para abrir o leer un archivo o conjunto de archivos. En este capítulo del curso veremos cómo aplicar esta sencilla pero poderosa funcionalidad en nuestras propias soluciones.
  11. OpenFileDialogDe manera predeterminada, Silverlight requiere el permiso explícito del usuario para poder leer el Sistema de Archivos ya que ejecuta en Confianza Parcial. La caja de diálogo OpenFileDialog nos brinda un mecanismo para permitir a los usuarios que accedan a sus archivos desde las aplicaciones con Silverlight. En este capítulo del curso describiremos el uso de la caja de diálogo OpenFileDialog para poder leer archivos del equipo del usuario.
  12. Clic DerechoTradicionalmente al hacer clic derecho sobre una aplicación de Silverlight nos muestra un menú con la opción de abrir la caja de diálogo con información del plugin (como la versión, las cuotas para el almacenamiento aislado, etc.). Ahora en Silverlight 4 podemos capturar el evento de clic derecho del mouse para crear nuestra propia Interface de Usuario y código relacionado. En este capítulo describiremos el manejo de esta característica para poder crear menús contextuales en nuestras aplicaciones de Silverlight.

new_9guy_2 Todos los videos los pueden ver en el sitio de Channel 9 México.

Personalmente estoy convencido que es la mejor época para convertirse en un desarrollador, y con Silverlight como plataforma parece ser que la imaginación es el límite.

Sinceramente espero que esto le pueda servir a más de una persona.  Asimismo, espero aquí sus comentarios, sugerencias y todo tipo de comunicación al respecto: me gustaría saber si este esfuerzo les ha ayudado y de qué manera.  ¡Su retroalimentación es muy importante para mí!

Salu2!

Comprendiendo SketchFlow en 5 minutos

Posted on : 28-01-2010 | By : Rodrigo | In : Expression, Tips

Tags:

0

Aquí les dejo un excelente video que explica de manera rápida y concisa qué es SketchFlow, espero que lo disfruten.

 

Salu2!

Máquina Virtual para el desarrollo de aplicaciones Silverlight 3 y Windows SharePoint Services 3.0

Posted on : 06-11-2009 | By : Rodrigo | In : SharePoint, Silverlight 3, Tips

Tags: , ,

2

En conjunto, Silverlight y SharePoint son dinamita. Aquí les dejo la lista de herramientas y programas necesarios (o recomendados) para poder crear una máquina virtual en donde tengan todo un ambiente de desarrollo adecuado para la construcción de aplicaciones con dichas plataformas.  Tomen en cuenta que aquí estoy considerando WSS 3.0 y no MOSS 2007, el cual requerirá sus propios componentes de instalación, pero prácticamente es el mismo escenario.  Espero les sea de utilidad.

  1. Windows 2003 R2 con Service Pack 1
  2. SQL Server 2005 Express
  3. Windows SharePoint Services 3.0 con Service Pack 2
  4. Windows SharePoint Services 3.0 SDK (Abril 2009)
  5. Visual Studio .NET 2008 con Service Pack 1
  6. Extensiones de Visual Studio 2008 para Windows SharePoint Services 3.0 versión 1.3 (Marzo 2009 CTP)
  7. Silverlight 3 SDK
  8. Herramientas de Silverlight 3 para Visual Studio .NET 2008 Service Pack 1
  9. Silverlight 3 Toolkit (Octubre 2009)
  10. Microsoft Expression Blend 3 con SketchFlow Trial
  11. Redgate .NET Reflector
  12. Fiddler 2
  13. Notepad++

Instalando Visual Studio 2010 Beta 2

Posted on : 21-10-2009 | By : Rodrigo | In : Silverlight 3, Tips, Visual Studio 2010

Tags: ,

3

Si fueron usuarios de la versión Beta 1 de Visual Studio 2010 tendrán que desinstalarla previamente a la instalación de la nueva versión Beta 2; pero el orden de los factores en este caso parece ser que sí afecta el producto.

Aquí les enlisto los componentes que tuve que desinstalar y el orden en el que lo hice por si ustedes se encuentran en la misma situación.

Escenario

Windows 7 Ultimate 64 bit en Inglés

Visual Studio 2008 SP1

Visual Studio 2010 Beta 1

Los componentes que desinstalé fueron los siguientes y en el orden especificado:

  1. Microsoft Visual Studio 2010 Beta 1
  2. Microsoft .NET Framework 4 Extended Beta 1
  3. Microsoft .NET Framework 4 Client Profile Beta 1
  4. Microsoft Visual C++ 2010 Beta 1 x64 Redistributable
  5. Microsoft Visual C++ 2010 Beta 1 x86 Redistributable

Posteriormente, la instalación ocurrió sin ningún problema excepto al final que me mandó que no se pudo instalar el Silverlight 3 SDK.  Leyendo en el blog de Mike Snow me di cuenta (ya muy tarde) que debemos desinstalar también el SDK de Silverlight 3 RTM antes de instalar Visual Studio 2010 Beta 2 para no tener este problema.  No obstante, todo funciona perfectamente; faltaría actualizar a la nueva versión del SDK de Silverlight pero eso se puede hacer de manera individual.

Espero que les sea de utilidad.

Salu2!

Windows 7: Temas escondidos

Posted on : 23-09-2009 | By : Rodrigo | In : General, Tips, Windows 7

Tags: ,

1

Tal vez esto no es algo nuevo pero si aún no lo saben vale la pena hacerlo.  Resulta que en Windows 7 vienen algunos temas *escondidos* los cuales en realidad, están enfocados a ciertas regiones únicamente.

Para verlos, abre el Explorador de Windows, indica que quieres ver los archivos de sistema (deshabilitando la opción ‘Hide protected operating system files’ en el menú Tools…Options, pestaña ‘View’).

Ahora navega al fólder \WINDOWS\GLOBALIZATION\MCT.  En este fólder podrás encontrar la siguiente lista:

  • MCT-AU
  • MCT-CA
  • MCT-GB
  • MCT-US
  • MCT-ZA

En cada uno de esos fólders podrás encontrar un subfólder llamado Theme.  Haz doble clic en el archivo .theme para aplicarlo y listo.  ¡Chéquenlos, están increíbles!

Tema de Windows 7: United Kingdom

(Tema mostrado: UK)

Utilizando PagedCollectionView de manera declarativa para crear un DataGrid agrupado en Silverlight

Posted on : 03-08-2009 | By : Rodrigo | In : Silverlight 3, Tips

Tags: ,

0

Introducción

El control DataGrid de Silverlight 3 permite que su fuente de datos sea un objeto de tipo PagedCollectionView.  Dicho objeto nos permite definir uno o varios grupos los cuales servirán para mostrarlos de manera agrupada en el DataGrid que esté enlazado con esta fuente de datos.  Esto ya fue explicado anteriormente por mi buen amigo Santiago Leguiza quien nos explicó cómo utilizar la clase PagedCollectionView junto con el DataGrid.

La definición de la clase PagedCollectionView es:

public sealed class PagedCollectionView : ICollectionView, 

                                          IEnumerable, 

                                          INotifyCollectionChanged, 

                                          IPagedCollectionView, 

                                          IEditableCollectionView, 

                                          INotifyPropertyChanged

No obstante cabe resaltar que, esta clase, al no tener un constructor vacío (es decir, que no requiera parámetros para su instanciación) no la podemos usar de manera declarativa en XAML para crear una instancia de ella por ejemplo en un diccionario de recursos.  Tener un constructor vacío y ser una clase pública son los dos principales requisitos de una clase para poderse instanciar desde XAML.  Por si fuera poco, esta clase está marcada como sellada lo cual nos impide crear clases derivadas que pudiesen subsanar este problema.

Ahora bien, aquí ofrezco una solución a esta situación: una clase propia, pública, con un constructor vacío y además extensible, que expone una serie de propiedades entre ellas un PagedCollectionView que podremos usar posteriormente como fuente de datos en un control de tipo DataGrid.

La implementación completa de esta clase es la siguiente:

public class MyPagedCollectionView

{

    PagedCollectionView view = null;

    PropertyGroupDescription groupDescription = null;

    IEnumerable source = null;

    public MyPagedCollectionView()

    {

        if (view == null && source!=null)

                view = new System.Windows.Data.PagedCollectionView(source);

    }

 

    /// <summary>

    /// Regresa el objeto PagedCollectionView

    /// </summary>

    public PagedCollectionView View

    {

        get

        {

            return view;

        }

    }

 

    /// <summary>

    /// La fuente de datos

    /// </summary>

    public IEnumerable Source

    {

        get

        {

            return source;

        }

        set

        {

            source = value;

            view = new System.Windows.Data.PagedCollectionView(source);

        }

    }

 

    /// <summary>

    /// El objeto que define el agrupamiento

    /// </summary>

    public PropertyGroupDescription GroupDescription

    {

        get

        {

            return groupDescription;

        }

        set

        {

            groupDescription = value;

            view.GroupDescriptions.Add(value);

        }

    }

 

}

Esta clase como podemos apreciar expone las siguientes propiedades públicas:

View

Es el objeto de tipo PagedCollectionView que utilizamos como fuente de datos para el enlace con un DataGrid.

Source

Esta propiedad permite establecer un objeto que implemente la interface IEnumerable como fuente de datos para el PagedCollectionView.  De hecho, en el accesor Set{} se vuelve a crear el objeto de tipo PagedCollectionView utilizando el objeto establecido como valor en esta propiedad.

GroupDescription

Representa la definición del agrupamiento.  Este objeto es agregado a la colección GroupDescriptions de la propiedad View, es decir, del objeto de tipo PagedCollectionView.

Utilización

Para utilizar esta clase tenemos que definir en un diccionario de recursos los siguientes elementos:

  • La fuente de datos
  • El descriptor del grupo
  • La instancia de MyPagedCollectionView (clase descrita en este mismo artículo)

El siguiente fragmento de XAML muestra el código necesario para utilizar esta clase.  Nota: El nombre del proyecto de ejempo es SilverlightApplication12.

<UserControl xmlns:data1="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="SilverlightApplication12.SilverlightControl1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:local="clr-namespace:SilverlightApplication12"

    xmlns:data="clr-namespace:System.Windows.Data;assembly=System.Windows.Data"

    Width="400" Height="300">

    <UserControl.Resources>

        <local:Albumes x:Key="albumes" />

        <data:PropertyGroupDescription x:Key="groupDescription" PropertyName="Genero" />

        <local:MyPagedCollectionView x:Key="collectionView" Source="{StaticResource albumes}" GroupDescription="{StaticResource groupDescription}"  />

   

    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White">

        <data1:DataGrid x:Name="datagrid" DataContext="{StaticResource collectionView}" ItemsSource="{Binding View}" >

        </data1:DataGrid>

    </Grid>

</UserControl>

Lo cual demuestra que de esta manera podremos lograr agrupar el DataGrid pero sin escribir código en el code-behind de nuestra aplicación: todo queda de manera declarativa.

Notas:

La propiedad GroupDescription es una definición de un solo grupo, si quisieran crear varias definiciones de grupo tendrían que cambiar este tipo de propiedad por una lista o array y hacer los cambios apropiados en el código.

Esto simplemente muestra la manera de hacerlo de manera declarativa más NO es recomendado ya que estamos obligando un comportamiento no soportado por la plataforma (El atado de datos TwoWay puede comportarse de manera extraña, este escenario está enfocado a datos de solo-lectura).  No obstante, para efectos demostrativos creo que el código es interesante.

Espero que les sea de utilidad.

Salu2!

Parámetros dinámicos en Silverlight 3 con <object>

Posted on : 24-07-2009 | By : Rodrigo | In : Silverlight 3, Tips

2

Como sabrán una de las cosas que la versión final de Silverlight 3 no tiene es el control de ASP.NET AJAX para Silverlight (control <asp:Silverlight>).  Esto es un cambio de paradigma, para todos aquellos que estábamos acostumbrados a utilizarlo en nuestras páginas .aspx, ya que no tenemos una manera intuititva de establecer las propiedades para el plugin de Silverlight 3.  El camino a seguir ahora es utilizar la etiqueta <object> de HTML.  Pueden encontrar una lista de los parámetros que podemos establecer para nuestras aplicaciones Silverlight en esta página del MSDN.

Ahora bien, la pregunta es: ¿cómo podemos establecer parámetros iniciales dinámicos del lado del servidor para el plugin de Silverlight?  Esto como recordarán estaba en la propiedad InitParameters del control <asp:Silverlight>, y al ser un control de servidor podíamos utilizarlo en el evento Page_Load de la página.  Con <object> este ya no es el caso pero de todas formas sí podemos establecer parámetros iniciales de manera dinámica del lado del servidor si utilizamos el control <asp:Literal> al agregar el parámetro initParams de la siguiente manera:

<param name="initParams" value=’<asp:Literal runat="server" ID="parametros" />’ />

Esto nos permitire tener acceso programático del lado del servidor al control llamado ‘parametros’ y establecer en él cualquier valor que necesitemos.  El siguiente fragmento de código muestra el manejador del evento Load de la página aspx:

protected void Page_Load(object sender, EventArgs e)

{

    parametros.Text = string.Format("nombre={0},fecha={1}", "Rodrigo", DateTime.Now.ToString());

}

Como podemos apreciar, se están estableciendo dos parámetros iniciales: usuario y fecha.  Para leerlos lo hacemos de la manera tradicional, por medio de los argumentos del evento Application.Startup de nuestra aplicación Silverlight:

private void Application_Startup(object sender, StartupEventArgs e)

{

    string nombre = string.Empty;

    string fecha = string.Empty;

    if (e.InitParams.Count > 0)

    {

        if (e.InitParams["nombre"] != null)

            nombre = e.InitParams["nombre"];

 

        if (e.InitParams["fecha"] != null)

            fecha = e.InitParams["fecha"];

    }

 

    this.RootVisual = new MainPage(nombre, fecha);

}

De esta manera, podemos sortear la falta del control asp:Silverlight en nuestros aplicativos de Silverlight 3.

Salu2!

Office 2010 CTP + Visual Studio .NET 2008 = Issues

Posted on : 20-07-2009 | By : Rodrigo | In : Silverlight 3, Tips

Tags: , , , ,

0

Sucedió durante la semana pasada en la impartición de la serie de 5 Web Casts ‘Silverlight 3 Aquí y Ahora’ que Visual Studio .NET 2008 tuvo un comportamiento excesivamente inestable y extraño, sobre todo en el editor de HTML: tanto en la vista de código como en la vista de diseño.  El comportamiento constaba en que Visual Studio se congelaba al estar editando algún archivo .html o .aspx, y este problema era de facto al seleccionar la vista de diseño, de tal modo que la única manera de seguir era cerrando el proceso en el Administrador de Tareas.

Con este problema latente, me puse a reflexionar qué cambios habían ocurrido en mi equipo durante esos días y llegué a la conclusión que la única instalación ‘fuerte’ que había yo hecho en mi configuración era Office 2010 CTP –el cual había instalado justamente durante esa semana- así que me dediqué a desinstalarlo para regresar a la versión 2007 que ya había tenido durante mucho tiempo; pero el problema no acabó aquí:  Visual Studio .NET 2008 siguió comportándose de la misma manera.

Así que lo que hice para resolver este problema fue lo siguiente:

  1. Desinstalé Office 2010 CTP
  2. Desinstalé Visual Studio .NET 2008 y todos los componentes relacionados
  3. Desinstalé Visual Studio .NET 2010 Beta 1 y todos los componentes relacionados

Y ahora instalé todo el software pero en el siguiente órden:

  1. Office 2010 CTP
  2. Visual Studio .NET 2008
  3. Visual Studio .NET 2008 Service Pack 1
  4. Silverlight 3 SDK
  5. Silverlight 3 Tools para Visual Studio .NET 2008
  6. RIA Services (release de Julio 2009)

Esto resolvió mi problema que tenía con el diseñador de HTML en Visual Studio .NET 2008.  Ahora todos los archivos cargan de manera correcta tanto en la vista de código como en la vista de diseñador.  Esto en cualquier tipo de proyecto (ASP.NET Web Application o Silverlight Application).  Parece ser que instalar antes Office 2010 CTP y después Visual Studio .NET 2008 fue el remedio a este malestar.

Espero que a alguien que se encuentre en la misma situación le sirva esta experiencia.

Salu2!

Problemas en Conexión Local de Silverlight 3 con IE8

Posted on : 16-07-2009 | By : Rodrigo | In : IE8, Silverlight 3, Tips

Tags: , ,

2

Al parecer hay un problema en la versión final de Silverlight 3, cuando utilizamos la funcionalidad de Conexión Local.  El escenario es el siguiente:

En una aplicación en tengo un objeto de tipo LocalMessageSender para el envío de mensajes.  En otra aplicación (en otro proyecto diferente pero dentro de la misma solución) tengo un objeto de tipo LocalMessageReceiver.  Como sabrán ambas clases son el corazón de la funcionalidad de Conexiones Locales en Silverlight 3.  Ahora bien: si ejecutas cada aplicación en diferentes browsers pero del mismo tipo (ejemplo: IE-IE, FF-FF, Chrome-Chrome), funciona como debe ser, es decir, el mensaje es enviado del Sender al Receiver. 

El problema está cuando una de las dos aplicaciones la estás ejecutando en IE8 y la otra en otro tipo de navegador diferentes (FireFox o Chrome).  Parece ser que fuera-de-la-caja IE8 no permite tener una Conexión Local con otro tipo de navegador.  No obstante si haces la prueba entre FF-Chrome o Chrome-FF la Conexión Local de Silverlight 3 funciona a la perfección.

Este detalle lo encontré el día de hoy al impartir un Web Cast acerca de Silverlight 3 y aún no encuentro la solución al mismo.  Quiero pensar que es algún parámetro de configuración que me haga falta en IE8…

Tengo: Windows 7 64 bit, Visual Studio .NET 2008 c/SP1, SL3, SL3 Tools, IE8, Office 2010 CTP.

Les seguiré informando.

Instalación de Silverlight 3 RTW

Posted on : 09-07-2009 | By : Rodrigo | In : Silverlight 3, Tips

Tags:

0

Hoy 09 de Julio 2009 ha sido liberada la versión final de Silverlight 3 RTW (RTW = Retail To Web).

Si son desarrolladores de esta tecnología y anteriormente ya tenían instalada la versión Beta 1 con las herramientas de Visual Studio, este artículo les servirá como guía de instalación de los nuevos componentes.

Desinstalación de componentes anteriores

Lo primero que necesitamos hacer es desinstalar los componentes y runtimes antiguos que tengamos instalados en nuestros equipos.  La siguiente figura muestra los componentes –en mi equipo- que tuve que desinstalar:

Instalación de las nuevas versiones

Descarguen e instalen los siguientes componentes, les recomiendo que inicien con el SDK:

  1. Silverlight 3 SDK
  2. Silverlight 3 Runtime
  3. Silverlight 3 Tools for Visual Studio .NET 2008
  4. Expression Blend 3 RC with SketchFlow RC

Listo!

La versión de Silverlight 3 final es: 3.0.40624.0

Salu2!

Subiendo archivos al servidor en aplicaciones Silverlight

Posted on : 28-06-2009 | By : Rodrigo | In : Silverlight, Silverlight 3, Tips

2

Introducción

Es muy común que para nuestras aplicaciones Web necesitemos ofrecer a los usuarios la capacidad de subir archivos al servidor por diversas razones: para su posterior procesamiento, respaldo de información, etc.  En este artículo veremos cómo en Silverlight esta tarea es sencilla por medio de la clase WebClient.

WebClient.OpenWriteAsync()

La clase WebClient permite una comunicación asíncrona entre el aplicativo Silverlight y algún endpoint que deseemos leer o escribir.  Es precisamente por medio de su método OpenWriteAsync por el cual podemos establecer un Stream de escritura para poder grabar en el servidor algún archivo que el usuario seleccione en la aplicación por medio de la caja de diálogo OpenFileDialog.  Es de vital importancia el mencionar que Silverlight, al ejecutar bajo un esquema de confianza media (Medium Trust) debido a que corre en un SandBox, no es capaz de acceder el sistema de archivos de la máquina en donde está ejecutando la aplicación, sino solamente a través de la autorización del usuario por medio de la caja de diálogo mencionada.

Bajo estas premisas, desarrollaremos la siguiente solución que demuestra lo siguiente:

  1. El uso de la clase OpenFileDialog para permitir al usuario seleccionar algún archivo que quiera subir al servidor.
  2. El uso de la clase WebClient y su método OpenWriteAsync para poder escribir en un Stream la secuencia de bytes que representen dicho archivo.
  3. La creación de una página .aspx que obtenga el Stream y escriba el archivo en el servidor

La aplicación tendrá la siguiente interfaz de usuario:

<UserControl x:Class="SilverlightApplication4.Page"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="200" Height="100">

    <Grid x:Name="LayoutRoot" Background="Azure">

        <Grid.RowDefinitions>

            <RowDefinition />

            <RowDefinition />

        </Grid.RowDefinitions>

        <Button x:Name="btnUpload" 

                Content="Subir archivo..." 

                Width="100" 

                Height="30"

                HorizontalAlignment="Left"

                Margin="5"

                />

        <TextBlock x:Name="txtFileName" 

                   HorizontalAlignment="Left"

                   Margin="5"

                   Grid.Row="1" />

    </Grid>

</UserControl>

El botón llamado btnUpload tendrá la responsabilidad de mostrar la caja de diálogo OpenFileDialog para que el usuario selecciones un archivo de su sistema de archivos local.  El archivo seleccionado está representado con la propiedad File del objeto OpenFileDialog, y utilizaremos el método OpenRead() para leerlo como un Stream.  Posteriormente guardaremos en una variable llamada bytes la secuencia de bytes del archivo.

El siguiente paso será crear el manejador del evento OpenWriteCompleted, evento que se dispara cuando se haya creado efectivamente el Stream de escritura en el servidor.  Es en este manejador de evento en donde escribiremos la secuencia de bytes del archivo (variable llamada bytes) en el Stream.

Posteriormente ejecutaremos el método OpenWriteAsync() de la clase WebClient, el cual nos permitirá crear un Stream de escritura en el endpoint especificado en el argumento.  En el caso de nuestra aplicación usaremos Upload.aspx, el cual es una página de ASP.NET que además le mandaremos como parámetro el nombre del archivo seleccionado para evitar tener un nombre de archivo ‘hard-coded’.

El siguiente fragmento de codigo muestra esta funcionalidad completa:

btnUpload.Click += (sender, args) =>

    {

 

        OpenFileDialog ofd = new OpenFileDialog();

 

        //Abre la caja de diálogo

        if (ofd.ShowDialog().Value)

        {

            string fileName = ofd.File.Name;

            txtFileName.Text = fileName;

            Stream archivo = ofd.File.OpenRead();

            byte[] bytes = new byte[archivo.Length];

            archivo.Read(bytes, 0, bytes.Length);

 

 

            WebClient client = new WebClient();

            client.WriteStreamClosed += (s, a) =>

            {

                if (a.Error == null)

                {

                    //El archivo fue subido correctamente

                }

            };

 

            client.OpenWriteCompleted += (s, a) =>

            {

                if (a.Error == null)

                {

                    //El Stream ha sido abierto correctamente

                    //Escribe la secuencia de bytes en el Stream abierto

 

                    Stream stream = a.Result;

                    stream.Write(bytes, 0, bytes.Length);

                    stream.Flush();

                    stream.Close();

                }

            };

 

            //Abre un Stream de escritura

            client.OpenWriteAsync(new Uri(string.Format("/Upload.aspx?n={0}", fileName),

                UriKind.RelativeOrAbsolute));

        }

 

    };

Upload.aspx

En este ejemplo estamos usando una página de ASP.NET llamada Upload.aspx, la cual obtiene el Stream que se escribió en el código anteriormente descrito, y que servirá para efectivamente guardar ese Stream como un archivo en el servidor.  El nombre para el archivo es determinado a partir del valor del parámetro n en el querystring.  En el caso de esta solución el archivo se escribirá en el fólder ClientBin en el servidor, aunque podría obviamente ser parametrizable la localización en el servidor (tal vez a través de otro parámetro en el querystring).

El siguiente bloque muestra el código completo de Upload.aspx:

protected void Page_Load(object sender, EventArgs e)

        {

            //Nombre del archivo

            string fileName = string.Empty;

 

            try

            {

 

                if (Request.QueryString["n"] != null)

                    fileName = Request.QueryString["n"];

                else 

                    return;

 

                Stream inputStream = Request.InputStream;

                byte[] bytes = new byte[inputStream.Length];

 

                //Guarda el archivo en el fólder ClientBin

                StreamWriter sw = new StreamWriter(Server.MapPath("/ClientBin/") + fileName);

                BinaryWriter bw = new BinaryWriter(sw.BaseStream);

                inputStream.Read(bytes, 0, bytes.Length);

                bw.Write(bytes);

                bw.Flush();

                bw.Close();

 

            }

            catch (Exception) { throw; }

 

        }

Debemos mencionar que también sería posible reemplazar la página .aspx por una Handler .ashx e implementar en dicho archivo la funcionalidad descrita en el bloque de código anterior, también leyendo el Stream, obteniendo la secuencia de bytes y escribirla en el sistema de archivos.

Finalmente, la siguiente ilustración muestra la aplicación finalizada en donde podemos hacer lo siguiente:

  1. Hacer clic en el botón de Silverlight llamado ‘Subir archivo…’, esto invoca la caja de diálogo de Abrir archivo (Figura 1)
  2. Seleccionar el archivo y seleccionar OK (Figura 2)
  3. Se muestra el archivo seleccionado ya subido al servidor, en el fólder ClientBin el cual en este caso es el Sitio de Origen.

Resumen

Subir archivos al servidor es muy común en las aplicaciones Web y las aplicaciones de tipo RIA no están excluidas de ello.  En este artículo vimos cómo al utilizar las clases WebClient y OpenFileDialog podemos lograr esta funcionalidad en Silverlight y utilizar una página .aspx como puente para lograrlo.

 

Búsquedas con el API de Bing y Silverlight

Posted on : 04-06-2009 | By : Rodrigo | In : Bing, Silverlight, Silverlight 3, Tips

1

 

Introducción

Hace algún tiempo hice un artículo de cómo podemos utilizar el API de Live Search en nuestras aplicaciones de Silverlight.  Este es únicamente una actualización a ese artículo pero ahora utilizando el API de Bing.

Ahora que Bing ha sido liberado al público en general uno de los puntos muy importantes a destacar es la actualización que Microsoft ha hecho del API de búsqueda que podemos incorporar en nuestras aplicaciones.  Aunque la experiencia en el desarrollo con esta nueva API es bastante similar a lo que teníamos con anterioridad en Live Search, es destacable el hecho de que ahora podemos hacer búsquedas en Encarta Instant Answers (Respuestas Instantáneas de Encarta), lo cual nos permite no solamente buscar una cadena en páginas Web, sino también en esta importante y enorme enciclopedia en línea.  Esto lo logramos usando InstantAnswers como parte de la propiedad SourceType[] cuando creamos un Request.

Otro punto novedoso del API es el SourceType de tipo RelatedSearch el cual nos permite hacer búsquedas relacionadas con la búsqueda actual.  Para ver todas las novedades del API de Bing lo puedes hacer en esta página.

InstantAnswers de Encarta con Silverlight

Paso 1

Lo primero que tenemos que hacer al igual que en la versión del API de Live Search es registrarnos en el portal de desarrolladores para obtener un AppID.  El AppID es la puerta que nos permite hacer búsquedas en el motor ya que está ligado a nuestra cuenta de MSN.  Para obtener tu AppID lo puedes hacer aquí.

Paso 2

Ahora que ya tienes tu AppID disponible el siguiente paso será decidir la manera de como nos vamos a comunicar al servicio de búsqueda: a través de JSON, XML o SOAP.  En el caso de este artículo haré la demostración con SOAP debido a que Visual Studio .NET nos ayuda a crear la clase proxy ya que el servicio es autodescriptible, es decir, expone un WSDL que podemos usar para identificar su funcionamiento.

Paso 3

El paso siguiente es crear una nueva aplicación de Silverlight por medio de la plantilla de Visual Studio .NET.  Posteriormente agregamos la referencia al servicio localizado en: http://api.search.live.net/search.wsdl?AppID=TUAPPID (es el mismo Url que el API de Live Search).

Para hacer una búsqueda en Encarta Instant Answers tenemos que especificar el tipo de SourceType en la propiedad Sources cuando creamos el Request.  El siguiente fragmento código muestra un ejemplo de la construcción del Request:

SearchRequest CreateRequest(string query)

{

    SearchRequest request = new SearchRequest();

    request.AppId = "TUAPPID";

    request.Market = "es-MX";

    request.Query = query;

    request.Sources = new SourceType[] { SourceType.InstantAnswer };

 

    return request;

}

Noten cómo en este ejemplo estoy estableciendo la propiedad Market a “es-MX”.  Al especificar esto estoy indicando el idioma y país para la búsqueda.  Si no hacemos esto la búsqueda automáticamente tratará de detectar mi localización geográfica e idioma adecuado basándose en mi dirección de IP y otros parámetros.

Asimismo esto es importante mencionar ya que algunas preguntas abiertas no podrán ser contestadas en esta demostración ya que en su mayoría responde únicamente a preguntas en idioma Inglés.

Finalmente un punto muy importante al obtener las respuestas de Encarta Instant Answers es el hecho de que la propiedad InstantAnswerSpecificData es de tipo string pero está expresada como un documento XML, así que la interpretación de dicha cadena es necesaria.  A continuación se muestra un código de ejemplo de cómo podemos interpretar dicha propiedad para sacar la información necesaria:

void ProcessResponse(InstantAnswerResponse response)

{

    popup.IsOpen = false;

    if (response != null)

    {

        var qry = from r in response.Results

                  where r.InstantAnswerSpecificData != null

                  && r.ContentType.Equals("Encarta.Facts")

                  select new Result() { Title = r.Title, 

                      Url = r.Url, 

                      Data = GetSpecificData(r.InstantAnswerSpecificData),

                      Attribution = r.Attribution,

                      ClickThroughUrl = r.ClickThroughUrl

                  };

 

        Results.DataContext = qry.ToList();

    }

    

}

 

string GetSpecificData(string specificData)

{

    XDocument document = XDocument.Parse(specificData);

    

    string result = document.Descendants(

        XName.Get(

        "{http://schemas.microsoft.com/LiveSearch/2008/04/XML/encarta}Value")).First().Value;

    return result;

}

Bing con Silverlight

Para ver la aplicación en acción lo puedes hacer en esta página (el plugin de Silverlight 3 es requerido):

http://silverlight.services.live.com/invoke/76819/Silverlight%20-%20Bing%20Instant%20Answers/iframe.html