DinnerNow.net – Labs en Codeplex

En CodePlex se publicaron 2 labs que muestran como hacer distintas partes de DinnerNow.net.


 


Developing Dynamic Web Sites with Ajax, WCF and Linq


Developing Vista Sidebar Gadgets


 


Para los que todavia no conocen DinnerNow.net les dejo una descripcion:


 



«DinnerNow.net is a Sample Application that shows how you can develop connected application using several new Microsoft Technologies.

DinnerNow is a ficticious market place where you can order food from different vendors to be delivered at home or office. You can choose the type of food you want (Breakfast, Lunch, Dinner, Meal)

The sample uses most of the lastest Microsoft techologies including: IIS7, ASP.NET AJAX Extensions, LINQ, WCF, WPF, WF, Windows PowerShell, Windows Vista Gadgets, .net Compact Framework and so on.»

patterns & practices: Performance Testing Guidance


 



«The purpose of this project is to build some insightful and practical guidance around doing performance testing and using Visual Studio 2005. It’s a collaborative effort between industry experts, Microsoft ACE, patterns & practices, Premier, and VSTS team members.

Usage Scenarios



  • Improve efficiency and effectiveness of your performance testing
  • Learn expert techniques performance testing
  • Apply expert techniques for performance testing using Visual Studio.NET 2005 «

Pueden verla aca.


Tambien pueden leer el post de J.D. Meier (Program Manager en Patterns & Practices)

.NET Framework 3.0 training kit for WF, WCF and CardSpace

«The .NET Framework 3.0 training kit for WF, WCF, and CardSpace includes a set of hands-on-labs, demos, and presentations. The content was originally designed as part of the Windows Server Ascend training and has been used several times for training classes. Consequently, the content is organized into a four day agenda. You can also browse this content by technology.»

 

Mas informacion y download aca.

How To: Creando Custom Activities en WF

Hola, hoy vamos a ver como crear nuestras propias activities en detalle.

No me voy a detener en como cambiarle el estilo y el diseño a la actividad (ver ActivityDesignerTheme y ActivityDesigner si se quiere profundizar sobre estos temas) ya que Oskar Alvarez escribio un muy buen articulo al respecto.

Empezemos…

Lo primero que vamos a hacer es crear un nuevo proyecto Empty Workflow Project que lo vamos a llamar MyActivities

Una vez creado el proyecto, vamos agregar una activity la cual vamos a llamar EmailActivity.

Inmediatamente vamos a ver nuestra actividad en el diseñador, y ya que estamos le cambiamos la descripcion.

 

Vayamos al codigo a ver que tenemos…

 

public partial class EmailActivity: SequenceActivity

Nuestra clase esta heredando de SequenceActivity, aunque bien podriamos hacer que herede de StateActivity. En nuestro ejemplo solo vamos a hacer que herede de Activity.
(si quieren profundizar mas sobre la jerarquia de clases pueden ver este post de Carlos Segura)

Asi que nuestro codigo y nuestra actividad tendrian que quedar asi:

public partial class EmailActivity: Activity

Perfecto, ya tenemos la primera parte :).

Ahora vamos a definirle una propiedad a nuestra actividad. Esto lo hacemos usando DependencyProperty.

public static DependencyProperty [Dependency Property Name] = DependencyProperty.Register([Property Name], typeof([Property Data Type]), typeof([Activity Class Name])

Vamos a definir nuestra propiedad From:

public static DependencyProperty FromProperty = DependencyProperty.Register("From"
, typeof(string)
                      , typeof(EmailActivity)
                      , new PropertyMetadata("ezequiel@ejemplo.com"
, DependencyPropertyOptions.Metadata
, new ValidationOptionAttribute(ValidationOption.Required)));

Si vemos la definicion que puse arriba, vamos a ver que aparece un parametro nuevo que es PropertyMetadata. Este parametro lo puse porque nuestra propiedad From va a hacer obligatoria, entonces esta propiedad nos sirve para poner un valor default como para ejemplificar cual seria un valor valido.

ValidationOptionAttribute es el atributo que nos va permitir indicarle a nuestra actividad que esta propiedad tiene que ser validada en tiempo de compilacion.

Creemos el get/set:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Browsable(true)]
[Description("The Sender's Address of the Email")]
public string From
{
    get { return (string)base.GetValue(EmailActivity.FromProperty); }
    set { base.SetValue(EmailActivity.FromProperty, value); }
}

Decore nuestra propiedad con una serie de atributos, de los cuales destaque Description, que ya se imaginan que es.

Bien, avanzamos creo yo :). Si compilamos no tendria que haber ningun problema.

Claro, ninguno a la vista :). Es que si ahora usaramos esta actividad en algun workflow, no haria nada!, pero nada de nada!! Tanto trabajo para que?!?!. Yo me voy a dormir…

No desesperen, sigamos al proximo paso…

Vamos a hacer un override del metodo Execute: 

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
    Console.WriteLine(this.From);
 
    return ActivityExecutionStatus.Closed;
}

Solo le puse que imprima en consola el valor de From para probar si esta funcionando como es esperado.

Asi que vamos a crear rapidamente un proyecto Sequential Workflow Console Application llamado WorkflowConsoleEjercicio.

Seguramente en la toolbox les va a aparecer la actividad EmailActivity, en caso de que no sea asi (o en caso de que quieran agregar esta actividad a algun otro proyecto, sin tener que incorporar el proyecto de la actividad) pueden recurrir al Choose Items de la ToolBox y buscar la dll donde tienen sus activities:

Si agregamos nuestra actividad al diseñador y la seleccionamos, podemos ver las propiedades de la misma:

 

Si ejecutamos el workflow…

(Pongan un Console.ReadLine() en Program.cs asi pueden ver la consola)

 

 

 

 

 

Cambiemos el email en las propiedades por ezequiel@geeks.ms a ver que pasa….

 

 

Como era de esperarse, aparecio :).

Por ultimo veamos que pasa si borramos lo escrito en From:

Perfecto!, el workflow nos esta avisando que no le dimos valor a una propiedad obligatoria.

Bueno, espero que esta introduccion les haya servido, espero sus comentarios y si les interesa podemos seguir sobre este ejemplo y agregar a nuestra actividad por ejemplo una Validator class (una clase que herede de ActivityValidator), hacer que reciba parametros, que envie el mail realmente….

WPf & WFC & WF – Otro ejemplo de SUDOKU

Les dejo otro ejemplo que publico Ashish Shetty.

This sample shows how you can use the Windows Communication Foundation, the Windows Workflow Foundation and the Windows Presentation Foundation to build a P2P version of Sudoku, the popular number logic game. WCF enables the P2P feature of the game, WF drives the game generation logic and WPF provides the stunning user experience. Both an installed and a Web-based (XBAP) version of this game are provided.

Download