martes, 2 de diciembre de 2008

Consumiendo un WCF Service desde Silverlight

El día de hoy hablaré de como consumir un WCF Service. E intentare resolver todos y cada uno de los errores que suelen ocurrir al momento de desarrollar el ejemplo que propongo.

Aunque pareciera algo trivial este ejemplo, lo cierto es que no todo es como se ve en los webcast, libros y conferencias. A veces surgen errores que no son comunes pero nos quitan mucho tiempo al momento de toparnos con ellos.


El ejemplo que propongo hoy, se trata de una simple calculadora que recibe un número y calcula su cuadrado, es decir X2.


Primero que nada, creamos el proyecto Silverlight que será el cliente del WCF service, junto con la pagina de prueba que utilizaremos para invocar el archivo .xap generado por el proyecto de Silverlight.
clip_image002
clip_image004
Agregamos un poco de código, cabe mencionar que pueden descargar el código de aquí.
clip_image006
Y ahora ejecutamos nuestra página de prueba que invoca el objeto Silverlight que acabamos de crear. Y entonces encontramos el primer problema a resolver:
clip_image008
Para fines de desarrollo este problema es de muy fácil resolución. Basta con que se cambie la propiedad “Copy Local” del ensamblado System.Web.Silverlight a “True”
clip_image010
clip_image012
Ahora Escribimos el código correspondiente al WCF Service
clip_image014
Una vez que el servicio está listo para ser ejecutado, debemos detenernos a revisar algunas implicaciones propias de trabajar con Silverlight.

1. Se debe cambiar el tipo de Binding que utiliza el servicio porque Silverlight no soporta el tipo de binding wsHttpBinding, el tipo de binding por defecto, por lo que debe ser cambiado por basicHttpBinding.

clip_image016
2. Cuando trabajamos con WCF Services y Silverlight, las llamadas siempre son usando el modelo asíncrono.
clip_image018
Una vez que tenemos presente estas importantes consideraciones, agregamos la referencia a nuestro servicio, desde el proyecto Silverlight
clip_image020
Agregamos el código necesario para llamar al servicio en el momento que el usuario quiera calcular el cuadrado de un número x. Compilamos y ejecutamos nuestra aplicación ASP.NET demo.
clip_image022
De nuevo nos encontramos con un error en el momento de realizar la solicitud al servicio.
Soporte para peticiones “Cross Domain”
Este es el momento para hablar acerca de dos archivos que debemos conocer para desarrollar con estas tecnologías.


CrossDomain.xml

Este archivo debe estar en el directorio raíz de donde se hostea nuestra aplicación, en este caso, nuestra aplicación aun no está instalada en ningún servidor web, así que basta con que sea agregado en la carpeta en que se encuentra nuestro servicio
La sintaxis de este archivo, básicamente indica los dominios desde los cuales se pueden realizar peticiones hacia nuestra página, en este caso el WCF Service.


<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
 <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>


clip_image024
Sin embargo este archivo es viejo, desde los primeros días de Macromedia Flash, tal vez el porqué de que no sea totalmente soportado por Silverlight cuando se quiere hacer uso más a detalle del mismo, puesto que no cubre todos los escenarios. En su lugar Microsoft propone el siguiente archivo, que es de uso mas amplio.

ClientAccessPolicy.xml

Si lo que queremos es un control mas fino de cada uno de los detalles del acceso “Cross Domain” deberíamos usar el archivo ClientAccessPolicy.xml, tiene una estructura semejante al anterior pero con un mayor espectro de escenarios cubiertos.

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
 <cross-domain-access>
  <policy>
   <allow-from>
    <domain uri="*"/>
   </allow-from>
   <grant-to>
    <resource path="/" include-subpaths="true"/>
   </grant-to>
  </policy>
 </cross-domain-access>
</access-policy>

Por último tenemos el código completo para llamar a nuestro servicio.

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Net;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Documents;
 using System.Windows.Input;
 using System.Windows.Media;
 using System.Windows.Media.Animation;
 using System.Windows.Shapes;
 using System.Globalization;

 namespace SilverlightApplicationDemo
 {
     public partial class Page : UserControl
     {
         public Page()
         {
             InitializeComponent();
         }

         private void CallService(double number)
         {
             CalculatorProxy.CalculatorClient client = new SilverlightApplicationDemo.CalculatorProxy.CalculatorClient();
             client.SquareCompleted += new EventHandler<SilverlightApplicationDemo.CalculatorProxy.SquareCompletedEventArgs>(client_SquareCompleted);
             client.SquareAsync(number);
         }

         void client_SquareCompleted(object sender, SilverlightApplicationDemo.CalculatorProxy.SquareCompletedEventArgs e)
         {
             if (e.Error != null)
             {
                 MessageBox.Show('El servicio devolvio un error');
                 return;
             }
             txtResult.Text = e.Result.ToString(CultureInfo.CurrentUICulture);
         }

         private void Button_Click(object sender, RoutedEventArgs e)
         {
             double number = 0;
             if (Double.TryParse(txtNumber.Text, out number) == false)
             {
                 MessageBox.Show('Esto no es un número');
                 return;
             }
             CallService(number);
         }
     }
 }
Espero que este post les sea de utilidad y que les ahorre tiempo en sus futuros desarrollos.


Happy Coding!

viernes, 21 de noviembre de 2008

Silverlight 3

No hace mucho que Microsoft libero la version 2.0 de Silverlight (como comentamos anteriormente en este blog), y casi a la par, el sr. Scott Guthrie, quien es nada mas y nada menos que el Vicepresidente de la division de desarrollo de Microsoft, anunció que se espera que alrededor del tercer cuarto del 2009 sea liberado la versión 3 de Silverlight, que vendría traer a los desarrolladores nuevas caracteristicas como: Mejor rendimiento en cuanto a multimedia se refiere, incluyendo soporte para h.264, mejores caracteristicas en gráficos, soporte para 3D y aceleración por medio de la GPU, soporte para databinding, y nuevos controles!
Y por supuesto, las siguientes versiones de Visual Studio y Visual Web Developer, tendran soporte completo para Silverlight y nuevas herramientas para hacer DataBinding.

La batalla por este sector del mercado entre Flash y Silverlight se esta poniendo muy interesante, en mi opinión personal, hace tiempo que Adobe se dio cuenta que Flash no tenia mucho tiempo de vida, ese es el porque de su apuesta por otras tecnologias como AIR, a.k.a. Apollo.

De entre los anuncios que hubo en el pasado PDC 2008 (que fueron muchos), el no menospreciable periodico NYT, reporto los siguiente:
"A Microsoft official cited on Tuesday improvements planned for the company's Silverlight platform for rich Internet applications, including intentions to run Silverlight applications outside of a browser."

Acaso esto será la competencia directa de Apollo???, pues si es cierto!. Microsoft tiene grandes planes para Silverlight en el futuro próximo, y nosotros como desarrolladores no debemos perder de vista el rumbo que vayan tomando los nuevos releases de Silverlight y todo el espectro de projectos que se estan armando a su alrededor.

No dejen de visitar:

Happy Coding!

lunes, 3 de noviembre de 2008

C# 4.0.

Todavia algunos de nosotros no terminamos de asimlar todas las caracteristicas que nos brinda el framework 3.5, cuando de pronto se anuncia ya un pre CTP (porque eso es) de lo que será Visual Studio 2010, y por ende C# 4.0. El futuro de C#, asi lo han nombrado desde su lanzamiento, el famoso arquitecto de Microsoft, Adrew Hejlsberg, así lo presento en su conferencia en el pasado PDC 2008.

Sin duda esta nueva version de C# traerá novedades revolucionarias dentro del mundo de los lenguajes de programación (por lo menos de los convencionales). Caracteristicas como los parametros opcionales eran envidiadas a los programadores de VB NET y C++ (no por mi). El tipo dynamic, dará para muchos post en el futuro, la covarianza y contravarianza y el tan nombrado ahora DLR por el momento solo queda ver webcast tales como el que ofrecen estos program managers en channel 9 ó esta reunion del equipo de diseño de Andrew. Y claro, descargar VS 2010

Un futuro que en este momento en el que escribo no se de que tipo es, solo se que es dynamic.

Happy Coding!!

martes, 28 de octubre de 2008

Silverlight Tools RTW

Ya estan disponibles para su descarga la version final de Microsoft® Silverlight™ Tools for Visual Studio 2008 SP1. Claro que para esto tendrán que primero cumplir con los prerequisitos, que son:

1.- Actualizar su version de VS 2008 por VS 2008 sp 1.
2.- Actualizar su version de Expressions Blend a la Version sp 1

Algunas de las caracteristicas incluidas en este toolkit son:

  1. Visual Basic and C# Project templates
  2. Intellisense and code generators for XAML
  3. XAML design preview
  4. Debugging of Silverlight applications
  5. Remote debugging of Silverlight applications for Mac
  6. Web reference support
  7. WCF Templates
  8. Team Build and command line build support
  9. Integration with Expression Blend
La verdad es que yo tengo grandes espectativas en este release, y en los proximos dias estare utilizando para desarrollo de webparts de SharePoint, veremos que nuevas sorpresas nos traen los chicos de Redmond.
Happy coding!!

viernes, 17 de octubre de 2008

Google Chrome


Mucho se ha dicho que si chrome de google es mejor que firefox, opera, ie, etc. Discusiones y pleitos ha ocasionado a mas de uno este tema, yo me incluyo.

Yo en lo personal lo he usado poco, puesto que hay caracteristicas no soportadas como Silverlight, que yo uso. Asi que en este post no intentare decir cual es el mejor desde mi punto de vista, lo unico que quiero decir es que los creadores de google chrome usaron librerías de Microsoft. No que son un basura??? (Lease con sarcasmo) y para desarrollar utilizaron Visual Studio(o como yo le llamo, el todopoderoso) .

Asi que una vez más, queda demostrado quien es el mejor, por si habia dudas.
Happy coding!!




viernes, 10 de octubre de 2008

Descarga completa de Visual Studio 2008 sp 1

Hoy por la mañana me encontraba instalando por tercera vez el service pack 1 para visual studio 2008, ya que es un prerequisito para instalar Microsoft Silverlight Tools Beta 2 para Visual Studio 2008, esto porque trabajo con 2 maquinas virtuales.

Desde internet solo bajas un archivo de 535 KB aproximadamente, pero este no es en si el sp 1, es solo un instalador, todo lo demas debe ser descargado de la red cada vez que deseas intalar el sp1(hasta ahora). Asi que me di a la tarea de buscar una solución a tan fastidiosa tarea y me encontre con algunas paginas que explican como hacer para, por linea de comandos, descargar todos los paquetes del sp1 y despues como crear tu propio paquete instalable para hacerlo redistribuible.

Aqui les dejo el link principal. Espero que les ahorre tiempo en el futuro .

pd: Despues de que termine la descarga del sp 1, en la carpeta habrá un archivo llamado "Archivo Léame de Visual Studio 2008 Service Pack 1", ahi tambien hay instrucciones de como realizar el deployment del sp 1 en toda tu red.

Link

http://download.microsoft.com/download/8/F/D/8FD2A9F0-C3D4-4B0A-80AF-88D738DCDDF4/VSReadme.htm

Happy Coding!

Bienvenidos

Hola a todos, ya tenia tiempo queriendo empezar un blog y hoy que extrañamente he llegado temprano a la oficina me he decidido, armado de valor y helo aqui.

Bueno, espero que este espacio sea de utilidad como tantos otros lo han sido para mi a lo largo de mi carrera profesional.

Cheers!!!

Etiquetas

SharePoint 2010 (38) Microsoft (32) Desarrollo SharePoint (31) Gerardo Reyes Ortiz (27) SharePoint (20) SharePoint 2013 (18) Errores SharePoint (12) México (10) PowerShell (9) Silverlight (8) Visio Services (7) Features (6) MVP (6) Silverlight 3 (6) WebCast (6) Workflows (6) Configuracion SharePoint 2010 (5) D.F. (5) API REST (4) Configuracion SharePoint 2010; (4) Troubleshooting (4) Visual Studio 2010 (4) Visual studio (4) WSS (4) Web parts (4) Apps (3) Comunidad SharePoint (3) Configuración SharePoint 2013 (3) ODATA (3) SharePoint Server (3) SharePoint; Instalación SharePoint; Troubleshooting; Search Service (3) Silverlight 3.0 (3) Silverlight Toolkit (3) WebParts (3) javascript (3) jquery (3) Eventos SharePoint (2) Office 2010 (2) PeoplePicker (2) REST (2) SQL Server (2) Scripting (2) Search Service Application (2) SharePoint Designer (2) UPA (2) UPS (2) Workflows SharePoint (2) host header (2) Apps Development (1) Big Bang (1) CAS (1) CSOM (1) Codeplex (1) CompartiMOSS (1) Configuracion SharePoint 2010; Errores SharePoint (1) Configuracion SharePoint 2010; SharePoint 2010 (1) Custom Actions (1) Custom Editor Parts (1) Delegate Controls (1) Deployment (1) DisableLoopbackCheck (1) Document Library (1) Entrevista (1) Examenes de Certificación (1) Extract WSP (1) FBA (1) FS4SP (1) Fakes (1) Fast Search Server 2010 For SharePoint (1) Fiddler (1) HTTP.SYS (1) HTTPS (1) JSON (1) Language Pack's (1) Latam (1) MAXDOP (1) MCSM (1) MSExpertos (1) MVC (1) Microsoft México (1) Microsoft; Codeplex; Screencast; (1) My Sites (1) SQL Server 2012 (1) SQL Server Reporting Services (1) Screencast (1) Screencast; (1) Service Applications (1) Service Pack (1) SharePoint 2007 (1) SharePoint 2010 SP 1 (1) SharePoint API (1) SharePoint Conference (1) SharePoint Emulators (1) SharePoint Farm (1) SharePoint Health Analyzer (1) SharePoint Magazine (1) SharePoint Online (1) SharePoint Search (1) SharePoint Test (1) SharePoint; Desarrollo SharePoint (1) Shims (1) Simposio (1) Simposio Latinoamericano (1) SkyDrive Pro (1) Soporte Microsoft (1) Templates (1) Tip (1) VSeWSS (1) Virtual Machine (1) Visual Studio 2012 (1) WCF (1) WSS; IIS 7 (1) Web API (1) Web Content Management (1) Web Services (1) Windows 8 (1) Windows Live ID (1) Xml (1) appcmd (1) iOS (1) jqGrid (1) onload function (1)