<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.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>Paulo Morgado : PageFlow</title><link>http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx</link><description>Tags: PageFlow</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Web Client Software Factory 2.0 shipped</title><link>http://msmvps.com/blogs/paulomorgado/archive/2008/02/29/web-client-software-factory-2-0-shipped.aspx</link><pubDate>Fri, 29 Feb 2008 01:54:51 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1527570</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1527570</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1527570</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2008/02/29/web-client-software-factory-2-0-shipped.aspx#comments</comments><description>&lt;div style="border-right:1px solid;border-top:1px solid;border-left:1px solid;width:550px;border-bottom:1px solid;text-align:center;"&gt; &lt;p&gt;&lt;img src="http://msdn2.microsoft.com/en-us/library/Bb264518.pponline(en-us,MSDN.10).gif" alt="" /&gt; &lt;/p&gt; &lt;p style="text-align:center;" align="center"&gt;&lt;b&gt;&lt;span style="font-size:22pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Web Client Software Factory 2.0&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p style="text-align:center;" align="center"&gt;&lt;b&gt;&lt;span style="color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;February 2008 Release&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size:12pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="left"&gt;&lt;b&gt;Resources&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="left"&gt;MSDN site: &lt;a href="http://msdn.microsoft.com/webclientfactory" target="_blank"&gt;http://msdn.microsoft.com/webclientfactory&lt;/a&gt; &lt;/div&gt; &lt;li&gt; &lt;div align="left"&gt;Community site: &lt;a href="http://www.codeplex.com/websf" target="_blank"&gt;http://www.codeplex.com/websf&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt; &lt;p&gt;&lt;b&gt;About the Deliverable&lt;/b&gt; &lt;/p&gt; &lt;p align="justify"&gt;The Web Client Software Factory (WCSF) provides a set of guidance for architects and developers building enterprise Web applications. The factory includes samples, reusable code and a guidance package which automates key development tasks from within Visual Studio. &lt;/p&gt; &lt;p align="justify"&gt;Using the Web Client Software Factory assets, developers can create &lt;a title="Composite Web Clients" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Composite%20Web%20Clients&amp;amp;referringTitle=Home" target="_blank"&gt;Composite Web&lt;/a&gt; applications composed of independently developed and deployed modules. These modules are dynamically brought together at runtime into a common shell. Additionally the factory includes support for ASP.NET AJAX thus providing users with a richer and more responsive user experience. &lt;/p&gt; &lt;p&gt;&lt;b&gt;New In This Release&lt;/b&gt; &lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;p align="justify"&gt;The February 2008 release of the Web Client Software Factory has the following improvements to the June 2007 release. &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;Full support for Visual Studio 2008 and .NET Framework 3.5 &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Added ASP.NET AJAX extenders for Context Sensitive Autocomplete, AJAX Validation, and Real Time Search that can be used in existing ASP.NET sites and ASP.NET sites built using the Composite Web Application Block. &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Added UI Composition capability through extending our dependency injection mechanism to support Pages, User Controls and Master Pages. &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Added Dependency Injection on ASMX Web Services and JSON services. &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Added a new set of Quickstarts and How-To topics on MVP, Modularity and the new AJAX extenders &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Added a new Order Entry Reference application that demonstrates all of the new functionality. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="justify"&gt;In addition, this release of WCSF has the following community issues and fixes: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;42 Workitems closed including the top-voted items on CodePlex &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Add ASP.NET AJAX Support (97 votes) &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Web Client Software Factory Support for Enterprise Library 3.1 (62 votes) &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Services through configuration (32 votes) &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Support for using the Validation Application Block (16 votes) &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Recipe support for Visual Basic .NET (20 votes) &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Added Presenter support for Master Pages (11 votes)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1527570" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Tools/default.aspx">Tools</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/AJAX/default.aspx">AJAX</category></item><item><title>WCSF geekSpeak: Download Available On Channel 9</title><link>http://msmvps.com/blogs/paulomorgado/archive/2008/02/02/wcsf-geekspeak-download-available-on-channel-9.aspx</link><pubDate>Sat, 02 Feb 2008 17:31:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1492511</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1492511</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1492511</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2008/02/02/wcsf-geekspeak-download-available-on-channel-9.aspx#comments</comments><description>&lt;p style="TEXT-ALIGN:center;"&gt;&lt;a title="geekSpeak: The Web Client Software Factory with Paulo Morgado" href="http://channel9.msdn.com/ShowPost.aspx?PostID=378994" target="_blank"&gt;&lt;img src="http://channel9.msdn.com/Photos/378994.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1492511" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Events/default.aspx">Events</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Tools/default.aspx">Tools</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Webcasts/default.aspx">Webcasts</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/geekSpeak/default.aspx">geekSpeak</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/AJAX/default.aspx">AJAX</category></item><item><title>WCSF geekSpeak: Download Available At MSEVENTS</title><link>http://msmvps.com/blogs/paulomorgado/archive/2008/01/27/wcsf-geekspeak-download-available-at-msevents.aspx</link><pubDate>Sun, 27 Jan 2008 23:25:27 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1483175</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1483175</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1483175</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2008/01/27/wcsf-geekspeak-download-available-at-msevents.aspx#comments</comments><description>&lt;p&gt;For those who missed my webcast (and wanted to watch it) it&amp;#39;s &lt;a title="MSDN Webcast: MSDN geekSpeak: The Web Client Software Factory in Action (Level 300)" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032362715&amp;amp;CountryCode=US" target="_blank"&gt;available to download at the MSEVENTS site&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1483175" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Events/default.aspx">Events</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Tools/default.aspx">Tools</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/EntLib/default.aspx">EntLib</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Webcasts/default.aspx">Webcasts</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/geekSpeak/default.aspx">geekSpeak</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/AJAX/default.aspx">AJAX</category></item><item><title>WCSF geekSpeak: Online Resources</title><link>http://msmvps.com/blogs/paulomorgado/archive/2008/01/24/wcsf-geekspeak-online-resources.aspx</link><pubDate>Thu, 24 Jan 2008 00:46:42 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1477193</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1477193</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1477193</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2008/01/24/wcsf-geekspeak-online-resources.aspx#comments</comments><description>&lt;p&gt;Here is the list of topics covered in the WCSF geekSpeak webcast:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a title="patterns &amp;amp; practices - Web Client Software Factory - Contextual Autocomplete Bundle" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Autocomplete_landing_page&amp;amp;referringTitle=Home" target="_blank"&gt;Contextual Auto Complete Bundle&lt;/a&gt;&lt;br /&gt;Demo code: &lt;a title="WCSF geekSpeak: Contextual Auto Complete Bundle Demo Code" href="http://msmvps.com/blogs/paulomorgado/archive/2008/01/23/wcsf-geekspeak-contextual-auto-complete-bundle-demo-code.aspx" target="_blank"&gt;WCSF geekSpeak: Contextual Auto Complete Bundle Demo Code&lt;/a&gt;  &lt;li&gt;&lt;a title="patterns &amp;amp; practices - Web Client Software Factory - Validation Guidance Bundle" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Validation_landing_page"&gt;Validation Bundle&lt;/a&gt;&lt;br /&gt;Demo code: &lt;a title="WCSF geekSpeak: Validation Bundle Demo Code" href="http://msmvps.com/blogs/paulomorgado/archive/2008/01/23/wcsf-geekspeak-validation-bundle-demo-code.aspx" target="_blank"&gt;WCSF geekSpeak: Validation Bundle Demo Code&lt;/a&gt;  &lt;li&gt;&lt;a title="patterns &amp;amp; practices - Web Client Software Factory - Real-Time Search Bundle" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Search_landing_page" target="_blank"&gt;Real-Time Search Bundle&lt;/a&gt;&lt;br /&gt;Demo code: &lt;a title="WCSF geekSpeak: Real-Time Search Bundle Demo Code" href="http://msmvps.com/blogs/paulomorgado/archive/2008/01/23/wcsf-geekspeak-real_2D00_time-search-bundle-demo-code.aspx" target="_blank"&gt;WCSF geekSpeak: Real-Time Search Bundle Demo Code&lt;/a&gt;  &lt;li&gt;&lt;a title="patterns &amp;amp; practices - Web Client Software Factory - MVP Bundle" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=MVP_landing_page" target="_blank"&gt;MVP Bundle&lt;/a&gt;  &lt;li&gt;&lt;a title="patterns &amp;amp; practices - Web Client Software Factory - Modularity Bundle" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Modularity_landing_page&amp;amp;referringTitle=Home" target="_blank"&gt;Modularity Bundle&lt;/a&gt;  &lt;li&gt;&lt;a title="patterns &amp;amp; practices - Web Client Software Factory - Page Flow Application Block" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Page%20Flow%20Application%20Block" target="_blank"&gt;Page Flow Application Block&lt;/a&gt;  &lt;li&gt;&lt;a title="patterns &amp;amp; practices: Web Client Software Factory Contrib - E-Commerce Catalog" href="http://www.codeplex.com/wcsfcontrib/Wiki/View.aspx?title=E-Commerce%20Catalog" target="_blank"&gt;E-Commerce Catalog&lt;/a&gt;  &lt;li&gt;&lt;a title="patterns &amp;amp; practices: Web Client Software Factory Contrib - EventBroker extension" href="http://www.codeplex.com/wcsfcontrib/Wiki/View.aspx?title=EventBroker%20extension&amp;amp;referringTitle=Documentation" target="_blank"&gt;EventBroker extension&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;And here is a list of online resources:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="patterns &amp;amp; practices - Web Client Software Factory" href="http://www.codeplex.com/websf" target="_blank"&gt;patterns &amp;amp; practices - Web Client Software Factory&lt;/a&gt;  &lt;li&gt;&lt;a title="patterns &amp;amp; practices: Web Client Software Factory Contrib" href="http://www.codeplex.com/wcsfcontrib" target="_blank"&gt;patterns &amp;amp; practices - Web Client Software Factory Contrib&lt;/a&gt; &lt;li&gt;&lt;a title="Patterns and Practices Guidance" href="http://pnpguidance.net/" target="_blank"&gt;Patterns and Practices Guidance&lt;/a&gt; &lt;li&gt;&lt;a title="Improving The Page Flow Application Block" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block.aspx" target="_blank"&gt;Improving The Page Flow Application Block&lt;/a&gt;&lt;/li&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="Removing Database Dependencies" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block-removing-database-dependencies.aspx" target="_blank"&gt;Removing Database Dependencies&lt;/a&gt; &lt;li&gt;&lt;a title="Decoupling Page Flow Usage From Its Implementation" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block-decoupling-page-flow-usage-from-its-implementation.aspx" target="_blank"&gt;Decoupling Page Flow Usage From Its Implementation&lt;/a&gt; &lt;li&gt;&lt;a title="Current Definition And Current Page Flow" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block-current-definition-and-current-page-flow.aspx" target="_blank"&gt;Current Definition And Current Page Flow&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1477193" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Events/default.aspx">Events</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Tools/default.aspx">Tools</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/EntLib/default.aspx">EntLib</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Webcasts/default.aspx">Webcasts</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/geekSpeak/default.aspx">geekSpeak</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/AJAX/default.aspx">AJAX</category></item><item><title>WCSF geekSpeak: Registration Open</title><link>http://msmvps.com/blogs/paulomorgado/archive/2008/01/18/wcsf-geekspeak-registration-open.aspx</link><pubDate>Fri, 18 Jan 2008 22:27:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1470326</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1470326</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1470326</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2008/01/18/wcsf-geekspeak-registration-open.aspx#comments</comments><description>&lt;p&gt;There was a problem with the registration for this webcast, but it&amp;#39;s now solved.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032362714&amp;amp;Culture=en-US" target="_blank"&gt;Jan 23 - Paulo Morgado - The Web client software factory in action&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1470326" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Events/default.aspx">Events</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Webcasts/default.aspx">Webcasts</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/geekSpeak/default.aspx">geekSpeak</category></item><item><title>WCSF geekSpeak: What do you want to see?</title><link>http://msmvps.com/blogs/paulomorgado/archive/2007/12/17/wcsf-geekspeak-what-do-you-want-to-see.aspx</link><pubDate>Mon, 17 Dec 2007 00:17:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1400862</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1400862</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1400862</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2007/12/17/wcsf-geekspeak-what-do-you-want-to-see.aspx#comments</comments><description>&lt;p&gt;Just let me know to see if I can accommodate it on my &lt;a title="I&amp;#39;m on geekSpeak" href="http://msmvps.com/blogs/paulomorgado/archive/2007/12/09/i-m-on-geekspeak.aspx" target="_blank"&gt;geekSpeak&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1400862" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Events/default.aspx">Events</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Webcasts/default.aspx">Webcasts</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/geekSpeak/default.aspx">geekSpeak</category></item><item><title>I'm on geekSpeak</title><link>http://msmvps.com/blogs/paulomorgado/archive/2007/12/09/i-m-on-geekspeak.aspx</link><pubDate>Sun, 09 Dec 2007 23:34:47 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1389200</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1389200</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1389200</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2007/12/09/i-m-on-geekspeak.aspx#comments</comments><description>&lt;p align="justify"&gt;Or I&amp;#39;ll be, on January 23rd.&lt;/p&gt; &lt;p align="justify"&gt;Here is the complete list of web casts for December 2007 and January 2008:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032359319&amp;amp;Culture=en-US" target="_blank"&gt;Dec 12 - Brian Loesgen - BizTalk Adapters&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032359088&amp;amp;Culture=en-US" target="_blank"&gt;Dec 19 - Shaun Walker - DotNetNuke&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032362458&amp;amp;Culture=en-US" target="_blank"&gt;Jan 2 - Michele Leroux Bustamante - CardSpace – Why should you care? Who’s using it today and how?&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032362462&amp;amp;Culture=en-US" target="_blank"&gt;Jan 9 - Kevin Goff - SQL Server 2008 Programming for Application Developers&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032362711&amp;amp;Culture=en-US" target="_blank"&gt;Jan 16 - Kate Gregory - The Vista bridge for .NET programmers&lt;/a&gt; &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032362714&amp;amp;Culture=en-US" target="_blank"&gt;&lt;strong&gt;Jan 23 - Paulo Morgado - The Web client software factory in action&lt;/strong&gt;&lt;/a&gt; &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032362721&amp;amp;Culture=en-US"&gt;Jan 30 - Jim Wilt - Best Practices for Private Security from a Public, Anonymous WSS 3.0 Site&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1389200" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Events/default.aspx">Events</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Webcasts/default.aspx">Webcasts</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/geekSpeak/default.aspx">geekSpeak</category></item><item><title>Bug Found On The Page Flow Without Database Improvement</title><link>http://msmvps.com/blogs/paulomorgado/archive/2007/11/01/bug-found-on-the-page-flow-without-database-improvement.aspx</link><pubDate>Thu, 01 Nov 2007 19:16:33 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1276942</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1276942</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1276942</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2007/11/01/bug-found-on-the-page-flow-without-database-improvement.aspx#comments</comments><description>Joern &lt;a href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block-removing-database-dependencies.aspx#comments" target="_blank"&gt;found&lt;/a&gt; a nasty bug in my code. I&amp;#39;ve uploaded the updated source code in &lt;a title="Improving The Page Flow Application Block" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block.aspx" target="_blank"&gt;all articles&lt;/a&gt;. &lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1276942" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category></item><item><title>Improving The Page Flow Application Block: Decoupling Page Flow Usage From Its Implementation</title><link>http://msmvps.com/blogs/paulomorgado/archive/2007/10/17/improving-the-page-flow-application-block-decoupling-page-flow-usage-from-its-implementation-post.aspx</link><pubDate>Wed, 17 Oct 2007 00:23:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1248282</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1248282</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1248282</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2007/10/17/improving-the-page-flow-application-block-decoupling-page-flow-usage-from-its-implementation-post.aspx#comments</comments><description>&lt;p&gt;In this &lt;a title="Improving The Page Flow Application Block: Decoupling Page Flow Usage From Its Implementation" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block-decoupling-page-flow-usage-from-its-implementation.aspx" target="_blank"&gt;second article&lt;/a&gt; of the &lt;a title="Improving The Page Flow Application Block" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block.aspx" target="_blank"&gt;series&lt;/a&gt; I&amp;#39;ll show how you can change the &lt;a title="Page Flow Application Block" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Page%20Flow%20Application%20Block" target="_blank"&gt;Page Flow Application Block&lt;/a&gt; of the &lt;a title="patterns &amp;amp; practices - Web Client Software Factory" href="http://www.codeplex.com/websf" target="_blank"&gt;Web Client Software Factory&lt;/a&gt; to get page flows by its definition name instead of its definition type.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1248282" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category></item><item><title>Improving The Page Flow Application Block: Removing Database Dependencies</title><link>http://msmvps.com/blogs/paulomorgado/archive/2007/10/15/improving-the-page-flow-application-block-removing-database-dependencies-post.aspx</link><pubDate>Sun, 14 Oct 2007 23:49:27 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1247490</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1247490</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1247490</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2007/10/15/improving-the-page-flow-application-block-removing-database-dependencies-post.aspx#comments</comments><description>&lt;p&gt;In this &lt;a title="Improving The Page Flow Application Block: Removing Database Dependencies" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block-removing-database-dependencies.aspx" target="_blank"&gt;first article&lt;/a&gt; of the &lt;a title="Improving The Page Flow Application Block" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block.aspx" target="_blank"&gt;series&lt;/a&gt; I&amp;#39;ll show how you can use the &lt;a title="Page Flow Application Block" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Page%20Flow%20Application%20Block" target="_blank"&gt;Page Flow Application Block&lt;/a&gt; of the &lt;a title="patterns &amp;amp; practices - Web Client Software Factory" href="http://www.codeplex.com/websf" target="_blank"&gt;Web Client Software Factory&lt;/a&gt; without a database.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1247490" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category></item><item><title>Improving The Page Flow Application Block</title><link>http://msmvps.com/blogs/paulomorgado/archive/2007/10/15/improving-the-page-flow-application-block-post.aspx</link><pubDate>Sun, 14 Oct 2007 23:48:24 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1247489</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1247489</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1247489</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2007/10/15/improving-the-page-flow-application-block-post.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m starting &lt;a title="Improving The Page Flow Application Block" href="http://msmvps.com/blogs/paulomorgado/pages/improving-the-page-flow-application-block.aspx" target="_blank"&gt;a series of articles&lt;/a&gt; where I&amp;#39;ll show how (in my opinion, obviously) to the &lt;a title="Page Flow Application Block" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Page%20Flow%20Application%20Block" target="_blank"&gt;Page Flow Application Block&lt;/a&gt; of the &lt;a title="patterns &amp;amp; practices - Web Client Software Factory" href="http://www.codeplex.com/websf" target="_blank"&gt;Web Client Software Factory&lt;/a&gt; could be improved.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1247489" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category></item><item><title>PageFlowWithShoppingCartQuickStart Sample With Page Flow Navigation</title><link>http://msmvps.com/blogs/paulomorgado/archive/2007/07/01/pageflowwithshoppingcartquickstart-sample-with-page-flow-navigation.aspx</link><pubDate>Sun, 01 Jul 2007 10:27:46 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:996084</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=996084</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=996084</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2007/07/01/pageflowwithshoppingcartquickstart-sample-with-page-flow-navigation.aspx#comments</comments><description>&lt;p&gt;In a &lt;a title="Page Flow Navigation vs. Page Navigation" href="http://msmvps.com/blogs/paulomorgado/archive/2007/07/01/page-flow-navigation-vs-page-navigation.aspx" target="_blank"&gt;previous post&lt;/a&gt;, I talked about &lt;a title="Page Flow Navigation vs. Page Navigation" href="http://msmvps.com/blogs/paulomorgado/archive/2007/07/01/page-flow-navigation-vs-page-navigation.aspx" target="_blank"&gt;Page Flow Navigation vs. Page Navigation&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a title="PageFlowWithShoppingCartQuickStart Sample With Page Flow Navigation" href="http://msmvps.com/blogs/paulomorgado/Posts/PageFlowNavigation/PageFlowWithShoppingCartQuickstart%20(2).zip" target="_blank"&gt;This&lt;/a&gt; is an adaptation of the PageFlowWithShoppingCartQuickStart sample to work with &lt;a title="Page Flow Navigation vs. Page Navigation" href="http://msmvps.com/blogs/paulomorgado/archive/2007/07/01/page-flow-navigation-vs-page-navigation.aspx" target="_blank"&gt;Page Flow Navigation&lt;/a&gt;. (You’ll need the &lt;a title="Page Flow Application Block with Page Flow Navigation" href="http://msmvps.com/blogs/paulomorgado/Posts/PageFlowNavigation/PageFlow%20Application%20Block%20(2).zip" target="_blank"&gt;changed version of the Page Flow Application Block&lt;/a&gt;.)&lt;/p&gt; &lt;h6&gt;Downloads&lt;/h6&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="PageFlowWithShoppingCartQuickStart Sample With Page Flow Navigation" href="http://msmvps.com/blogs/paulomorgado/Posts/PageFlowNavigation/PageFlowWithShoppingCartQuickstart%20(2).zip" target="_blank"&gt;PageFlowWithShoppingCartQuickStart Sample With Page Flow Navigation&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Page Flow Application Block with Page Flow Navigation" href="http://msmvps.com/blogs/paulomorgado/Posts/PageFlowNavigation/PageFlow%20Application%20Block%20(2).zip" target="_blank"&gt;Page Flow Application Block with Page Flow Navigation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=996084" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category></item><item><title>Page Flow Navigation vs. Page Navigation</title><link>http://msmvps.com/blogs/paulomorgado/archive/2007/07/01/page-flow-navigation-vs-page-navigation.aspx</link><pubDate>Sun, 01 Jul 2007 00:18:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:995436</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=995436</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=995436</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2007/07/01/page-flow-navigation-vs-page-navigation.aspx#comments</comments><description>&lt;h4&gt;Introduction&lt;/h4&gt; &lt;p&gt;I&amp;#39;ve been working with page flows for the past days and the idea of navigating to a page flow instead of navigating between pages belonging to a pageflow is making more sense each time I think about it.&lt;/p&gt; &lt;p&gt;The &lt;a title="patterns &amp;amp; practices - Web Client Software Factory" href="http://www.codeplex.com/websf" target="_blank"&gt;Web Client Software Factory&lt;/a&gt; comes with a &lt;a title="Page Flow Application Block" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Page%20Flow%20Application%20Block" target="_blank"&gt;Page Flow Application Block&lt;/a&gt; that governs the navigation between pages of the same page flow.&lt;/p&gt; &lt;p&gt;The way the &lt;a title="Page Flow Application Block" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Page%20Flow%20Application%20Block" target="_blank"&gt;Page Flow Application Block&lt;/a&gt; identifies a particular page flow is by the URLs of the pages that belong to that page flow. This is possible because you are still navigating to those pages. This also makes it impossible to reuse the same page between page flows.&lt;/p&gt; &lt;p&gt;In this post I will change the &lt;a title="Page Flow Application Block" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Page%20Flow%20Application%20Block" target="_blank"&gt;Page Flow Application Block&lt;/a&gt; (keeping the changes to a minimum) to provide page flow navigation instead of page navigation.&lt;/p&gt; &lt;h4&gt;Changing the Page Flow Definition&lt;/h4&gt; &lt;p&gt;In order to keep changes to a minimum, we&amp;#39;ll use the Name property of the page flow as its URL. This will be the virtual address of the page flow and will also be used as the AbortPage&amp;#39;s URL if one is not provided.&lt;/p&gt; &lt;p&gt;Since the individual pages will no longer be directly accessible, we can drop all methods that correlate pages with URLs:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt;.ContainsUrl(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; url);  &lt;li&gt;&lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt;.GetPageFromUrl(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; url); &lt;/li&gt;&lt;/ul&gt; &lt;h4&gt;Changing the Page Flow Definition Catalog&lt;/h4&gt; &lt;p&gt;Since we are navigating to page flows, we don&amp;#39;t need to keep track of the page&amp;#39;s URLs, which makes the definition catalog simpler:&lt;/p&gt; &lt;div class="quote"&gt;&lt;pre class="code"&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; A catalog of &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;IPageFlowDefinition&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;s.
&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;PageFlowDefinitionCatalog&lt;/span&gt; : &lt;span style="color:#2b91ae;"&gt;IPageFlowDefinitionCatalog
&lt;/span&gt;{
    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt;&amp;gt; catalog = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt;&amp;gt;();

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Gets the number of &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;IPageFlowDefinition&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;s in the catalog.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The number of &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;IPageFlowDefinition&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;s in the catalog.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/value&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Count
    {
        &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.catalog.Count; }
    }

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Removes an &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;IPageFlowDefinition&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; from the catalog.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;definition&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The definition to remove.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Remove(&lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt; definition)
    {
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.catalog.Remove(definition.Name);
    }

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Adds an &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;IPageFlowDefinition&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; to the catalog.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;definition&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;IPageFlowDefinition&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; to add to the catalog.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Add(&lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt; definition)
    {
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.catalog.Add(definition.Name, definition);
    }

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Get an &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;IPageFlowDefinition&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; with a specific URL from the catalog.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;rawUrl&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The URL to search for.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;IPageFlowDefinition&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; with a matching URL.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/returns&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt; GetByUrl(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; rawUrl)
    {
        &lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt; definition;
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.catalog.TryGetValue(rawUrl, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; definition);
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; definition;
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h5&gt;Changing the WorkflowFoundationPageFlowDefinition&lt;/h5&gt;
&lt;p&gt;In order to comply to these changes, the provided implementation (WorkflowFoundationPageFlowDefinition) will need to be changed.&lt;/p&gt;
&lt;p&gt;If an abort page URL is not provided it will default to the not running URL.&lt;/p&gt;
&lt;div class="quote"&gt;&lt;pre class="code"&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Implementation of a page flow definition that relies on the &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;Activities.PageFlow&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;PageFlow activity&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/see&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;.
&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;This class is used to query the page flow metadata and is accessible through the &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;WorkflowFoundationPageFlow.Definition&amp;quot;&amp;gt;&amp;lt;/see&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; propert
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;WorkflowFoundationPageFlowDefinition&lt;/span&gt; : &lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition
&lt;/span&gt;{
    &lt;span style="color:#008000;"&gt;// ...

&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Initializes a new instance of the &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;WorkflowFoundationPageFlowDefinition&amp;quot;&amp;gt;&amp;lt;/see&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; given a &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;Activities.PageFlow&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;PageFlow activity&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/s
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;definition&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;A &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;Activities.PageFlow&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;PageFlow&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/see&amp;gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;exception cref=&amp;quot;ArgumentNullException&amp;quot;&amp;gt;&amp;lt;paramref name=&amp;quot;key&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; is &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see langword=&amp;quot;null&amp;quot;&amp;gt;&amp;lt;/see&amp;gt;&amp;lt;/exception&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; WorkflowFoundationPageFlowDefinition(Activities.&lt;span style="color:#2b91ae;"&gt;PageFlow&lt;/span&gt; definition)
    {
        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (definition == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
            &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;definition&amp;quot;&lt;/span&gt;);

        _definition = definition;
&lt;strong&gt;&lt;em&gt;        _abortPage = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;Page&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;PageFlow.AbortPage&amp;quot;&lt;/span&gt;, (&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(definition.NotRunningUrl) ? &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;._definition.Name : definition.AbortUrl));&lt;/em&gt;&lt;/strong&gt;
    }

    &lt;span style="color:#008000;"&gt;// ...
&lt;/span&gt;}
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h4&gt;Changing the Page Flow Provider&lt;/h4&gt;
&lt;p&gt;The implementation of &lt;span style="color:#2b91ae;"&gt;IPageFlowProvider&lt;/span&gt;.ProcessRequest(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; url) will need to change, although keeping the signature.&lt;/p&gt;
&lt;p&gt;The ProcessResult class will need to be changed. Besides redirecting or doing nothing, there will be a new action: &lt;strong&gt;Rewrite&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="quote"&gt;&lt;pre class="code"&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
///&lt;/span&gt;&lt;span style="color:#008000;"&gt; An object describing the results of a ProcessRequest() call on 
&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;PageFlowHttpModule&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;.
&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult
&lt;/span&gt;{
    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Possible actions to take as a result of the URL processing.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt; : &lt;span style="color:#0000ff;"&gt;int
&lt;/span&gt;    {
        &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; No action to be taken.
&lt;/span&gt;        &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;        None = 0,

        &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Rerwrite the URL to execute the page.
&lt;/span&gt;        &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;        Rewrite = 1,

        &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Redirect the request.
&lt;/span&gt;        &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;        Redirect = 2
    }

    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; _url;
    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt; _action;

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Creates an instance of a ProcessResult.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ProcessResult()
    {
    }

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Creates an instance with the specified properties.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;action&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The action to process.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;url&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The URL.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ProcessResult(&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt; action, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; url)
    {
        _action = action;
        _url = url;
    }

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Gets the URL to redirect to.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Url
    {
        &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _url; }
    }

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Gets the determiniation if the request should be redirected to the Url.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt; Action
    {
        &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _action; }
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Rewrite&lt;/strong&gt; will change the HTTP request in order to execute the page registered for the current state.&lt;/p&gt;
&lt;h5&gt;Changing the WorkflowFoundationPageFlowProvider&lt;/h5&gt;
&lt;p&gt;In order to comply to these changes, the provided implementation (WorkflowFoundationPageFlowProvider) will need to be changed.&lt;/p&gt;
&lt;p&gt;If the navigation is to a page fllow, the provider will need to instruct the HTTP module to rewrite the path. So, every method creating an instance of ProcessResult wil need to be changed.&lt;/p&gt;
&lt;div class="quote"&gt;&lt;pre class="code"&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Implementation that uses Windows Workflow Foundation as the page flow engine.
&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;remarks&amp;gt;
///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;This class is provided as a singleton by the &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;PageFlowDirectory&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; class&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/para&amp;gt;
///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/remarks&amp;gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;WorkflowFoundationPageFlowProvider&lt;/span&gt; : &lt;span style="color:#2b91ae;"&gt;IPageFlowProvider&lt;/span&gt;, &lt;span style="color:#2b91ae;"&gt;IDisposable
&lt;/span&gt;{
    &lt;span style="color:#008000;"&gt;// ...&lt;/span&gt;

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Process the request when there is no instance in the store or the instance is NOT running.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;url&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The request url.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;ProcessResult&amp;quot; /&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; holding the redirect action to take.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;        
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; ProcessWithNoRunningInstance(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; url)
    {
        &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; result;
        &lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt; definition = &lt;span style="color:#2b91ae;"&gt;PageFlowDirectory&lt;/span&gt;.Catalog.GetByUrl(url);
        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (definition != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:#2b91ae;"&gt;IPageFlow&lt;/span&gt; instance = GetPageFlow(definition.PageFlowType, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);
            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (instance == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
            {
                result = ProcessWithNonExistingInstance(definition);
            }
            &lt;span style="color:#0000ff;"&gt;else
&lt;/span&gt;            {
                result = ProcessWithExistingInstance(definition, instance);
            }
        }
        &lt;span style="color:#0000ff;"&gt;else
&lt;/span&gt;        {
&lt;strong&gt;&lt;em&gt;            &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;// Do nothing.
&lt;/span&gt;            result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;(&lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.None, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty); ;&lt;/em&gt;&lt;/strong&gt;
        }

        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; result;
    }

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Process the request with a running page flow instance.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;instance&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The running page flow instance.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;url&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The request url.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;ProcessResult&amp;quot; /&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; holding the redirect action to take.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;        
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; ProcessWithRunningInstance(&lt;span style="color:#2b91ae;"&gt;IPageFlow&lt;/span&gt; instance, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; url)
    {
&lt;strong&gt;&lt;em&gt;        &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;// The default action is to Rewrite to execute the current state&amp;#39;s page.
&lt;/span&gt;        &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;(&lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Rewrite, instance.CurrentPage.Url);

        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!(instance.Definition.Name.Equals(url, &lt;span style="color:#2b91ae;"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase)))
&lt;/em&gt;&lt;/strong&gt;        {
            &lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt; (instance.Definition.Abandonable)
            {
                &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;AbandonBehavior&lt;/span&gt;.AllowAndDiscardInstance:
                    instance.Abort(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);
                    result = ProcessRequest(url);
                    &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;
                &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;AbandonBehavior&lt;/span&gt;.AllowAndSaveInstance:
                    instance.Suspend();
                    result = ProcessRequest(url);
                    &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;
                &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;AbandonBehavior&lt;/span&gt;.Prevent:
&lt;strong&gt;&lt;em&gt;                    &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;// Redirect to the current page flow.
&lt;/span&gt;                    result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;(&lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Redirect, instance.Definition.Name);
&lt;/em&gt;&lt;/strong&gt;                    &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;
            }
        }
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; result;
    }

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Process the request using the specified instance.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;definition&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The page flow definition corresponding to the request url.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;instance&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The existing page flow instance.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;ProcessResult&amp;quot; /&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; holding the redirect action to take.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;        
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; ProcessWithExistingInstance(&lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt; definition, &lt;span style="color:#2b91ae;"&gt;IPageFlow&lt;/span&gt; instance)
    {
        &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; result;
        &lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt; (definition.Abandonable)
        {
            &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;AbandonBehavior&lt;/span&gt;.AllowAndSaveInstance:
                result = ResumeInstance(instance, definition);
                &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;
            &lt;span style="color:#0000ff;"&gt;default&lt;/span&gt;:
&lt;strong&gt;&lt;em&gt;                &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;// Redirect to the current page flow.
&lt;/span&gt;                result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;(&lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Redirect, &lt;span style="color:#2b91ae;"&gt;HttpContext&lt;/span&gt;.Current.Request.AppRelativeCurrentExecutionFilePath);
&lt;/em&gt;&lt;/strong&gt;                &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;
        }
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; result;
    }

    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; ProcessWithNonExistingInstance(&lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt; definition)
    {
        &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; result;
        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#2b91ae;"&gt;HttpContext&lt;/span&gt;.Current != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style="color:#2b91ae;"&gt;HttpContext&lt;/span&gt;.Current.Request.HttpMethod.Equals(&lt;span style="color:#a31515;"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91ae;"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase))
        {
            &lt;span style="color:#008000;"&gt;// NOTE: this special case happens when there is no running instance,
&lt;/span&gt;            &lt;span style="color:#008000;"&gt;//       there are no suspended instances, and the url belongs to a page flow
&lt;/span&gt;            &lt;span style="color:#008000;"&gt;//       but we are on PostBack. In this case we let the request flow, if not we
&lt;/span&gt;            &lt;span style="color:#008000;"&gt;//       send the user to NotRunning url.
&lt;/span&gt;&lt;em&gt;            &lt;/em&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;// Redirect to the current page flow.
&lt;/span&gt;            result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;(&lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Redirect, definition.Name);
&lt;/em&gt;        }
        &lt;span style="color:#0000ff;"&gt;else
&lt;/span&gt;        {
&lt;strong&gt;&lt;em&gt;            &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;// Rewrite to execute the current page flow&amp;#39;s not running page.
&lt;/span&gt;            result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;(&lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Rewrite, definition.NotRunningRedirect);
&lt;/em&gt;&lt;/strong&gt;        }
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; result;
    }

    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; ResumeInstance(&lt;span style="color:#2b91ae;"&gt;IPageFlow&lt;/span&gt; instance, &lt;span style="color:#2b91ae;"&gt;IPageFlowDefinition&lt;/span&gt; definition)
    {
        &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; result;
        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (instance.Status == &lt;span style="color:#2b91ae;"&gt;PageFlowStatus&lt;/span&gt;.Suspended)
        {
&lt;strong&gt;&lt;em&gt;            &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;// Rewrite to execute the current page flow&amp;#39;s not running page.
&lt;/span&gt;            result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;(&lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Rewrite, definition.NotRunningRedirect);
&lt;/em&gt;&lt;/strong&gt;        }
        &lt;span style="color:#0000ff;"&gt;else
&lt;/span&gt;        {
&lt;strong&gt;&lt;em&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (instance.CurrentPage != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
            {
                &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;// Rewrite to execute the current state&amp;#39;s page.
&lt;/span&gt;                result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;(&lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Rewrite, instance.CurrentPage.Url);
            }
            &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#0000ff;"&gt;else
&lt;/span&gt;            {
                &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;// Rewrite to execute the current page flow&amp;#39;s not running page.
&lt;/span&gt;                result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;(&lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Rewrite, definition.NotRunningRedirect);
            }
&lt;/em&gt;&lt;/strong&gt;        }
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; result;
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;Changing the Page Flow HTTP Module&lt;/h4&gt;
&lt;p&gt;With the &lt;a title="Page Flow Application Block" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Page%20Flow%20Application%20Block" target="_blank"&gt;Page Flow Application Block&lt;/a&gt;, every thing starts in its HTTP module. So, we also need to make a few changes here.&lt;/p&gt;
&lt;p&gt;Instead of processing the request in the &lt;a title="HttpApplication.PostAcquireRequestState Event" href="http://msdn2.microsoft.com/library/System.Web.HttpApplication.PostAcquireRequestState.aspx" target="_blank"&gt;PostAcquireRequestState event&lt;/a&gt;, the request will be processed in two steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the &lt;a title="HttpApplication.PostAuthorizeRequest Event" href="http://msdn2.microsoft.com/library/System.Web.HttpApplication.PostAuthorizeRequest.aspx" target="_blank"&gt;PostAuthorizeRequest event&lt;/a&gt;, the page flow provider will be requested to process the request. Because the path to the executing pages is being rewritten, this needs to be done even if no session state is loaded. 
&lt;li&gt;In the &lt;a title="HttpApplication.PostMapRequestHandler Event" href="http://msdn2.microsoft.com/library/System.Web.HttpApplication.PostMapRequestHandler.aspx" target="_blank"&gt;PostMapRequestHandler event&lt;/a&gt;, if the path was rewritten in the &lt;a title="HttpApplication.PostAcquireRequestState Event" href="http://msdn2.microsoft.com/library/System.Web.HttpApplication.PostAcquireRequestState.aspx" target="_blank"&gt;PostAcquireRequestState event&lt;/a&gt;, it&amp;#39;s rewritten back to the original URL. &lt;/li&gt;&lt;/ol&gt;
&lt;div class="quote"&gt;&lt;pre class="code"&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
///&lt;/span&gt;&lt;span style="color:#008000;"&gt; An &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;IHttpModule&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt; for working with PageFlows
&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;PageFlowHttpModule&lt;/span&gt; : &lt;span style="color:#2b91ae;"&gt;IHttpModule
&lt;/span&gt;{
    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; result;
    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; originalUrl;

    &lt;span style="color:#008000;"&gt;// ...
&lt;/span&gt;
    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Initializes the PageFlowHttpModule to work with the &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;HttpApplication&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;context&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;HttpApplication&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Init(&lt;span style="color:#2b91ae;"&gt;HttpApplication&lt;/span&gt; context)
    {
        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (context == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
            &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;context&amp;quot;&lt;/span&gt;);

&lt;strong&gt;&lt;em&gt;        context.PostAuthorizeRequest += &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;EventHandler&lt;/span&gt;(OnPostAuthorizeRequest);
        context.PostMapRequestHandler += &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;EventHandler&lt;/span&gt;(OnPostMapRequestHandler);&lt;/em&gt;&lt;/strong&gt;

        &lt;span style="color:#2b91ae;"&gt;WebConfigurationManager&lt;/span&gt;.OpenWebConfiguration(&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);
        &lt;span style="color:#2b91ae;"&gt;HttpRequestHelper&lt;/span&gt;.LoadExtensionsHandledByPageHandlerFactoryFromConfig((&lt;span style="color:#2b91ae;"&gt;HttpHandlersSection&lt;/span&gt;)&lt;span style="color:#2b91ae;"&gt;WebConfigurationManager&lt;/span&gt;.GetSection(&lt;span style="color:#a31515;"&gt;&amp;quot;system.web/httpHandlers&amp;quot;&lt;/span&gt;));
    }

    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Processes an &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;HttpRequest&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;.
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;param name=&amp;quot;request&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;The request to process&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;    &lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;A &lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;see cref=&amp;quot;ProcessResult&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;.&lt;/span&gt;&lt;span style="color:#808080;"&gt;&amp;lt;/returns&amp;gt;
&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; ProcessRequest(&lt;span style="color:#2b91ae;"&gt;HttpRequest&lt;/span&gt; request)
    {
        &lt;span style="color:#2b91ae;"&gt;Guard&lt;/span&gt;.ArgumentNotNull(request, &lt;span style="color:#a31515;"&gt;&amp;quot;request&amp;quot;&lt;/span&gt;);

        &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt; result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;();

&lt;strong&gt;&lt;em&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#2b91ae;"&gt;HttpRequestHelper&lt;/span&gt;.IsHandledByPageHandlerFactory(request.AppRelativeCurrentExecutionFilePath))&lt;/em&gt;&lt;/strong&gt;
        {
            result = &lt;span style="color:#2b91ae;"&gt;PageFlowDirectory&lt;/span&gt;.Provider.ProcessRequest(request.AppRelativeCurrentExecutionFilePath);
        }
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; result;
    }

&lt;strong&gt;&lt;em&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; OnPostAuthorizeRequest(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91ae;"&gt;EventArgs&lt;/span&gt; e)&lt;/em&gt;&lt;/strong&gt;
    {
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.result = ProcessRequest(&lt;span style="color:#2b91ae;"&gt;HttpContext&lt;/span&gt;.Current.Request);
&lt;strong&gt;&lt;em&gt;        &lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt; (result.Action)
        {
            &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Redirect:
                &lt;span style="color:#2b91ae;"&gt;HttpContext&lt;/span&gt;.Current.Response.Redirect(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.result.Url, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;);
                &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;
            &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Rewrite:
                System.Diagnostics.&lt;span style="color:#2b91ae;"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.result.Url);
                &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.originalUrl = &lt;span style="color:#2b91ae;"&gt;HttpContext&lt;/span&gt;.Current.Request.AppRelativeCurrentExecutionFilePath;
                &lt;span style="color:#2b91ae;"&gt;HttpContext&lt;/span&gt;.Current.RewritePath(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.result.Url, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;);
                &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;
        }&lt;/em&gt;&lt;/strong&gt;
    }

&lt;strong&gt;&lt;em&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; OnPostMapRequestHandler(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91ae;"&gt;EventArgs&lt;/span&gt; e)
    {
        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.result != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.result.Action == &lt;span style="color:#2b91ae;"&gt;ProcessResult&lt;/span&gt;.&lt;span style="color:#2b91ae;"&gt;ProcessAction&lt;/span&gt;.Rewrite))
        {
            System.Diagnostics.&lt;span style="color:#2b91ae;"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.result.Url);
            &lt;span style="color:#2b91ae;"&gt;HttpContext&lt;/span&gt;.Current.RewritePath(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.originalUrl, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;);
        }
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.result = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;
    }&lt;/em&gt;&lt;/strong&gt;
}
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;This implementation has several benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deployment&lt;/strong&gt; - There is no need to deploy the URL of each page. The entire set of pages of a page flow can be changed without having to notify users or reconfigure menus. 
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt; - This adds two kinds of security: 
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Security by obscurity&lt;/strong&gt; - The user will never now how many pages make a particular page flow. 
&lt;li&gt;&lt;strong&gt;URL security&lt;/strong&gt; - The &amp;quot;real&amp;quot; pages can, and should, be blocked from acess to the users. 
&lt;li&gt;&lt;strong&gt;Page flow security&lt;/strong&gt; - The user can never jump into a particular state. &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Disclaimer&lt;/h4&gt;
&lt;p&gt;This implementation has not been fully tested and has known problems.&lt;/p&gt;
&lt;h6&gt;Downloads&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Page Flow Application Block with Page Flow Navigation" href="http://msmvps.com/blogs/paulomorgado/Posts/PageFlowNavigation/PageFlow%20Application%20Block%20(2).zip" target="_blank"&gt;Page Flow Application Block with Page Flow Navigation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=995436" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/blogs/paulomorgado/Posts/PageFlowNavigation/PageFlow%20Application%20Block%20(2).zip" length="1002" type="application/x-zip-compressed" /><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WCSF/default.aspx">WCSF</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PnP/default.aspx">PnP</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftwareFactories/default.aspx">SoftwareFactories</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PageFlow/default.aspx">PageFlow</category></item></channel></rss>