<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Matt W's Windows Workflow Place : Workflow</title><link>http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx</link><description>Tags: Workflow</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Types, Metatypes and Bears, Redux</title><link>http://blogs.msdn.com/mwinkle/archive/2009/10/23/types-metatypes-and-bears-redux.aspx</link><pubDate>Fri, 23 Oct 2009 16:16:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9912121</guid><dc:creator>mwinkle</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/9912121.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=9912121</wfw:commentRss><description>&lt;p&gt;I made a quick &lt;a href="http://blogs.msdn.com/mwinkle/archive/2009/06/10/types-metatypes-and-bears-oh-my.aspx"&gt;post a few months back&lt;/a&gt; where I tried to talk about the way the designer works and lets us design types, as well as simply configure instances of types.&lt;/p&gt;  &lt;p&gt;There were a couple of key points that I wanted to make there in that post:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The workflow designer can configure instances of activity graphs, &lt;em&gt;and&lt;/em&gt; create entire types as well &lt;/li&gt;    &lt;li&gt;Types are designed by editing an instance of a type that represents the type being designed, the metatype &lt;/li&gt;    &lt;li&gt;There is some XAML trickery required to serialize and deserialize this &lt;/li&gt;    &lt;li&gt;This same type of work is done to enable the &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.dynamicactivity%28VS.100%29.aspx"&gt;DynamicActivity&lt;/a&gt; capability &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A few folks have noticed (and sent me mail), that things look a little different in Beta2.&amp;#160; While we are going to have a more thorough, “here’s everything that changed” doc, I want to go ahead and update at least some of the things that I’ve been talking about here.&lt;/p&gt;  &lt;h1&gt;What’s New&lt;/h1&gt;  &lt;p&gt;In reality, very little is new, we’ve primarily moved stuff around now.&amp;#160; One thing that you may remember is that the DesignTimeXamlReader was not public in beta1, and if you are looking around, you may not find it.&amp;#160; We have made this functionality public however.&amp;#160; Thus, see the “what’s changed&amp;quot; bit.&lt;/p&gt;  &lt;h1&gt;What’s Changed&lt;/h1&gt;  &lt;p&gt;We took a long look at things and realized we had a bunch of XAML stuff all over the place.&amp;#160; We felt it would be a good idea to try to consolidate that into one place in WF, so &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices(VS.100).aspx"&gt;System.Activities.XamlIntegration.ActivityXamlServices&lt;/a&gt; becomes your one stop shop for most things Activity and XAML related.&amp;#160; Let’s take a quick look and see what’s in there:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ActivityXamlServices Members&lt;/p&gt;    &lt;p&gt;[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]&lt;/p&gt;    &lt;p&gt;Creates an instance of an activity tree described in XAML.&lt;/p&gt;    &lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices%28VS.100%29.aspx"&gt;ActivityXamlServices&lt;/a&gt; type exposes the following members.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image001%5B4%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001[4]" border="0" alt="clip_image001[4]" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image001%5B4%5D_thumb.gif" width="1" height="1" /&gt;&lt;/a&gt; Methods       &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top"&gt;             &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;             &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image002%5B10%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[10]" border="0" alt="clip_image002[10]" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image002%5B10%5D_thumb.gif" width="16" height="11" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image003%5B10%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003[10]" border="0" alt="clip_image003[10]" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image003%5B10%5D_thumb.gif" width="13" height="10" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.createbuilderreader%28VS.100%29.aspx"&gt;CreateBuilderReader&lt;/a&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;Overloaded. Maps an x:Class activity tree to an &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.activitybuilder%28VS.100%29.aspx"&gt;ActivityBuilder&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/ee149744%28VS.100%29.aspx"&gt;ActivityBuilder&amp;lt;(Of &amp;lt;(TResult&amp;gt;)&amp;gt;)&lt;/a&gt;.&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;             &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image002%5B11%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[11]" border="0" alt="clip_image002[11]" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image002%5B11%5D_thumb.gif" width="16" height="11" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image003%5B11%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003[11]" border="0" alt="clip_image003[11]" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image003%5B11%5D_thumb.gif" width="13" height="10" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.createbuilderwriter%28VS.100%29.aspx"&gt;CreateBuilderWriter&lt;/a&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;Maps an &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.activitybuilder%28VS.100%29.aspx"&gt;ActivityBuilder&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/ee149744%28VS.100%29.aspx"&gt;ActivityBuilder&amp;lt;(Of &amp;lt;(TResult&amp;gt;)&amp;gt;)&lt;/a&gt; from the specified writer to an x:Class activity tree.&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;             &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image002%5B12%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[12]" border="0" alt="clip_image002[12]" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image002%5B12%5D_thumb.gif" width="16" height="11" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image003%5B12%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003[12]" border="0" alt="clip_image003[12]" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image003%5B12%5D_thumb.gif" width="13" height="10" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.createreader%28VS.100%29.aspx"&gt;CreateReader&lt;/a&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;Overloaded. Maps an x:Class activity tree to an &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.dynamicactivity%28VS.100%29.aspx"&gt;DynamicActivity&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/dd465645%28VS.100%29.aspx"&gt;DynamicActivity&amp;lt;(Of &amp;lt;(TResult&amp;gt;)&amp;gt;)&lt;/a&gt;.&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;             &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image002%5B13%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[13]" border="0" alt="clip_image002[13]" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image002%5B13%5D_thumb.gif" width="16" height="11" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image003%5B13%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003[13]" border="0" alt="clip_image003[13]" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/TypesMetatypesandBearsRedux_13C27/clip_image003%5B13%5D_thumb.gif" width="13" height="10" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.load%28VS.100%29.aspx"&gt;Load&lt;/a&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td valign="top"&gt;             &lt;p&gt;Overloaded. Creates an instance of a declarative workflow.&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/p&gt;    &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices_members%28VS.100%29.aspx#mainBody"&gt;Top&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.load%28VS.100%29.aspx"&gt;Load&lt;/a&gt; is used to generally take some XAML and return an Activity which you can then use to execute.&amp;#160; If Load encounters a XAML stream for &amp;lt;Activity x:Class, it will subsequently generate a DynamicActivity.&amp;#160; This functions basically the same way WorkflowXamlServices.Load() did in beta1.&amp;#160; &lt;/p&gt;  &lt;p&gt;You also see &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.createbuilderreader(VS.100).aspx"&gt;CreateBuilderReader&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.createbuilderwriter(VS.100).aspx"&gt;CreateBuilderWriter&lt;/a&gt;, which are used to surface the DesignTimeXaml capabilities that we used in beta1.&amp;#160; These will return an instance of a XamlReader/Writer that handles the transformation between the metatype and the &amp;lt;Activity x:Class XAML.&amp;#160;&amp;#160; The metatype has changed names from ActivitySchemaType to &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.createbuilderreader(VS.100).aspx"&gt;ActivityBuilder&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The table below should help summarize the uses and changes between beta1 and beta2.&amp;#160; In this area, I don’t expect any changes between what you see now, and what you will see in RTM.&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="491"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="133"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Task&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="178"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Beta1&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="178"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Beta2&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;metatype (type to build types)&lt;/td&gt;        &lt;td valign="top" width="178"&gt;ActivitySchemaType&lt;/td&gt;        &lt;td valign="top" width="178"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.activitybuilder%28VS.100%29.aspx"&gt;ActivityBuilder&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Mechanism to load DynamicActivity&lt;/td&gt;        &lt;td valign="top" width="178"&gt;WorkflowXamlServices.Load()&lt;/td&gt;        &lt;td valign="top" width="178"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.load%28VS.100%29.aspx"&gt;ActivityXamlServices.Load()&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Mechanism to load ActivityBuilder&lt;/td&gt;        &lt;td valign="top" width="178"&gt;use WorkflowDesigner.Load() to get an ActivitySchemaType&lt;/td&gt;        &lt;td valign="top" width="178"&gt;Use the reader from &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.xamlintegration.activityxamlservices.createbuilderreader%28VS.100%29.aspx"&gt;CreateBuilderReader()&lt;/a&gt; to pass into &lt;a href="http://msdn.microsoft.com/en-us/library/system.xaml.xamlservices.load(VS.100).aspx"&gt;XamlServices.Load()&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Mechanism to save ActivityBuilder to XAML&lt;/td&gt;        &lt;td valign="top" width="178"&gt;Create a new DesignTimeXamlWriter, pass that to XamlServices.Save()&lt;/td&gt;        &lt;td valign="top" width="178"&gt;Use the writer returned from CreateBuilderWriter() to pass into &lt;a href="http://msdn.microsoft.com/en-us/library/system.xaml.xamlservices.save(VS.100).aspx"&gt;XamlServices.Save()&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="178"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="178"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;To explore this, use CreateBuilderReader() and XamlServices.Load() on a workflow that you’ve built in the designer and poke around a bit to see what’s going on. &lt;/p&gt;  &lt;p&gt;Here is some sample code that walks through this:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;ActivityBuilder ab1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; ActivityBuilder();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;ab1.Name = &lt;span class="str"&gt;&amp;quot;helloWorld.Foo&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;ab1.Properties.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DynamicActivityProperty { Name = &lt;span class="str"&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;, Type = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(InArgument&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;) });&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;ab1.Properties.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DynamicActivityProperty { Name = &lt;span class="str"&gt;&amp;quot;input2&amp;quot;&lt;/span&gt;, Type = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(InArgument&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;) });&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;ab1.Properties.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DynamicActivityProperty { Name = &lt;span class="str"&gt;&amp;quot;output&amp;quot;&lt;/span&gt;, Type = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(OutArgument&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;) });&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;ab1.Implementation = &lt;span class="kwrd"&gt;new&lt;/span&gt; Sequence&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    Activities =&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; WriteLine { Text = &lt;span class="str"&gt;&amp;quot;Getting Started &amp;quot;&lt;/span&gt; },&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; Delay { Duration = TimeSpan.FromSeconds(4) },&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; WriteLine { Text = &lt;span class="kwrd"&gt;new&lt;/span&gt; VisualBasicValue&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; { ExpressionText= &lt;span class="str"&gt;&amp;quot;input1 + input2&amp;quot;&lt;/span&gt; }},&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; Assign&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; { To = &lt;span class="kwrd"&gt;new&lt;/span&gt; VisualBasicReference&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; { ExpressionText = &lt;span class="str"&gt;&amp;quot;output&amp;quot;&lt;/span&gt; },&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                     Value = &lt;span class="kwrd"&gt;new&lt;/span&gt; VisualBasicValue&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; {ExpressionText= &lt;span class="str"&gt;&amp;quot;input1 + input2 + \&amp;quot;that's it folks\&amp;quot;&amp;quot;&lt;/span&gt; } }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;};&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;StringBuilder sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;StringWriter tw = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringWriter(sb);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;XamlWriter xw = ActivityXamlServices.CreateBuilderWriter(&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; XamlXmlWriter(tw, &lt;span class="kwrd"&gt;new&lt;/span&gt; XamlSchemaContext()));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;XamlServices.Save(xw , ab1);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; serializedAB = sb.ToString();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;DynamicActivity da2 = ActivityXamlServices.Load(&lt;span class="kwrd"&gt;new&lt;/span&gt; StringReader(serializedAB)) &lt;span class="kwrd"&gt;as&lt;/span&gt; DynamicActivity;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;var result = WorkflowInvoker.Invoke(da2, &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;,&lt;span class="kwrd"&gt;object&lt;/span&gt;&amp;gt; { {&lt;span class="str"&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;}, {&lt;span class="str"&gt;&amp;quot;input2&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;world&amp;quot;&lt;/span&gt; }});&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;Console.WriteLine(&lt;span class="str"&gt;&amp;quot;result text is {0}&amp;quot;&lt;/span&gt;, result[&lt;span class="str"&gt;&amp;quot;output&amp;quot;&lt;/span&gt;]);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;ActivityBuilder ab = XamlServices.Load(&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    ActivityXamlServices.CreateBuilderReader(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; XamlXmlReader(&lt;span class="kwrd"&gt;new&lt;/span&gt; StringReader(serializedAB)))) &lt;span class="kwrd"&gt;as&lt;/span&gt; ActivityBuilder;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;Console.WriteLine(&lt;span class="str"&gt;&amp;quot;there are {0} arguments in the activity builder&amp;quot;&lt;/span&gt;, ab.Properties.Count);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Press enter to exit&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;Console.ReadLine();&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Good luck, and happy metatyping!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9912121" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/designer/default.aspx">designer</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf4/default.aspx">wf4</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/beta/default.aspx">beta</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/xaml/default.aspx">xaml</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/vs2010/default.aspx">vs2010</category></item><item><title>Navigating the WF4 Beta 2 Samples</title><link>http://blogs.msdn.com/mwinkle/archive/2009/10/22/navigating-the-wf4-beta-2-samples.aspx</link><pubDate>Thu, 22 Oct 2009 19:25:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911620</guid><dc:creator>mwinkle</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/9911620.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=9911620</wfw:commentRss><description>&lt;p&gt;Hot off the presses (and the download center) come the WF4 Beta 2 samples &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=35ec8682-d5fd-4bc3-a51a-d8ad115a8792&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&amp;#160; The team has invested a lot of time into these samples and they provide a good way to get up to speed on the way a particular feature or group of features work together.&lt;/p&gt;  &lt;p&gt;Note, there are 2300 files to be unzipped, so hopefully there is a sample in here for everyone.&lt;/p&gt;  &lt;p&gt;At a high level, we work down the directory structure from technology, sample type, and then some functional grouping of samples.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/NavigatingtheWF4Beta2Samples_AE9C/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/NavigatingtheWF4Beta2Samples_AE9C/image_thumb.png" width="217" height="476" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Within the “Sample Type” we have a few different categories we use.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Basic &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;These are “one feature” samples that are used to illustrate how to use a given sample.&amp;#160; Often times they are hosted in the most basic wrapper necessary in order to get the feature to a point where it can be shown.&amp;#160; &lt;/li&gt;      &lt;li&gt;These are grouped within feature level areas, a few&amp;#160; examples from the samples are:&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;\WF\Basic&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;\BuiltInActivities – how to configure and use the activities that are in the box&lt;/li&gt;          &lt;li&gt;\CustomActivities&lt;/li&gt;          &lt;ul&gt;           &lt;li&gt;\CodeBodied\ – writing activities in code, including async, composite, and leveraging ActivityAction’s&lt;/li&gt;            &lt;li&gt;\Composite – writing composite activities&lt;/li&gt;            &lt;li&gt;\CustomActivityDesigners – writing activity designers&lt;/li&gt;         &lt;/ul&gt;          &lt;li&gt;\Designer – programming against the infrastructure, a tree view designer, and a XamlWriter which will remove view state.&lt;/li&gt;          &lt;li&gt;\Persistance&lt;/li&gt;          &lt;li&gt;\Tracking&lt;/li&gt;       &lt;/ul&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Scenario&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;These are higher level samples that require pulling together a number of features in order to highlight how the features can be combined to enable an application of the technology that might be of interest.&amp;#160; In the WF bucket, you will see things like Compensation and Services, which pull together a number of individual features&lt;/li&gt;      &lt;li&gt;The ActivityLibrary folder is chock full of interesting sample activities that are useful for seeing how to write activities, as well as code that might be useful in your application.&amp;#160; Some of these are items which we aren’t shipping in the framework but may in the future.&amp;#160;&amp;#160; Many of these also include interesting designers as well.&amp;#160; Some of the interesting sample activities in here:&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee661651(VS.100).aspx"&gt;CommentOut&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee622977(VS.100).aspx"&gt;DbActvities&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd797586(VS.100).aspx"&gt;Powershell&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd797582(VS.100).aspx"&gt;LinqToSql&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/dd797580(VS.100).aspx"&gt;LinqToObjects&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd797585(VS.100).aspx"&gt;SendMail&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee620808(VS.100).aspx"&gt;ThrottledParallelForEach&lt;/a&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Application&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;These samples are used to show how to pull everything together within the context of an application.&amp;#160; For instance, the &lt;a href="http://msdn.microsoft.com/en-us/library/ee624139(VS.100).aspx"&gt;WorkflowSimulator&lt;/a&gt; is described this way:&lt;/li&gt;      &lt;ul&gt;       &lt;p&gt;&lt;em&gt;This sample demonstrates how to write a workflow simulator that displays the running workflow graphically. The application executes a simple flowchart workflow (defined in Workflow.xaml) and re-hosts the workflow designer to display the currently executing workflow. As the workflow is executed, the currently executing activity is shown with a yellow outline and debug arrow. In addition tracking records generated by the workflow are also displayed in the application window. For more information about workflow tracking, see &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee513992(VS.100).aspx"&gt;&lt;em&gt;Workflow Tracking and Tracing&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. For more information about re-hosting the workflow designer, see &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd489451(VS.100).aspx"&gt;&lt;em&gt;Rehosting the Workflow Designer&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;        &lt;p&gt;&lt;em&gt;The workflow simulator works by keeping two dictionaries. One contains a mapping between the currently executing activity object and the XAML line number in which the activity is instantiated. The other contains a mapping between the activity instance ID and the activity object. When tracking records are emitted using a custom tracking profile, the application determines the instance ID of the currently executing activity and maps it back to the XAML file that instantiated it. The re-hosted workflow designer is then instructed to highlight the activity on the designer surface and use the same method as the workflow debugger, specifically drawing a yellow border around the activity and displaying a yellow arrow along the left side of the designer&lt;/em&gt;&lt;/p&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Extensibility&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;This is a section inside the WCF samples that focuses on the various mechanisms and levels of extensibility &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I will be blogging more on some of the interesting (to me) individual samples.&amp;#160; What do you think?&amp;#160; Are there samples you’d like to see?&amp;#160; How are you using these, is there anything we can do to make these more useful? &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911620" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf/default.aspx">wf</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf4/default.aspx">wf4</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/beta/default.aspx">beta</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/vs2010/default.aspx">vs2010</category></item><item><title>Usability Testing the WF Designer vNext (or, Yelling at Customers)</title><link>http://blogs.msdn.com/mwinkle/archive/2008/05/15/usability-testing-the-wf-designer-vnext-or-yelling-at-customers.aspx</link><pubDate>Thu, 15 May 2008 20:22:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8508550</guid><dc:creator>mwinkle</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/8508550.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=8508550</wfw:commentRss><description>&lt;p&gt;One of the things that my team is working on is the next version of the workflow designer.&amp;#160; In order to help us get real feedback, we engaged with our usability teams to design and execute a usability study.&amp;#160; &lt;/p&gt;  &lt;p&gt;For details on what the test looks like (when we did them 3 years ago for the first version of the WF designer, see this great &lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=140993"&gt;channel9 video&lt;/a&gt;).&amp;#160; The setup is still the same (one way glass mirror, cameras tracking the face, screen, posture of the subject), the only difference is the software, we're busy testing out some new concepts to make workflow development much more productive.&amp;#160; At this stage of the lifecycle, we're really experimenting with some different designer metaphors, and a usability test is a great way to get real feedback.&lt;/p&gt;  &lt;p&gt;One thing I've always tried to do since I came to Microsoft is being sucked into the Redmond bubble.&amp;#160; The symptoms of placement inside said bubble are a gradual removal from the reality that everyday developers face.&amp;#160; When I came to the company two years ago, I was chock full of great thoughts and ideas from the outside, and much less tolerant of the &amp;quot;well, that's just how it works&amp;quot; defense.&amp;#160; &lt;/p&gt;  &lt;p&gt;Slowly, though, as you start to get deep into thinking about a problem, and tightly focusing on that problem, those concerns start to fade away, as you look to optimize the experience you are providing.&amp;#160; Sitting in on the usability labs yesterday was a great reminder to me of how easily one can slip into the bubble.&amp;#160; Our test subject was working with a workflow in the designer and had a peculiar style of working with the property window in VS.&amp;#160; Now, when I use VS, I use the property grid in one way.&amp;#160; I have it docked, and I have the dock set to automatically hide.&amp;#160; I have known some developers who prefer the Apple / photoshop style where the property pane floats.&amp;#160; The customer's way of working with the property grid was that he had it floating, but he would close it after every interaction.&amp;#160; This required him to do one of two things in order to display the grid again, either go to the View menu, or (and what his style of work was) right clicking on an element and selecting properties.&lt;/p&gt;  &lt;p&gt;The prototype we were doing the usability testing with, however, does not have that feature wired up, in fact, it currently doesn't displa&lt;a href="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/UsabilityTestingtheWFDesignervNextorYell_919B/image_2.png"&gt;&lt;img style="margin: 10px 20px 5px 5px" height="327" alt="image" src="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/UsabilityTestingtheWFDesignervNextorYell_919B/image_thumb.png" width="286" align="left" /&gt;&lt;/a&gt;y the properties item in the context menu at all.&amp;#160; Not because we have an evil, nefarious plan to remove the properties item inconsistently throughout our designer, but rather because no one gave it any thought when we put the prototype together as we had other UI elements we wanted to focus on.&amp;#160; &lt;/p&gt;  &lt;p&gt;This became a serious problem for our customer, as the way he expected to work was completely interrupted.&amp;#160; At one point, we asked him to dock the property window so we could continue with the test.&amp;#160; This is the most fascinating part of the study to me, and that was watching him work to dock the property grid in the left panel.&amp;#160; I've become so used to the docking behavior in VS (see screenshot below), that it didn't even occur to me that this might present a problem for the user.&amp;#160; Instead, we watched for 3 minutes or so as he attempted to figure out how to move the window, and then try to process the feedback that the UX elements give.&amp;#160; About 60 seconds in or so, the property grid was about at a similar location to the screenshot, with just a centimeter or two's distance away from being in &amp;quot;the right place&amp;quot;.&amp;#160; Watching his face, we saw him look slightly confused and then move it elsewhere.&amp;#160; Two more times he came back to that same spot, just far enough away to not get the feedback that might help him in the right direction.&amp;#160; It was at this point, the spontaneous yelling started among the observers in the room.&amp;#160; Something that has become so obvious to us, something we have internalized and accepted as &amp;quot;just the way the world,&amp;quot; was becoming crystal clear to us how much difficulty this was causing.&amp;#160; The yelling was things like &amp;quot;Move up, move up&amp;quot; &amp;quot;no, wait, over, over&amp;quot; &amp;quot;oh, you almost, almost, no....&amp;quot; trying to will the customer through the soundproof wall what we wanted him to do.&lt;/p&gt;  &lt;p&gt;This situation repeated itself time and time again with different UI elements, and it was very, very educational to see the way different users manage their workspace and interact with a tool that I've become so familiar with that I forget to see the forest for the trees.&amp;#160; I also realized, that although I had worked with a lot of customers and other developers, very rarely had I paid attention to how they work, rather than simply their work.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Now, here's where I open up the real can of worms.&lt;/em&gt;&lt;/strong&gt;&amp;#160; We're looking to make usability improvements in the WF designer.&amp;#160; Are there any that really bother you?&amp;#160; What can we do to make you a more productive WF developer?&amp;#160; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8508550" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf/default.aspx">wf</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Oslo/default.aspx">Oslo</category></item><item><title>Pageflow questions:  "What about WCSF / Acropolis / Codename 'foo'"?</title><link>http://blogs.msdn.com/mwinkle/archive/2007/06/14/pageflow-questions-what-about-wcsf-acropolis-codename-foo.aspx</link><pubDate>Thu, 14 Jun 2007 23:34:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3297003</guid><dc:creator>mwinkle</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/3297003.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=3297003</wfw:commentRss><description>&lt;p&gt;So, I got a little bit of &lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx#comments"&gt;feedback&lt;/a&gt; from my initial &lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx"&gt;post&lt;/a&gt;.&amp;nbsp; First, thanks,&amp;nbsp;it's great to see all of the interest in the technology.&amp;nbsp; I want to use this as the place to answer common questions that arise about the sample.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Here's one that I got internally as well as externally(&lt;a href="http://davidhayden.com/blog/dave/archive/2007/06/11/ASPNETPageFlowUsingWindowsWorkflow.aspx"&gt;here&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/paolopia/archive/2007/06/08/acropolis-cab-wpf-pageflow-what-should-i-suggest-to-use.aspx"&gt;here&lt;/a&gt; )&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;What about WCSF and Acropolis?&amp;nbsp; Does this change how we think about the problem today?&amp;nbsp; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The short answers are "they are still here", "no".&lt;/p&gt; &lt;h2&gt;WCSF&amp;nbsp;&lt;/h2&gt; &lt;p&gt;There are a lot of people who are using the &lt;a href="http://www.codeplex.com/websf"&gt;Web Client Software Factory&lt;/a&gt;.&amp;nbsp; It is definitely something you should check out, it is a great toolkit to build composite web applications.&amp;nbsp; Part of what it does, among many other things, is the Pageflow Application Block designed to model navigation.&amp;nbsp;&amp;nbsp; This is what most people are wondering about when they first hear about the pageflow sample we released.&amp;nbsp; Don't they do the same thing?&amp;nbsp; From a functional level, yes, they both provide a nice abstraction to model flow through an application.&amp;nbsp; This is a sample usage of WF to solve a similar problem in a little bit of a different way.&amp;nbsp; The model inside the WCSF is extensible, allowing a different provider of pageflow information, so it is probably even possible to put this pageflow sample inside of the WCSF, I have yet to give that a try.&lt;/p&gt; &lt;p&gt;At a deeper level, there are some differences that stem from the implementation of the Pageflow Application Block as a state machine, which I will get into in my next post.&lt;/p&gt; &lt;h2&gt;Acropolis&lt;/h2&gt; &lt;p&gt;&lt;a href="http://windowsclient.net/Acropolis/"&gt;Acropolis&lt;/a&gt;, announced at TechEd last week, is still early on in its lifecycle, as part of the ".NET Client Futures".&amp;nbsp; I haven't spent a lot of time looking at it yet, but it is something else which will have a way to model the flow within an application, in this case between WPF forms.&amp;nbsp; &lt;/p&gt; &lt;h2&gt;Conclusion&lt;/h2&gt; &lt;p&gt;From a support perspective, it's important to note that this sample is unsupported (save for myself and a few others) as opposed to Acropolis and WCSF which have teams working on them.&lt;/p&gt; &lt;p&gt;It is important to note that both WCSF and Acropolis aim to solve a much larger problem than simple UI navigation.&amp;nbsp; In that sense, in no way does the pageflow sample released represent a wholesale replacement of either of them.&amp;nbsp; The sample that we released aims to illustrate a way to use WF to solve the problem of UI navigation.&amp;nbsp; &lt;strong&gt;&lt;em&gt;The important thing to take away from this is that it can be incredibly valuable to model the flow through one's application using a technology which allows separation from the UI.&amp;nbsp; This makes our UI more loosely coupled with the rest of our application, and increases the agility to react to changes in process / data required / need to track infomation.&amp;nbsp; &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Also, even if you don't want to use this for pageflow, tune in, because there are some pretty valuable things that any WF developer can learn by taking a look at this sample.&amp;nbsp; I will continue to discuss those as well.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3297003" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf/default.aspx">wf</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/pageflow/default.aspx">pageflow</category></item><item><title>Pageflow Questions: Why not a state machine?</title><link>http://blogs.msdn.com/mwinkle/archive/2007/06/14/pageflow-questions-why-not-a-state-machine.aspx</link><pubDate>Thu, 14 Jun 2007 18:00:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3297400</guid><dc:creator>mwinkle</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/3297400.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=3297400</wfw:commentRss><description>&lt;p&gt;Here's a &lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx#3242462"&gt;comment&lt;/a&gt; from my initial post &lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx"&gt;introducing the pageflow sample&lt;/a&gt;&amp;nbsp;from wleong:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;NavigatorWorkflow looks like a state machine to me. &amp;nbsp;Why create a new workflow type? &lt;p&gt;Tuesday, June 12, 2007 3:44 AM by &lt;a href="http://blogs.msdn.com/wleong"&gt;wleong&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This is a good question.&amp;nbsp; There a couple of reasons why we create our own workflow type:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;To more accurately model a process&lt;/li&gt; &lt;li&gt;Enable different execution semantics&lt;/li&gt; &lt;li&gt;Make development faster by focusing on the model, not the implementation details.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;For a little more background on the problem, see my previous post on "&lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/05/24/different-execution-patterns-with-wf-or-going-beyond-sequential-and-state-machine.aspx"&gt;Different Execution Patterns for WF (or, Going beyond Sequential and State Machine)&lt;/a&gt;" that talks in a little more depth about the trouble one can encounter by only think about the two out of the box models.&lt;/p&gt; &lt;p&gt;For this problem, in particular, all of the reasons are relevant. &lt;/p&gt; &lt;h3&gt;Accurately modeling a process&lt;/h3&gt; &lt;p&gt;It is very natural to think of UI navigation as a series of places we can be, and a set of transitions from any one of those places to another.&amp;nbsp; That's what the navigator workflow models.&amp;nbsp; There is a subtle difference from a state machine that plays to point 3 here.&amp;nbsp; This model allows me to not worry about putting an IEventActivity at the top of a state, then making some decision and then setting a new state.&amp;nbsp; We abstract away from defining the events, that's taken care of for us.&amp;nbsp; This lets us model the process naturally.&amp;nbsp; In a state machine, one could argue that modeling pageflow with transitions has me place one event and then have an IfElse activity that lets me decide which state to transition to.&amp;nbsp; This adds mental overhead to the model, moving me much closer to the implementation details (again, point 3).&lt;/p&gt; &lt;h3&gt;Enable Different Execution Semantics&lt;/h3&gt; &lt;p&gt;This was the primary reason I wrote the original article, my customer was doing some very unnatural acts in order to model their process in a sequential workflow.&amp;nbsp; In the case of UI navigation, we have the ability to be in multiple interactions at the same time.&amp;nbsp;&amp;nbsp;The WF&amp;nbsp;state machine has the (very natural) restriction that we can only be in one state at a given time (although there are certainly other state machine models that do not have that restriction). The&amp;nbsp;pageflow sample allows you to be in multiple interactions at the same time, so think about filling out a&amp;nbsp;mortgage application, I can be in the midst of many minor sub processes that all roll up into&amp;nbsp;the larger application process, and I can jump from filling out my salary history to the details&amp;nbsp;of the property I am buying by simply clicking on a tab at the top of the page.&lt;/p&gt; &lt;h3&gt;Make development faster by focusing on the model, not the implementation details.&lt;/h3&gt; &lt;p&gt;If we decide to use a state machine, we are coupling our model to the implementation and execution details of the state machine, which will cause us to do things that we don't need to do for this application.&amp;nbsp; The WF state machine is generic, any state can receive &lt;em&gt;n&lt;/em&gt; different events and react to each on differently.&amp;nbsp; In pageflow, we know there is only one event, "GoForward" and then we have a set of rules to operate on that to determine where we transition to.&amp;nbsp; By spending the time to create our own root activity, we remove the burden of the implementation details from the workflow developer, allowing them to focus on the details of their process, not the configuration of a given activity.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3297400" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf/default.aspx">wf</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/pageflow/default.aspx">pageflow</category></item><item><title>Two Cool Technologies, One Great Solution</title><link>http://blogs.msdn.com/mwinkle/archive/2007/04/04/two-cool-technologies-one-great-solution.aspx</link><pubDate>Wed, 04 Apr 2007 22:24:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2026844</guid><dc:creator>mwinkle</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/2026844.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=2026844</wfw:commentRss><description>&lt;p&gt;My peer, &lt;a href="http://blogs.msdn.com/daiken"&gt;David&lt;/a&gt;, has a great screencast posted on &lt;a href="http://channel9.msdn.com/"&gt;Channel9&lt;/a&gt; that shows off a solution from &lt;a href="http://www.fullarmor.com/labs-workflow-studio.htm"&gt;FullArmor&lt;/a&gt; that incorporates WF and PowerShell and one really cool looking designer.&lt;/p&gt; &lt;p&gt;On my list of cool things to check out when I have free time (currently June 2015) is PowerShell.&amp;nbsp; It's a great tool for devs to make their apps much more managable, by both devs and our dear friends, the IT Pro.&amp;nbsp; David has built some samples that build right on top of things to return collections of data in order to PowerShell enable them.&lt;/p&gt; &lt;p&gt;&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=295623"&gt;Check it out here&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2026844" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf/default.aspx">wf</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Channel9/default.aspx">Channel9</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/screencasts/default.aspx">screencasts</category></item><item><title>WF and BizTalk Server 2006 R2</title><link>http://blogs.msdn.com/mwinkle/archive/2007/01/24/wf-and-biztalk-server-2006-r2.aspx</link><pubDate>Thu, 25 Jan 2007 01:48:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1523975</guid><dc:creator>mwinkle</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/1523975.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=1523975</wfw:commentRss><description>&lt;p&gt;One of the cool things coming in BizTalk R2 is a tracking service for WF that talks to BAM.&amp;nbsp; Jesus Rodriguez has put together a walkthrough of &lt;a href="http://weblogs.asp.net/gsusx/archive/2007/01/17/using-the-biztalk-server-r2-bam-interceptor-for-wf.aspx"&gt;using the BizTalk Server R2 BAM interceptor for WF&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1523975" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>Matt and Paul talk WF</title><link>http://blogs.msdn.com/mwinkle/archive/2006/12/14/matt-and-paul-talk-wf.aspx</link><pubDate>Thu, 14 Dec 2006 19:26:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1286660</guid><dc:creator>mwinkle</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/1286660.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=1286660</wfw:commentRss><description>&lt;p&gt;A few weeks back &lt;a href="http://blogs.msdn.com/pandrew"&gt;Paul Andrew&lt;/a&gt; and I sat down with Ron Jacobs to record &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=266192"&gt;this Arcast&lt;/a&gt; about WF.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The funny thing is that a few weeks before that, Paul Andrew and I sat down with Ron Jacobs to record that same Arcast, except there was a problem with the microphone and Ron's voice didn't get recorded, so it was as if Paul and I were extemporaneously responding to the voices in our heads about WF.&lt;/p&gt; &lt;p&gt;There&amp;nbsp;are more questions to go through, so we will be doing at least a part 2.&amp;nbsp; Any feedback or other questions you want to see answered? Let me know!&amp;nbsp; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1286660" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>Back From Barcelona</title><link>http://blogs.msdn.com/mwinkle/archive/2006/11/13/back-from-barcelona.aspx</link><pubDate>Tue, 14 Nov 2006 02:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1071641</guid><dc:creator>mwinkle</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/1071641.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=1071641</wfw:commentRss><description>&lt;P&gt;I arrived into SEA yesterday around 3, so I'm feeling a little bit of the 'lag from my week in Barcelona.&amp;nbsp; A few things to point out:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Tim has a fantastic &lt;A class="" href="http://timheuer.com/blog/archive/2006/09/12/13437.aspx" mce_href="http://timheuer.com/blog/archive/2006/09/12/13437.aspx"&gt;"Vista on the M400"&lt;/A&gt; post.&amp;nbsp; The little dude's getting an upgrade while this gets typed, results in a future post&lt;/LI&gt;
&lt;LI&gt;Kudos to who-ever put together &lt;A class="" href="http://msdn.microsoft.com/windowsvista/downloads/products/default.aspx" mce_href="http://msdn.microsoft.com/windowsvista/downloads/products/default.aspx"&gt;this diagram&lt;/A&gt;.&amp;nbsp; I think it could be made a bit better by having links to the section of MSDN which further explains how to dev, say, win32 or hybrid applications, but it's a nice way to represent and download the bits you're interested in.&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;The long awaited &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/Aa973808.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/Aa973808.aspx"&gt;WF perf whitepaper&lt;/A&gt; is available, as Paul &lt;A class="" href="http://blogs.msdn.com/pandrew/archive/2006/11/10/wf-performance-peaks-at-10308-wf-instances-per-second-on-lab-environment.aspx" mce_href="http://blogs.msdn.com/pandrew/archive/2006/11/10/wf-performance-peaks-at-10308-wf-instances-per-second-on-lab-environment.aspx"&gt;points out&lt;/A&gt;.&amp;nbsp; As Paul mentions, the 10K empty workflows per second is not a number one should run out a room assuming can be obtained, but there are a few things that I really liked seeing:&lt;/LI&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/aa973808.workflowperfcharacteristics13(en-us,msdn.10).jpg" mce_href="http://msdn2.microsoft.com/en-us/library/aa973808.workflowperfcharacteristics13(en-us,msdn.10).jpg"&gt;What happens when we scale out?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/aa973808.workflowperfcharacteristics21(en-us,msdn.10).jpg" mce_href="http://msdn2.microsoft.com/en-us/library/aa973808.workflowperfcharacteristics21(en-us,msdn.10).jpg"&gt;Should I implement a while loop in my code to loop 1000 times, or should I use the While activity?&lt;/A&gt;&amp;nbsp; This is one of my favorite examples when people ask "How should I think about moving to a WF driven design?"&amp;nbsp; I like this paper as it explains things in terms of trade-offs.&lt;/LI&gt;
&lt;LI&gt;Finally, beneath figure 13, the discussion of the overhead involved with using the tracking service is discussed.&amp;nbsp; This is important, and it shows the difference between batching and not batching the "transactions" of the tracking service.&amp;nbsp; Transaction is mentioned in quotes as these have little to do with System.Transactions, rather when tracking data is written to the database.&amp;nbsp; The number to&amp;nbsp;notice here is not just workflows per second, but also the increased load on the SQL Server.&amp;nbsp; Again, these are just some things to think about when you start discussing "perf" with workflow.&amp;nbsp; The papers about 50 pages long, so there's a bunch of stuff to see there.&amp;nbsp; Check it out!&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Thanks to everyone who dropped in on my sessions in Barcelona.&amp;nbsp; I'll be posting some followup information when I get a little time to recover (or at 3:30 tomorrow morning when I am wide awake and thinking it is lunch time in Barcelona :-) )&lt;/LI&gt;
&lt;LI&gt;There's also &lt;A class="" href="http://msdn.microsoft.com/vstudio/devsolutions/" mce_href="http://msdn.microsoft.com/vstudio/devsolutions/"&gt;this page&lt;/A&gt;, which is a nice gateway into downloading all sorts of the things we talked about at TechEd.&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1071641" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>Did you hear the news, .NET 3.0 is live</title><link>http://blogs.msdn.com/mwinkle/archive/2006/11/08/did-you-here-the-news-net-3-0-is-live.aspx</link><pubDate>Wed, 08 Nov 2006 11:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1032114</guid><dc:creator>mwinkle</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/1032114.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=1032114</wfw:commentRss><description>&lt;P&gt;Things got signed off last week, and early yesterday (depending on the timezone), the RTM build was published on MSDN.&amp;nbsp; James put the details up on the &lt;A href="http://www.netfx3.com/blogs/news_and_announcements/archive/2006/11/06/.NET-Framework-3.0-has-been-released_2100_.aspx" mce_href="http://www.netfx3.com/blogs/news_and_announcements/archive/2006/11/06/.NET-Framework-3.0-has-been-released_2100_.aspx"&gt;community site&lt;/A&gt;, and there's been a ton of people headed to check it out (look at all the trackbacks on James' post).&amp;nbsp; Thank you to all of the bloggers who have picked up the story and are passing it along.&lt;/P&gt;
&lt;P&gt;So, now what?&amp;nbsp; Well, there's still plenty of work for me to do, including looking forward to vNext (the great part of evangelism!)&amp;nbsp; In the short term, I'll be presenting today on Reliabilty, Scalability and Maintainability of workflows hosted in IIS here in Barcelona.&amp;nbsp;I won't be talking about the IIS scenario nearly as much as the other three parts, as well as discussing some performance information.&amp;nbsp; After the talk, a number of us are headed to a soccer game, which I'm looking forward to.&amp;nbsp;&amp;nbsp;&amp;nbsp; Tomorrow, &lt;A href="http://blogs.msdn.com/pandrew" mce_href="http://blogs.msdn.com/pandrew"&gt;Paul Andrew&lt;/A&gt; and I are conducting a drop-in clininc for WF, so, if you got questions, stop on by.&lt;/P&gt;
&lt;P&gt;So, what's next for you?&amp;nbsp; Get the &lt;A href="http://www.netfx3.com/blogs/news_and_announcements/archive/2006/11/06/.NET-Framework-3.0-has-been-released_2100_.aspx" mce_href="http://www.netfx3.com/blogs/news_and_announcements/archive/2006/11/06/.NET-Framework-3.0-has-been-released_2100_.aspx"&gt;bits&lt;/A&gt;, get some &lt;A href="https://www.microsoftelearning.com/eLearning/offerDetail.aspx?offerPriceId=109340" mce_href="https://www.microsoftelearning.com/eLearning/offerDetail.aspx?offerPriceId=109340"&gt;training&lt;/A&gt;, and start writing workflows!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;[updated] realized I had a problem spelling "hear" in the title :-) &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1032114" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>Off to Barcelona!</title><link>http://blogs.msdn.com/mwinkle/archive/2006/11/03/off-to-barcelona.aspx</link><pubDate>Fri, 03 Nov 2006 18:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:943099</guid><dc:creator>mwinkle</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/943099.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=943099</wfw:commentRss><description>I'm in the office this morning, wrapping some things up and then it's wheels up to Barcelona for a week.&amp;nbsp; &lt;A class="" href="http://blogs.msdn.com/pandrew" mce_href="http://blogs.msdn.com/pandrew"&gt;Paul&lt;/A&gt;, &lt;A class="" href="http://blogs.msdn.com/clemensv" mce_href="http://blogs.msdn.com/clemensv"&gt;Clemens&lt;/A&gt;, &lt;A class="" href="http://blogs.msdn.com/shycohen/default.aspx" mce_href="http://blogs.msdn.com/shycohen/default.aspx"&gt;Shy&lt;/A&gt; and I will all be there hanging out somewhere between our talks and the Connected Systems booths, so stop on by and say hi!&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=943099" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/TechEd2006/default.aspx">TechEd2006</category></item><item><title>SOA Conference Questions</title><link>http://blogs.msdn.com/mwinkle/archive/2006/10/05/SOA-Conference-Questions.aspx</link><pubDate>Thu, 05 Oct 2006 18:30:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:793967</guid><dc:creator>mwinkle</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/793967.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=793967</wfw:commentRss><description>&lt;p&gt;I headed over to building 33 yesterday for the &lt;a href="http://www.impactevents.com/biztalkconference/"&gt;Microsoft SOA and Business Process Conference&lt;/a&gt; to host a Q&amp;amp;A session with some other people from the Connected Systems division (&lt;a href="http://blogs.msdn.com/clemensv/"&gt;Clemens&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/shycohen/default.aspx"&gt;Shy&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/Biztalk_Core_Engine/"&gt;Lee&lt;/a&gt; and Joe).&amp;nbsp; We had a pretty decent audience, and I wanted to repost the questions that I got here and answer them.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Will Speech Server (or SharePoint, or other hosts) let me run activity &lt;em&gt;x&lt;/em&gt;?&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The other big host to talk about right now is Office, in SharePoint.&amp;nbsp; The answer, in true consultant fashion is that it depends.&amp;nbsp; It will really be left up to the implementation of the host as to what behavior they will allow.&amp;nbsp; For instance, the SharePoint host will not allow the addition of additional services.&amp;nbsp; This has been done for performance, stability and security reasons.&amp;nbsp; SharePoint is also very particular about the activities it will allow to be executed, using the concept of a white-list in order to mark activities as able to be run.&amp;nbsp; You can imagine that allowing a code activity could be a very bad thing in SharePoint, and thus, it is not allowed.&amp;nbsp;&lt;/p&gt; &lt;p&gt;These are all hosts for WF, their behavior is chosen to&amp;nbsp;optimize for the scenario to be used in.&amp;nbsp; Similarly, you may have the same constraints, which you can&amp;nbsp;enforce in your host, or maybe you have none of them, in which case, you don't need to implement any of them.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Is the WF Rules Engine a Rete Engine?&amp;nbsp; (with follow on: If not, why not?)&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;No, the WF Rules Engine is not&amp;nbsp;based on a &amp;nbsp;Rete algorithm.&amp;nbsp; Check out Don's blog posting &lt;a href="http://blogs.msdn.com/don_mccrady/archive/2006/09/09/748368.aspx"&gt;here&lt;/a&gt;.&amp;nbsp; There are a few relevent paragraphs I will repost here.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;There are plenty of resources out there that describe what the Rete algorithm does and why it is so often used in Rules engines. At the end of the day, Rete is an optimization. You don't need a Rete engine to implement a forward-chaining rules engine; however, the Rete optimization may improve the runtime performance of a Rule Set. That's what optimizations do. In particular, Rete reduces the number of predicate evaluations by remembering the most recent value and re-using it on subsequent re-evaluations.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;and&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;I certainly concede that there are many examples of Rule Sets that contain a lot of common predicates. In those cases, a Rete-based Rules engine like BRE will crush a non-Rete engine like WF Rules. However, in cases where there are few common predicates, the reverse has also been demonstrated: WF Rules and its non-Rete execution mechanism will crush Rete-based BRE.&lt;/p&gt; &lt;p&gt;My point is simply that Rete is an optimization strategy that is not necessarily appropriate for all Rules-based solutions. For WF Rules, we placed much more importance on how much you can express in your Rules, how easy it is to express it, and how well it integrates into Windows Workflow Foundation and the .NET framework.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;If you're interested in more things about rules, &lt;a href="http://blogs.msdn.com/kavitak/default.aspx"&gt;Kavita&lt;/a&gt; emailed me the other day to let me know the team has started blogging &lt;a href="http://blogs.msdn.com/rulesteam/"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=793967" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>wf.netfx3.com new rss feeds</title><link>http://blogs.msdn.com/mwinkle/archive/2006/07/10/661684.aspx</link><pubDate>Mon, 10 Jul 2006 23:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:661684</guid><dc:creator>mwinkle</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/661684.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=661684</wfw:commentRss><description>&lt;P&gt;One thing that isn't so nice about the new &lt;A href="http://wf.netfx3.com"&gt;http://wf.netfx3.com&lt;/A&gt; site is that all of the file listings do not roll up into one single nice syndication feed.&amp;nbsp; I&amp;nbsp;want the ability to aggregate all of the files into nice rss feeds so I can stay on top of samples, activities, etc. In order to enable this I had to create new blogs that aggregate the individual folder feeds, and then another one to aggregate those blogs.&lt;/P&gt;
&lt;P&gt;So, here&amp;nbsp;we go:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://wf.netfx3.com/blogs/workflow_activities/rss.aspx"&gt;Activities&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://wf.netfx3.com/blogs/workflow_samples/rss.aspx"&gt;Samples&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://wf.netfx3.com/blogs/workflow_content/rss.aspx"&gt;Content&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://wf.netfx3.com/blogs/workflow_utilities/rss.aspx"&gt;Utilities&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;And, the rss feed that rules them all&lt;/P&gt;
&lt;P&gt;&lt;A href="http://wf.netfx3.com/blogs/all_wf_content/rss.aspx"&gt;All Content From wf.netfx3.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Enjoy!&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=661684" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>Look Mom, We Made CNET!!!</title><link>http://blogs.msdn.com/mwinkle/archive/2006/06/14/631139.aspx</link><pubDate>Wed, 14 Jun 2006 20:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:631139</guid><dc:creator>mwinkle</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/631139.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=631139</wfw:commentRss><description>The workflow Technical Learning Center&amp;nbsp;appears in CNET's "&lt;A href="http://news.com.com/2300-1012_3-6083455-2.html?tag=ne.gall.pg"&gt;The View From TechEd 2006&lt;/A&gt;"&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=631139" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/TechEd2006/default.aspx">TechEd2006</category></item><item><title>A Quick Update</title><link>http://blogs.msdn.com/mwinkle/archive/2006/06/09/624034.aspx</link><pubDate>Fri, 09 Jun 2006 19:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:624034</guid><dc:creator>mwinkle</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/624034.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=624034</wfw:commentRss><description>&lt;P&gt;I was out of town for most of this week, so I am busy catching up on things here.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;First, I would like to thank &lt;A href="http://www.masteringbiztalk.com"&gt;Jon&lt;/A&gt; for &lt;A href="http://www.masteringbiztalk.com/blogs/jon/PermaLink,guid,4cceb7d7-33eb-411d-b5b5-863e0e8058c3.aspx"&gt;this post&lt;/A&gt;, pointing out some areas of improvement which can be made in the designer re-hosting sample that I pointed to.&amp;nbsp; Paul then &lt;A href="http://blogs.msdn.com/mwinkle/archive/2006/06/02/613614.aspx#617077"&gt;let me know&lt;/A&gt; that &lt;A href="http://msdn.microsoft.com/library/en-us/dnlong/html/WFDsgnRehst.asp"&gt;Vihang's article on MSDN&lt;/A&gt; had been updated as well.&amp;nbsp; Vihang's article is a great introduction to a lot of the issues that you will encounter in designer rehosting.&lt;/P&gt;
&lt;P&gt;Other than that, I'm getting ready to head off to TechEd, where the WF team will be in full force.&amp;nbsp; If you're looking to find out anything about worklow, stop by our sessions or chalk talks. If you're plate is already full with other things to do, stop on by the Connected Systems TLC in the developer section (I think it's "blue").&amp;nbsp; There will be plenty of product team members hanging around to talk about any workflow questions you might have.&amp;nbsp; I'll be the guy wearing the blue Microsoft shirt, so I should be pretty easy to find!&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Oh, and make sure to check out &lt;A href="http://www.windowsworkflow.net"&gt;www.windowsworkflow.net&lt;/A&gt; on Monday morning, we've got a little bit of an update coming :-);&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=624034" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/TechEd2006/default.aspx">TechEd2006</category></item></channel></rss>