<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Windows Workflow</title>
        <link>http://geekswithblogs.net/paulmehner/category/4761.aspx</link>
        <description>Microsoft Windows Workflow</description>
        <language>en-US</language>
        <copyright>Paul Mehner</copyright>
        <managingEditor>paul.mehner@ssdotnet.org</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Wintellect Blog</title>
            <link>http://geekswithblogs.net/paulmehner/archive/2007/08/06/114451.aspx</link>
            <description>&lt;p&gt;I'll cross post for awhile to this blog; however, I'm now also posting on the Wintellect blog site at &lt;a href="http://www.wintellect.com/cs/blogs"&gt;http://www.wintellect.com/cs/blogs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114451"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114451" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulmehner/aggbug/114451.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Mehner</dc:creator>
            <guid>http://geekswithblogs.net/paulmehner/archive/2007/08/06/114451.aspx</guid>
            <pubDate>Tue, 07 Aug 2007 02:32:21 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulmehner/comments/114451.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulmehner/archive/2007/08/06/114451.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulmehner/comments/commentRss/114451.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulmehner/services/trackbacks/114451.aspx</trackback:ping>
        </item>
        <item>
            <title>A Tale Of The Unhandled Workflow Exception</title>
            <link>http://geekswithblogs.net/paulmehner/archive/2007/08/06/114450.aspx</link>
            <description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;font face="Calibri"&gt;Workflow Foundation (WF) catches the unhandled exceptions of any workflow instance that it’s charged with running. Upon catching the unhandled exception of a workflow instance, WF terminates it and raises a WorkflowTerminated event where it generously includes the exception in the event arguments. At first glance this seemed like a reasonable approach. After all, one doesn’t want a sloppy and poorly crafted workflow taking down an entire service and jettisoning hundreds of other smoothly executing workflows. &amp;lt;tears&amp;gt; Unfortunately my initial enthusiasm was soon dampened by a series of conversations with Jeffrey Richter.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Jeffrey convinced me that my initial thoughts were dead wrong, and that the design chosen by the WF team is inherently deficient in this area. &amp;lt;/tears&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;font face="Calibri"&gt;The basic problem boils down to this: WF isn’t impervious to the perils of unhandled exceptions any more than other managed code that we write. The fact that we’ve placed the WF runtime in charge of managing multiple workflows doesn’t excuse it from this priority rule; to the contrary, it would seem to exacerbate the problem. The fact that the runtime runs all of workflow instances &lt;em&gt;in its own AppDomain&lt;/em&gt; seems to seal the deal. At the end of the day, workflows are compiled and executed as machine instructions under the management and control of the CLR. An unhandled exception to a workflow is exactly the same as an unhandled exception to a C# program. The perils of catching all unhandled exceptions are well known and can be found in Jeffrey’s &lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;u&gt;&lt;a href="http://www.amazon.com/CLR-via-Second-Pro-Developer/dp/0735621632/ref=pd_bbs_sr_1/002-3137176-3280817?ie=UTF8&amp;amp;s=books&amp;amp;qid=1186460192&amp;amp;sr=8-1"&gt;&lt;font color="#800080"&gt;CLR via C#&lt;/font&gt;&lt;/a&gt;&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt; book and many other sources, so they aren’t repeated here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;font face="Calibri"&gt;It would seem then that the only choice available to the WF team to have written a more resilient workflow runtime then would have been to have created a separate AppDomain for each workflow instance so that AppDomains with unhandled exceptions could be terminated without impacting other workflows or the WF runtime. This leaves me feeling slightly nauseas because the performance implications of adding this level of overhead would have undoubtedly been (dare I say) very noticeable; however, I can think of no other option with managed code to deal with unhandled exceptions and still play-by-the-rules. While I was no “fly-on-the-wall” when WF was being designed, I can well imagine that the workflow team was forced to choose performance over the other harder-to-measure and easier-to-brush-under-the-carpet objectives. And that is the end of tonight’s tale of the unhandled workflow exception.&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114450"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114450" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulmehner/aggbug/114450.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Mehner</dc:creator>
            <guid>http://geekswithblogs.net/paulmehner/archive/2007/08/06/114450.aspx</guid>
            <pubDate>Tue, 07 Aug 2007 02:30:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulmehner/comments/114450.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulmehner/archive/2007/08/06/114450.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulmehner/comments/commentRss/114450.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulmehner/services/trackbacks/114450.aspx</trackback:ping>
        </item>
        <item>
            <title>Windows Workflow Foundation BRE Does Not Update Value Type Fields of a Structure</title>
            <link>http://geekswithblogs.net/paulmehner/archive/2007/01/29/104826.aspx</link>
            <description>&lt;FONT face=Calibri&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Calibri"&gt;The Business Rules Engine of Windows Workflow Foundation does not appear to update value type fields&amp;nbsp;that are part of a structure. When the THEN action of a rule is executed and a calculation updates a value type in a struct, the value of the structure member remains zero. Turning on tracing of the execution of individual business rules shows successful execution of the assignments, but the targeted field maintains its initial value of zero during its use in subsequent calculations. No exceptions are thrown and tipping the BRE via the "update()" command has no impact on this behavior. In my case, changing the struct to a class cured the BRE of this ailment.&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=104826"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=104826" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulmehner/aggbug/104826.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Mehner</dc:creator>
            <guid>http://geekswithblogs.net/paulmehner/archive/2007/01/29/104826.aspx</guid>
            <pubDate>Mon, 29 Jan 2007 13:22:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulmehner/comments/104826.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulmehner/archive/2007/01/29/104826.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulmehner/comments/commentRss/104826.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulmehner/services/trackbacks/104826.aspx</trackback:ping>
        </item>
        <item>
            <title>Console Hosted Windows Workflows Hang With TestRunner</title>
            <link>http://geekswithblogs.net/paulmehner/archive/2006/06/19/82395.aspx</link>
            <description>It appears that console hosted Windows Workflow applications&amp;nbsp;hang and CPU usage climbs to 100% when executing&amp;nbsp;the CreateWorkflow method from program.cs when &lt;A href="http://www.mailframe.net/products/TestRunner/"&gt;Mailframe's Testrunner&lt;/A&gt; is installed on the same machine. Testrunner is a Visual Studio add-in that integrates running NUnit tests and provides test performance and coverage metrics (good when a project's unit tests were previously written with NUnit, or you don't have or wish to purchase a VSTS license). Removing Testrunner seems to fully resolve this problem.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=82395"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=82395" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulmehner/aggbug/82395.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Mehner</dc:creator>
            <guid>http://geekswithblogs.net/paulmehner/archive/2006/06/19/82395.aspx</guid>
            <pubDate>Tue, 20 Jun 2006 04:14:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulmehner/comments/82395.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulmehner/archive/2006/06/19/82395.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulmehner/comments/commentRss/82395.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulmehner/services/trackbacks/82395.aspx</trackback:ping>
        </item>
        <item>
            <title>WinFX Becomes .NET Framework 3.0</title>
            <link>http://geekswithblogs.net/paulmehner/archive/2006/06/10/81370.aspx</link>
            <description>&lt;P&gt;&lt;A href="http://www.microsoft.com/presspass/exec/somasegar/default.mspx"&gt;Microsoft Corporate V.P. Developer Division&amp;nbsp;Soma Somasegar&lt;/A&gt; announced today on his blog that the &lt;A href="http://blogs.msdn.com/somasegar/archive/2006/06/09/624300.aspx"&gt;WinFX name will be officially changed to .NET Framework 3.0&lt;/A&gt;. Windows Workflow Foundation will also be a part of the .NET 3.0 Framework.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/somasegar/archive/2006/06/09/624300.aspx"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=81370"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=81370" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulmehner/aggbug/81370.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Mehner</dc:creator>
            <guid>http://geekswithblogs.net/paulmehner/archive/2006/06/10/81370.aspx</guid>
            <pubDate>Sat, 10 Jun 2006 08:55:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulmehner/comments/81370.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulmehner/archive/2006/06/10/81370.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulmehner/comments/commentRss/81370.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulmehner/services/trackbacks/81370.aspx</trackback:ping>
        </item>
    </channel>
</rss>