lunes, 17 de enero de 2011

Transición de imagenes con silverlight 4.0

EL año pasado para ser más exactos a fines del mes de diciembre me encargaron hacer una postal con fondo de nieve y animación de imágenes en silverlight 4.0 y como aún no conocia las bondades del objeto DoubleAnimation pense en usar un objeto Timer... pero después me dí cuenta que no era una excelente idea, aquí les paso el siguiente ejemplo: http://cid-f11a91861874c761.office.live.com/self.aspx/.Public/SilverlightApplication2.rar

XAML

<UserControl x:Class="SilverlightApplication2.MainPage"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Width="700" Height="540" Background="{x:Null}" xmlns:FallingSnow="clr-namespace:SilverlightApplication2" xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows">

    <Canvas x:Name="LayoutRoot">
        <StackPanel Orientation="Vertical">
            <StackPanel.Resources>
                <Storyboard x:Name="FadeIn" BeginTime="0" Completed="FadeIn_Completed">
                    <DoubleAnimation Storyboard.TargetName="image1" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:0" />
                    <DoubleAnimation Storyboard.TargetName="image2" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:2" />
                    <DoubleAnimation Storyboard.TargetName="image3" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:4" />
                    <DoubleAnimation Storyboard.TargetName="image4" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:6" />

                    <DoubleAnimation Storyboard.TargetName="image5" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:8" />
                    <DoubleAnimation Storyboard.TargetName="image6" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:10" />

                    <DoubleAnimation Storyboard.TargetName="image7" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:8" />
                    <DoubleAnimation Storyboard.TargetName="image8" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:10" />

                    <DoubleAnimation Storyboard.TargetName="image9" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:12" />
                   
                    <DoubleAnimation Storyboard.TargetName="image10" Completed="FadeIn_Completed" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:14" />
                    <DoubleAnimation Storyboard.TargetName="image11" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:16" />
                    <DoubleAnimation Storyboard.TargetName="image10_1" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:18" />
                    <DoubleAnimation Storyboard.TargetName="image11_1" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:20" />
                    <DoubleAnimation Storyboard.TargetName="image10_2" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:22" />
                    <DoubleAnimation Storyboard.TargetName="image11_2" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:24" />

                    <DoubleAnimation Storyboard.TargetName="image12" Storyboard.TargetProperty="Opacity" From="0.0" To="2.0" Duration="0:0:1.5" BeginTime="0:0:26" />

                </Storyboard>
            </StackPanel.Resources>
        </StackPanel>
        <Image x:Name="image1"  Source="/SilverlightApplication2;component/imagenes/postal1.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image2" Source="/SilverlightApplication2;component/imagenes/postal2.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />      
        <Image x:Name="image3" Source="/SilverlightApplication2;component/imagenes/postal3.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image4" Source="/SilverlightApplication2;component/imagenes/postal4.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image5" Source="/SilverlightApplication2;component/imagenes/postal5.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image6" Source="/SilverlightApplication2;component/imagenes/postal6.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image7" Source="/SilverlightApplication2;component/imagenes/postal7.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image8" Source="/SilverlightApplication2;component/imagenes/postal8.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image9" Source="/SilverlightApplication2;component/imagenes/postal9.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image10" Source="/SilverlightApplication2;component/imagenes/postal10.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image11" Source="/SilverlightApplication2;component/imagenes/postal11.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image10_1" Source="/SilverlightApplication2;component/imagenes/postal10.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image11_1" Source="/SilverlightApplication2;component/imagenes/postal11.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image10_2" Source="/SilverlightApplication2;component/imagenes/postal10.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image11_2" Source="/SilverlightApplication2;component/imagenes/postal11.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />
        <Image x:Name="image12" Source="/SilverlightApplication2;component/imagenes/postal12.jpg"  Opacity="0" Canvas.Left="0" Canvas.Top="0" />



      


        <HyperlinkButton  Canvas.Left="80" Canvas.Top="372" Height="58" Name="hyperlinkButton1" TargetName="_blank"  NavigateUri="http://www.comunidadesmicrosoft.org" Width="177" />
        <HyperlinkButton  Canvas.Left="394" Canvas.Top="372" Height="58" Name="hyperlinkButton2" TargetName="_blank" NavigateUri="http://msdn.microsoft.com" Width="232" />
        <HyperlinkButton  Canvas.Left="44" Canvas.Top="451" Height="58" Name="hyperlinkButton3" TargetName="_blank" NavigateUri="http://technet.microsoft.com" Width="232" />
        <HyperlinkButton  Canvas.Left="295" Canvas.Top="451" Height="58" Name="hyperlinkButton4" TargetName="_blank" NavigateUri="http://www.ustream.tv/channel/microsoft-cafe" Width="190" />
        <HyperlinkButton  Canvas.Left="498" Canvas.Top="451" Height="58" Name="hyperlinkButton5"  NavigateUri="http://www.microsoft.com/peru" Width="190" />

    </Canvas>
  
</UserControl>
CODE



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 SilverlightApplication2.Efectos;
using System.Windows.Media.Imaging;

namespace SilverlightApplication2
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            PopulateSnowFlakes();
        }

        System.Windows.Threading.DispatcherTimer myDispatcherTimer = new System.Windows.Threading.DispatcherTimer();
        static private Random randomNumber = new Random();
        private void PopulateSnowFlakes()
        {
           /* for (int i = 0; i < 200; i++)
            {
                SnowFlake snowFlake = new SnowFlake();

                // 500 and 300 is the width/height of the application
                snowFlake.SetInitialProperties(500, 300);
                LayoutRoot.Children.Add(snowFlake);

                SnowFlakeX snowFlakeX = new SnowFlakeX();

                // 500 and 300 is the width/height of the application
                snowFlakeX.SetInitialProperties(500, 300);
                LayoutRoot.Children.Add(snowFlakeX);
            }*/

            hyperlinkButton1.Visibility = Visibility.Collapsed;
            hyperlinkButton2.Visibility = Visibility.Collapsed;
            hyperlinkButton3.Visibility = Visibility.Collapsed;
            hyperlinkButton4.Visibility = Visibility.Collapsed;
            hyperlinkButton5.Visibility = Visibility.Collapsed;
            FadeIn.Begin();
            /*myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 2000); // 100 Milliseconds
            myDispatcherTimer.Tick += new EventHandler(Each_Tick);
            myDispatcherTimer.Start();*/
          
        }
        static int i = 2;
        int intentos = 0;
        public void Each_Tick(object o, EventArgs sender)
        {
           /* string ruta_logo = String.Format("Imagenes/postal{0}.jpg", i.ToString());
            Foto.Source = new BitmapImage(new Uri(ruta_logo, UriKind.RelativeOrAbsolute));


            if (i == 11 && intentos <= 3)
            {
                ruta_logo = String.Format("Imagenes/postal{0}.jpg", i.ToString());
                Foto.Source = new BitmapImage(new Uri(ruta_logo, UriKind.RelativeOrAbsolute));
                for (int c = 0; c < 200; c++)
                {
                    SnowFlake snowFlake = new SnowFlake();

                    // 500 and 300 is the width/height of the application
                    snowFlake.SetInitialProperties(700, 540);
                    LayoutRoot.Children.Add(snowFlake);
                }
                myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1000);
                i -= 2;
                intentos++;

            }
            if (i == 12)
            {
                hyperlinkButton1.Visibility = Visibility.Visible;
                hyperlinkButton2.Visibility = Visibility.Visible;
                hyperlinkButton3.Visibility = Visibility.Visible;
                hyperlinkButton4.Visibility = Visibility.Visible;
                hyperlinkButton5.Visibility = Visibility.Visible;
                i = 1;
                myDispatcherTimer.Stop();
            }
            i++;*/
        }

        private void FadeIn_Completed(object sender, EventArgs e)
        {
            hyperlinkButton1.Visibility = Visibility.Visible;
            hyperlinkButton2.Visibility = Visibility.Visible;
            hyperlinkButton3.Visibility = Visibility.Visible;
            hyperlinkButton4.Visibility = Visibility.Visible;
            hyperlinkButton5.Visibility = Visibility.Visible;
            for (int c = 0; c < 200; c++)
            {
                SnowFlake snowFlake = new SnowFlake();

                // 500 and 300 is the width/height of the application
                snowFlake.SetInitialProperties(700, 540);
                LayoutRoot.Children.Add(snowFlake);
            }
        }
      
    }
}

domingo, 9 de enero de 2011

Consumiendo un servicio WCF de tipo netTcpBinding

Como primer post comentare acerca de  cómo consumir un servicio WCF desde un Console Application, les comentare que no fue nada fácil hacerlo ya que una conexión vía tcp requiere de unas pequeñas secciones de configuración en el .config de la aplicación pero después de muchos intentos ante la computadora y de cierta información encontrada en "san google" acá les doy unos tips, lo primero que vamos hacer es crear una Biblioteca de clases en C# llamado WCFBusiness con una clase "Business" de tipo entidad, una interface "IBusiness" y una implementación de la  interface "IBusiness" llamado  "BusinessProcess"
.

 el proyecto debe de hacer referencia a System.ServiceModel 4.0





Luego vamos a crear un proyecto web llamado WCF dentro del sitio Localhost. Posteriormente eliminaremos el appCode y cambiaremos la referencia del archivo Service.svc

en el archivo Service.svc ingresamos el siguiente código para hacer referencia a nuestro proyecto WCFBusiness.

<%@ ServiceHost Language="C#" Debug="true" Service="WCFBusiness.BusinessProcess"  %>

Luego ejecutamos el ya conocido editor de configuración de servicios WCF  o sino ingresamos el siguiente código en el app.config  (más simple no puede ser)

<configuration>
  <system.web>
    <compilation debug="false" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="MyBehavior" name="WCFBusiness.BusinessProcess">
        <clear />
        <endpoint binding="netTcpBinding" bindingConfiguration="portSharingBinding"
          name="MyServiceEndpoint" contract="WCFBusiness.IBusiness"
          listenUriMode="Explicit">
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" name="MyServiceMexTcpBidingEndpoint"
        contract="IMetadataExchange" listenUriMode="Explicit">
        </endpoint>       
        <host>
          <baseAddresses>    
            <add baseAddress="net.tcp://localhost:808/WCF/Service.svc" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name="portSharingBinding" portSharingEnabled="true" maxReceivedMessageSize="512000">
          <readerQuotas maxNameTableCharCount="163840" />
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Ahora tenemos que configurar net.tcp en nuestro sitio web.  Para configurar hay que hacer los siguientes pasos:

1) Abrir IIS 7.0 (inetmgr)
2) En la sección enlaces agregar un enlace de tipo net.tcp y en la información del enlace agregar el puerto correspondiente 808:*
3) en la sección de la configuración avanzada editar el protocolo habilitado http: por http,net.tcp
4) reiniciar IIS.

Visualizamos nuestro servicio:

Ahora para probar nuestro wcf vía tcp a través de un console application debemos de ir a otra máquina y hacer referencia a nuestro servicio (no sé por qué no se puede ejecutar desde mi propia máquina... les debo está explicación para un próximo post),

Vamos a crear un console application que haga referencia a nuestro WCF para ello usaremos la consola de visual studio 2010 "VC" y crearemos nuestro appconfig con la siguiente sentencia

svcutil.exe net.tcp://PC-SERVIDOR/WCF/Service.svc
 
esto nos generara la clase  BusinessProcess.cs y el AppConfig dentro del directorio 
C:\Program Files\Microsoft Visual Studio 10.0\VC\

Luego lo copiamos a nuestro proyecto y en el archivo Program.cs, ingresamos el siguiente código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WCFBusiness;
namespace ConsoleBusiness
{
    class Program
    {
        static void Main(string[] args)
        {
            using (BusinessClient Client = new BusinessClient())
            {
                Client.Open();
                Business obj_Bussines = new Business();
                obj_Bussines.Apellidos  ="Ruiz Bautista";
                obj_Bussines.Nombres = "Christian Angel";

                Console.WriteLine(Client.Datos(obj_Bussines));
                Client.Close();
                Console.ReadLine();
            }
        }
    }
}



y eso es todo... simple y sencillo xD