<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>Architecture &amp; Design</title>
        <link>http://www.rickgaribay.net/category/6.aspx</link>
        <description>Architecture &amp; Design</description>
        <language>en-US</language>
        <copyright>Rick G. Garibay</copyright>
        <managingEditor>rick@rickgaribay.net</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <item>
            <title>Desert Code Camp 2010.1 &amp;ndash; The Goods</title>
            <link>http://rickgaribay.net/archive/2010/05/19/desert-code-camp-2010.1-content.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt; &lt;p&gt;This was a great event as usual, and I really have to hand it to @jguadango, @coneybeer, Devry University and all the volunteers for putting this together. The logistics, facilities, scheduling and planning for 55+ sessions is not easy. &lt;/p&gt; &lt;p&gt;I’ve presented at every Desert Code Camp since the very first one, so I think this one makes 6 or 7. Code Camp is always a great day to interact with Phoenix’s community of technologists through conversation, teaching and learning and this one was no exception.&lt;/p&gt; &lt;p&gt;Below are the goods for each session, and as promised I’ve included videos of my WCF and AppFabric Service Bus demos.&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="704"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="314"&gt; &lt;p align="center"&gt;&lt;strong&gt;Session&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="10"&gt; &lt;p align="center"&gt;&lt;strong&gt;Content&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="10"&gt; &lt;p align="center"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="368"&gt; &lt;p align="center"&gt;&lt;strong&gt;Demo Vids&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="314"&gt;&lt;a href="http://www.desertcodecamp.com/Session.aspx?SessionId=78"&gt;Let the Good Guys in with Azure AppFabric Service Bus&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="10"&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 229px; padding-right: 0px; height: 66px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/DCC2010.1/Let%20the%20Good%20Guys%20in%20with%20Azure%20AppFabric%20Service%20Bus.pdf" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt; &lt;td valign="top" width="10"&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 242px; padding-right: 0px; height: 60px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/DCC2010.1/Service%20Bus.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt; &lt;td valign="top" width="368"&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="331"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="472"&gt;&lt;a href="http://www.youtube.com/watch?v=sTpZRaaeRcI" target="_blank"&gt;Demo1: Unicast One-Way Messaging with NetOneWayRelay Binding&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="472"&gt;&lt;a href="http://www.youtube.com/watch?v=XZHczdUkB0U" target="_blank"&gt;Demo 2: Multicast On-Way Messaging with NetRelayBinding&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="472"&gt;&lt;a href="http://www.youtube.com/watch?v=9K1DaZQ0zrk" target="_blank"&gt;Demo 3: World Peace &amp;amp; Fireworks with NetTcpRelayBinding&lt;/a&gt; (HD)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="314"&gt;&lt;a href="http://www.desertcodecamp.com/Session.aspx?SessionId=79"&gt;Beyond the Whiteboard: Enforcing Conceptual Integrity with Visual Studio 2010&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="10"&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 234px; padding-right: 0px; height: 63px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/DCC2010.1/Beyond%20the%20Whiteboard%20-%20Enforcing%20Conceptual%20Integrity%20with%20Visual%20Studio%202010.pdf" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt; &lt;td valign="top" width="10"&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 246px; padding-right: 0px; height: 70px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/DCC2010.1/Northwind.Online.Sample.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt; &lt;td valign="top" width="368"&gt;N/A&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="314"&gt;&lt;a href="http://www.desertcodecamp.com/Session.aspx?SessionId=77"&gt;New Features in WCF 4 that will Instantly Make you More Productive&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="10"&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 231px; padding-right: 0px; height: 63px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/DCC2010.1/New%20Features%20in%20WCF%204%20that%20will%20Instantly%20Make%20you%20More%20Productive.pdf" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt; &lt;td valign="top" width="10"&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 242px; padding-right: 0px; height: 63px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/DCC2010.1/WCF4.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt; &lt;td valign="top" width="368"&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="331"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="329"&gt;&lt;a href="http://www.youtube.com/watch?v=qj2ams-hs10" target="_blank"&gt;Demo 1: Convention over Configuration&lt;/a&gt; (HD)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="329"&gt;&lt;a href="http://www.youtube.com/watch?v=T-rtnYpYe80" target="_blank"&gt;Demo 2: Dynamic Endpoint Discovery&lt;/a&gt; (HD) &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="329"&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=25S14AEKJGs" target="_blank"&gt;Demo 3: Monitoring Service Availability with WS-Discovery Announcements&lt;/a&gt; (HD)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;If you have any comments or questions, drop me a line.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/283.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2010/05/19/desert-code-camp-2010.1-content.aspx</guid>
            <pubDate>Thu, 20 May 2010 02:16:02 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/283.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2010/05/19/desert-code-camp-2010.1-content.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/283.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/283.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Studio 2010 Ultimate Event Content Download</title>
            <link>http://rickgaribay.net/archive/2010/03/13/visual-studio-2010-ultimate-event-content-download.aspx</link>
            <description>&lt;p&gt;Thanks to all who came out to the event in Phoenix, Salt Lake City &amp;amp; Las Vegas. We had a great turnout at all events with great questions and discussions.&lt;/p&gt;
&lt;p&gt;Remember that the conversation continues on &lt;a target="_blank" href="http://twitter.com/#search?q=%23vs2010phx"&gt;twitter&lt;/a&gt;. &lt;a target="_blank" href="http://twitter.com/#search?q=%23vs2010slc"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" title="image" border="0" alt="image" align="right" width="240" height="162" src="http://rickgaribay.net/Images/CustomContent/VisualStudio2010UltimateEventSaltLakeCit_8195/image_4.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;If you attended the event and have a question or comment for any of the presenters, use the following hashtags: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Phoenix: #vs2010phx &lt;/li&gt;
    &lt;li&gt;Salt Lake City: #vs2010slc &lt;/li&gt;
    &lt;li&gt;Las Vegas: #vs2010vegas&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="center"&gt;Below are the presentations from all four sessions in each city:   &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="912"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Phoenix&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;A Lap Around Visual Studio 2010&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Rick G. Garibay&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/Lap%20Around%20VS%202010%20Garibay.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Phoenix&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;Agile Management with TFS&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;&lt;a target="_blank" href="http://blogs.neudesic.com/blogs/brendon_birdoes/default.aspx"&gt;Brendon Birdoes&lt;/a&gt;&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/TFS%202010%20Agile%20Management%20Brendon.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;*&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Phoenix&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;No More "No Repro"&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;&lt;a target="_blank" href="http://blogs.neudesic.com/blogs/brendon_birdoes/default.aspx"&gt;Brendon Birdoes&lt;/a&gt;&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/No%20More%20No%20Repro%20Brendon.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;*&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Phoenix&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;Architecture for Everyone&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Rick G. Garibay&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/Architecture%20for%20Everyone%20Garibay.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Salt Lake City&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;A Lap Around Visual Studio 2010&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Rick G. Garibay&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/Lap%20Around%20VS%202010%20Garibay.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Salt Lake City&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;Agile Management with TFS&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Jeff Leite&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;*&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/TFS%202010%20Agile%20Project%20Management.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Salt Lake City&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;No More "No Repro"&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Jeff Leite&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;*&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/No%20More%20No%20Repro.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Salt Lake City&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;Architecture for Everyone&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Rick G. Garibay&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/Architecture%20for%20Everyone%20Garibay.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Las Vegas&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;A Lap Around Visual Studio 2010&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Rick G. Garibay&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/Lap%20Around%20VS%202010%20Garibay.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Las Vegas&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;Agile Management with TFS&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Mickey Williams&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;*&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/TFS%202010%20Agile%20Project%20Management.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Las Vegas&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;No More "No Repro"&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Mickey Williams&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;*&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/No%20More%20No%20Repro.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="190"&gt;Las Vegas&lt;/td&gt;
            &lt;td valign="top" width="421"&gt;Architecture for Everyone&lt;/td&gt;
            &lt;td valign="top" width="473"&gt;Rick G. Garibay&lt;/td&gt;
            &lt;td valign="top" width="146"&gt;&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 250px; PADDING-RIGHT: 0px; HEIGHT: 59px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Talks/VS%202010%20Ultimate/Architecture%20for%20Everyone%20Garibay.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;* Note that content for all venues is very similar but may vary from presenter to presenter. &lt;strike&gt;All content for both venues will be available soon so please check back shortly.&lt;/strike&gt;&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/275.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2010/03/13/visual-studio-2010-ultimate-event-content-download.aspx</guid>
            <pubDate>Sun, 14 Mar 2010 01:45:01 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2010/03/13/visual-studio-2010-ultimate-event-content-download.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/275.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/275.aspx</trackback:ping>
        </item>
        <item>
            <title>.NET 4.0 and Visual Studio 2010 Beta 2 Announcements</title>
            <link>http://rickgaribay.net/archive/2009/10/19/264.aspx</link>
            <description>&lt;p&gt;.NET 4.0 and Visual Studio 2010 Beta 2 is now available to MSDN subscribers as of 9:30 AM PST. This release includes the new version of Connected Framework products like &lt;a target="_blank" href="http://msdn.microsoft.com/wcf"&gt;WCF&lt;/a&gt; and &lt;a target="_blank" href="http://msdn.microsoft.com/wf"&gt;WF&lt;/a&gt; 4.0, Entity Framework 4.0 and a host of additional new features across work streams including MEF, Parallel Extensions, and significant enhancements to Visual Studio Team System and Team Build.&lt;/p&gt;
&lt;p&gt;Having spent some time with both WCF and WF limited CTP, Beta and pre-Beta 2 bits, this release includes significant improvements, re-design and new features specifically around WCF and WF 4.0. If  you are like &lt;a target="_blank" href="http://www.rickgaribay.net/contact.aspx"&gt;me&lt;/a&gt;, you will likely welcome many of the designer enhancements in WF 4.0 and may lament a number of designer design changes within messaging activities. You’ll just need to rip off the shrink wrap on Beta 2 to find out yourself!&lt;/p&gt;
&lt;p&gt;I plan to start doing a significant amount of writing around WF 4.0 because I think that having been re-written from the ground up, WF 4.0 addresses many, many of the pain points in the 3.0 and 3.5 version, and I believe that WF + WCF 4.0 will lower the barrier of entry for writing workflow and service/model-oriented applications. In addition, the improvements within Workflow Services and the ease with which those new to WCF can get a service up and running are both significant and necessary to increasing the reach of these fantastic technologies.&lt;/p&gt;
&lt;p&gt;Another major area of VS 2010 I am excited about is in the new architecture and design tools in Microsoft Visual Studio Team System 2010 Architecture Edition which introduces new UML designers, use cases, activity diagrams, sequence diagrams and the ability to explore and visualize existing code, design and apply layering to enforce dependency rules, and physical designers to visualize, analyze, and refactor your software. In May of the year, I &lt;a target="_blank" href="http://www.slideshare.net/stevenl/phoenix-session-5-architecture-without-big-design-up-front-garibay"&gt;demonstrated&lt;/a&gt; how VS 2010 extends UML logical views into physical views of your code along with how to create relationships from these views to work items and project metrics, and how to programmatically transform models into patterns for other domains and disciplines.&lt;/p&gt;
&lt;p&gt;Needless to say, I’m excited about VS 2010 Beta 2, and am even more excited to announce that the official launch of Visual Studio 2010 will take place on March 22nd, 2010.&lt;/p&gt;
&lt;p&gt;Until then, you can download Beta 2 on October 21st here: &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some other notes of interest:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Microsoft is announcing a new, streamlined packaging lineup and licensing options for Visual Studio 2010 and MSDN. This includes an "Ultimate Offer" to help customers upgrade to the latest developer tools. For more information on the new packaging, licensing, and pricing of Visual Studio 2010, visit: &lt;a href="http://go.microsoft.com/fwlink/?LinkID=166249"&gt;http://go.microsoft.com/fwlink/?LinkID=166249&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;As you may have noticed, MSDN has undergone a significant redesign which includes new benefits for all MSDN subscribers: &lt;a href="http://msdn.microsoft.com/en-us/default.aspx"&gt;http://msdn.microsoft.com/en-us/default.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;March 22nd will be here before you know it, so jump on the Beta 2 bits now and get ready!&lt;/p&gt;
&lt;p&gt;Oh, and don’t forget, PDC 2009 is right around the corner. Register now for key insights you just won’t find at any other conference: &lt;a title="http://microsoftpdc.com/" href="http://microsoftpdc.com/"&gt;http://microsoftpdc.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/264.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2009/10/19/264.aspx</guid>
            <pubDate>Mon, 19 Oct 2009 23:30:00 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2009/10/19/264.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/264.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/264.aspx</trackback:ping>
        </item>
        <item>
            <title>Unit Testing Microsoft Sync Framework 2.0 &amp;amp; WCF</title>
            <link>http://rickgaribay.net/archive/2009/08/17/unit-testing-microsoft-sync-framework-amp-wcf.aspx</link>
            <description>&lt;p&gt;I just wrapped up some work for a client that entails exposing the Sync Framework 2.0 via WCF.&lt;/p&gt;  &lt;p&gt;We are using Sync Framework 2.0 CTP 2 to support occasionally connected client scenarios between applications deployed out in the edge and core services hosted in the client’s cloud. I am using WCF to wrap the Sync Fx APIs to support interoperable synchronization support via SOAP 1.1. This way, any client can on-ramp with the core services and essentially become self-provisioned by initiating and initial synchronization to download required data necessary to come on line. In addition, when events happen out on the edge, the client can synchronize each event back to the cloud using an upload semantic. &lt;/p&gt;  &lt;p&gt;There are many benefits to using the Sync Fx as opposed to rolling your own, and one benefit is the extremely simple provider model which makes basic synchronization scenarios a breeze, particularly between relational replicas such as SQL Server. Note however, that Sync Fx is fully extensible and capable of synchronizing any two memory streams. &lt;/p&gt;  &lt;p&gt;So, the basic idea is that given a SyncProvider for the local and remote replica, any two data sources/applications can be synchronized:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UnitTestingMicrosoftSyncFrameworkWCF_13226/image_5.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://rickgaribay.net/Images/CustomContent/UnitTestingMicrosoftSyncFrameworkWCF_13226/image_thumb_5.png" width="640" height="394" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In my scenario, the local client out in the edge utilizes the out of the box SqlSyncProvider. The goal was to expose the cloud over HTTP using SOAP, which required some understanding of the underlying APIs. From there, it was simply a matter of wrapping the Sync Fx APIs in a service layer, so that I would arrive at something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UnitTestingMicrosoftSyncFrameworkWCF_13226/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://rickgaribay.net/Images/CustomContent/UnitTestingMicrosoftSyncFrameworkWCF_13226/image_thumb_6.png" width="640" height="371" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;By providing a proxy to the orchestrator, I was able to implement a proxy which is polymorphic with RelationalSyncProvider. &lt;/p&gt;  &lt;p&gt;Immediately it should be obvious that this is not your typical integration scenario. Essentially, I am extending a framework by exposing it over WCF so that any orchestrator can leverage the WebSyncProvider. &lt;/p&gt;  &lt;p&gt;I started the implementation by writing some tests. It was simple enough to extract an interface for the RelationalSyncProvider type because it is abstract. I used RhinoMocks to stub it, which worked great but where I ran into problems was in recording expectations on the return types because there are not a lot of test seams in the framework. With the absence of setters on main properties that I needed to assert, I needed a way to reach into the framework types and manipulate them so that I could develop the CUT  (in this case the ServiceContract implementation) independent of the framework.&lt;a href="http://rickgaribay.net/Images/CustomContent/UnitTestingMicrosoftSyncFrameworkWCF_13226/clip_image002.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" align="right" src="http://rickgaribay.net/Images/CustomContent/UnitTestingMicrosoftSyncFrameworkWCF_13226/clip_image002_thumb.jpg" width="240" height="227" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb514191.aspx" target="_blank"&gt;Publicize.exe&lt;/a&gt; works pretty nicely for what I was looking for. &lt;/p&gt;  &lt;p&gt;For example, let’s say I want to stub a closed/framework type so that I can actually write my test without having to resort to integrating with the framework (which wouldn’t be a unit test at all), in this case, a couple of types in the Microsoft.Syncronization.dll assembly. &lt;/p&gt;  &lt;p&gt;I run Publicize.exe Microsoft.Syncronization.dll and it generates a shadow assembly called Microsoft.Syncronization_Accessor.dll, which takes all types, adds _Accessor and exposes all non-public members as public as shown in Reflector on the right. &lt;/p&gt;  &lt;p&gt;This pretty powerful. &lt;/p&gt;  &lt;p&gt;I can now stub the return type of any closed/framework class and test as long as I am asserting *properties*, which is pretty common:&lt;/p&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        [TestMethod]&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetChangesShouldReturnNumberOfChangesApplied()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            MockRepository mockRepository = &lt;span class="kwrd"&gt;new&lt;/span&gt; MockRepository();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            RelationalSyncProvider provider = mockRepository.Stub&amp;lt;RelationalSyncProvider&amp;gt;();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (mockRepository.Record())&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                &lt;span class="rem"&gt;// Set up the out parameter on RelationalSyncProvider Stub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                DbSyncContext changeDataRetriever = &lt;span class="kwrd"&gt;new&lt;/span&gt; DbSyncContext();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                &lt;span class="rem"&gt;// Set up ScopeProgress property on DbySyncContext instance&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                &lt;span class="rem"&gt;/*&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&lt;span class="rem"&gt;                 * Note that in order to test for number of changes applied, we need to reach into the&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&lt;span class="rem"&gt;                 * DbSyncScopeProgress and access the _totalChanges private member &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&lt;span class="rem"&gt;                 * so that public properties can be asserted. This is because the TotalChanges property only has a &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&lt;span class="rem"&gt;                 * getter, so the only way to influence the value is through it's backing field.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&lt;span class="rem"&gt;                 */&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                DbSyncScopeProgress dbSyncScopeProgress = &lt;span class="kwrd"&gt;new&lt;/span&gt; DbSyncScopeProgress();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                &lt;span class="rem"&gt;// Reference the actual object which will be accessed by the generated accessor&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                PrivateObject obj = &lt;span class="kwrd"&gt;new&lt;/span&gt; PrivateObject(dbSyncScopeProgress);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                &lt;span class="rem"&gt;// Generated accessor which wraps the type to be exposed using reflection.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="rem"&gt;// Instead of writing the reflection code manually, Publicize.exe was run against the real assembly,&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                &lt;span class="rem"&gt;// which in turn generated reflection wrappers for *all* types.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                DbSyncScopeProgress_Accessor dbSyncScopeProgressAccessor = &lt;span class="kwrd"&gt;new&lt;/span&gt; DbSyncScopeProgress_Accessor(obj);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                &lt;span class="rem"&gt;// Look ma, I am accessing a private field&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                dbSyncScopeProgressAccessor._tablesProgress = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;DbSyncTableProgress&amp;gt;();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                &lt;span class="rem"&gt;// Now we need to repeat the same process again for this type, which is at the heart of what we need to&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                &lt;span class="rem"&gt;// gain access to.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                DbSyncTableProgress dbSyncTableProgress = &lt;span class="kwrd"&gt;new&lt;/span&gt; DbSyncTableProgress();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                &lt;span class="rem"&gt;// Provides the accessor with a reference to the actual object&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                obj = &lt;span class="kwrd"&gt;new&lt;/span&gt; PrivateObject(dbSyncTableProgress);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                &lt;span class="rem"&gt;// Generated accessor which wraps the type to be exposed using reflection.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                &lt;span class="rem"&gt;// Instead of writing the reflection code manually, Publicize.exe was run against the real assembly,&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                &lt;span class="rem"&gt;// which in turn generated reflection wrappers for *all* types.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                DbSyncTableProgress_Accessor dbSyncTableProgressAccessor = &lt;span class="kwrd"&gt;new&lt;/span&gt; DbSyncTableProgress_Accessor(obj);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;                &lt;span class="rem"&gt;// Set the _rowsApplied field so that the stubbed return instance of DbSyncScopeProgress can be asserted.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;                dbSyncTableProgressAccessor._rowsApplied = 42;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;                &lt;span class="rem"&gt;// Add the dbSyncTableProgress to the private collection&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                dbSyncScopeProgressAccessor._tablesProgress.Add(dbSyncTableProgress);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;                &lt;span class="rem"&gt;// Now, set the property to our used and abused instance of DbSyncScopeProgress&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                changeDataRetriever.ScopeProgress = dbSyncScopeProgress;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                &lt;span class="rem"&gt;// Provider is implemented in COM so out params are prevelant (yuk)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;                &lt;span class="kwrd"&gt;object&lt;/span&gt; changeDataRetrieverObj = changeDataRetriever;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;                &lt;span class="rem"&gt;// Set the expectation&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;                provider.GetChangeBatch(0, &lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;span class="kwrd"&gt;out&lt;/span&gt; changeDataRetrieverObj);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;                &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;                &lt;span class="rem"&gt;// Initialize params&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;                SyncIdFormatGroup idFormats = &lt;span class="kwrd"&gt;new&lt;/span&gt; SyncIdFormatGroup();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;                SyncKnowledge destinationKnowledge = &lt;span class="kwrd"&gt;new&lt;/span&gt; SyncKnowledge();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;                ForgottenKnowledge sourceForgottenKnowledge = &lt;span class="kwrd"&gt;new&lt;/span&gt; ForgottenKnowledge();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;                &lt;span class="rem"&gt;// Stub the return, including the object reference to DbSyncContext&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;                LastCall.Return(&lt;span class="kwrd"&gt;new&lt;/span&gt; ChangeBatch(idFormats, destinationKnowledge, sourceForgottenKnowledge))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;                    .OutRef(changeDataRetrieverObj).IgnoreArguments();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;            IRelationalSyncManager manager = &lt;span class="kwrd"&gt;new&lt;/span&gt; RelationalSyncManager();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  79:  &lt;/span&gt;            &lt;span class="rem"&gt;// Inject the stub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  80:  &lt;/span&gt;            manager.Provider = provider;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  81:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  82:  &lt;/span&gt;            SyncKnowledge localKnowledge = &lt;span class="kwrd"&gt;new&lt;/span&gt; SyncKnowledge();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  83:  &lt;/span&gt;            DbSyncContext returnedContext = &lt;span class="kwrd"&gt;new&lt;/span&gt; DbSyncContext();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  84:  &lt;/span&gt;            returnedContext.ScopeProgress = &lt;span class="kwrd"&gt;new&lt;/span&gt; DbSyncScopeProgress();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  85:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  86:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  87:  &lt;/span&gt;            var changeBatch = manager.GetChanges(0, localKnowledge, &lt;span class="kwrd"&gt;out&lt;/span&gt; returnedContext);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  88:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  89:  &lt;/span&gt;            DbSyncContext context = returnedContext;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  90:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  91:  &lt;/span&gt;            Assert.IsTrue(context.ScopeProgress.TotalChangesApplied ==42);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  92:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  93:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;There is a bit of work here, but with a bit of elbow grease thanks to Visual Studio Test Tools, RhinoMocks, reflection and a little code generation the framework is testable.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/256.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2009/08/17/unit-testing-microsoft-sync-framework-amp-wcf.aspx</guid>
            <pubDate>Tue, 18 Aug 2009 04:46:33 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2009/08/17/unit-testing-microsoft-sync-framework-amp-wcf.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/256.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/256.aspx</trackback:ping>
        </item>
        <item>
            <title>Phoenix Visual Studio Team System Big Event was BIG!</title>
            <link>http://rickgaribay.net/archive/2009/05/11/phoenix-visual-studio-team-system-big-event-was-big.aspx</link>
            <description>&lt;p&gt;Thanks to all who came out for the &lt;a href="http://rickgaribay.net/archive/2009/04/13/phoenix-visual-studio-team-system-big-event-is-coming-to.aspx"&gt;Visual Studio Team System Big Event on Thursday, May 7th&lt;/a&gt;! &lt;a href="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/DSCN0480.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="100" alt="DSCN0480" src="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/DSCN0480_thumb.jpg" width="244" align="right" border="0" /&gt;&lt;/a&gt;We had a great time with the Microsoft Developer Evangelist team, Microsoft Technical Specialists,  MVPs and influencers who at the end of the full day of action packed training left no doubt that Visual Studio Team System is &lt;strong&gt;BIG&lt;/strong&gt;! &lt;/p&gt;  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/P5070484.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="184" alt="P5070484" src="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/P5070484_thumb.jpg" width="244" align="left" border="0" /&gt;&lt;/a&gt;Dan Weinman, Senior Consultant at Neudesic kicked off with the keynote on  "&lt;b&gt;Development Best Practices &amp;amp; How Microsoft Helps&lt;/b&gt;" and set the stage for what the day full of training had in store. Dan talked about the various roles that VSTS supports and how each role comes together to enact process under a single tool that maximizes transparency and communication on Agile teams.  &lt;/p&gt;  &lt;p&gt;Next, Brendon Birdoes, Principal Consultant at Neudesic delivered a great talk on &lt;a href="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/P5070488.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="184" alt="P5070488" src="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/P5070488_thumb.jpg" width="244" align="right" border="0" /&gt;&lt;/a&gt;Test-Driven-Development with Visual Studio. Brendon covered unit testing, including test first development and showed off the refactoring capabilities right within the IDE  along with code coverage. Brendon talked about how important code coverage and quality assertions are to ensuring that your unit tests are as useful as possible in maintaining high degrees of quality within your software projects. &lt;/p&gt;  &lt;p&gt;Following the excellent session on TDD, Visual Studio Team System MVP Dave McKinstry delivered a session entitled ""It Works on My Machine!" Closing the Loop Between Development &amp;amp; Testing" which discussed the close integration between testing tools in Visual Studio Team System and the code itself which minimizes the cost and complexity in task switching.&lt;/p&gt;  &lt;p&gt;We were then treated by another excellent talk by Rob Bagby, Developer Evangelist on "Treating Databases as First-Class Citizens in Development". In this session, Rob made clear that &lt;a href="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/P5070489.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="184" alt="P5070489" src="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/P5070489_thumb.jpg" width="244" align="right" border="0" /&gt;&lt;/a&gt;database work can no longer hide from unit testing and how the Database Project in Visual Studio Team System makes synchronizing DDL and DML objects seamless and eminently testable. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/DSCN0481.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="184" alt="DSCN0481" src="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/DSCN0481_thumb.jpg" width="244" align="left" border="0" /&gt;&lt;/a&gt;I was lucky enough to show off the new Visual Studio Team System 2010 Team Architect bits which include fully compliant UML 2.1 diagram support as well as assembly, namespace, class and method visualization using the VSTS 2010 Architecture Explorer.  I talked about VSTS 2010 Team Architect being yet another clear signal of Microsoft's commitment to modeling which is, and will continue to manifest itself in technologies like Windows Workflow, BizTalk Server, Entity Framework, and Quadrant to name just a few. As a Connected Systems guy, VS2010 Team Architect is really going to go a long way in helping me and my teams visualize the problem domain and partition our big balls of mud into the right architecture.  &lt;/p&gt;  &lt;p&gt;Speaking of which, I think my favorite new modeling feature in Team Architect is the Layer Diagram which lets you define your layers and then validate them at build time! What this means is that&lt;a href="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/DSCN0482.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="184" alt="DSCN0482" src="http://rickgaribay.net/Images/CustomContent/PhoenixVisualStudioTeamSystemBigEventwas_EE11/DSCN0482_thumb.jpg" width="244" align="right" border="0" /&gt;&lt;/a&gt; I can use a layer diagram to define separation of concerns and single responsibility principle and then make sure that team members are honoring the layer rules. It is just awesome to be able to map namespaces to a layer diagram, wire it up to the automated build and keep violations from every being delivered.&lt;/p&gt;  &lt;p&gt;The day winded up with a great talk by Steve Lange, Technical Specialist on how to get the most out of TFS. The session was aptly called "Bang for Your Buck" Getting the Most out of Team Foundation Server, and Steve gave away some great tips on things you can do with your investment in TFS that you may not have even known about. &lt;/p&gt;  &lt;p&gt;I want to thank Steve and Rob for inviting us to speak at this event. The room was full of great folks with lots of passion and great questions which is exactly what we like to see at these events. If you have any follow up questions that I wasn't able to get answered at the event, please don't hesitate to &lt;a href="http://rickgaribay.net/contact.aspx"&gt;contact me&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/241.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2009/05/11/phoenix-visual-studio-team-system-big-event-was-big.aspx</guid>
            <pubDate>Tue, 12 May 2009 00:29:16 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2009/05/11/phoenix-visual-studio-team-system-big-event-was-big.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/241.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/241.aspx</trackback:ping>
        </item>
        <item>
            <title>SOA Patterns Book</title>
            <link>http://rickgaribay.net/archive/2008/03/01/soa-patterns-book.aspx</link>
            <description>&lt;p&gt;Excellent SOA Patterns book underway with a public preview and collaboration site here: &lt;font face="Arial"&gt;&lt;a href="http://www.soapatterns.org/"&gt;http://www.soapatterns.org/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Several of us at Neudesic have either contributed, are reviewing or are contributing candidate patterns based on proven practices.&lt;/p&gt;
&lt;p&gt;I would encourage anyone to check out this resource and add it to your architecture and design toolbox.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/168.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay - The more I learn, the less I kno</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/03/01/soa-patterns-book.aspx</guid>
            <pubDate>Sat, 01 Mar 2008 14:28:11 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2008/03/01/soa-patterns-book.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/168.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/168.aspx</trackback:ping>
        </item>
        <item>
            <title>Managed Windows NT Services, Application Domains &amp; Principal Policy</title>
            <link>http://rickgaribay.net/archive/2007/05/10/managed-windows-nt-services-application-domains--principal-policy.aspx</link>
            <description>&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font color="#ff0000"&gt;Update to orginal post:&lt;/font&gt; After doing some more research, the actual problem turned out to be that the legacy Windows NT service never specified the WindowsPrincipal and had nothing to do with the Gateway assembly. In fact, it turns out that when you load a class using Activator.CreateInstanceFrom(), the class loads into the same parent application domain. I've updated the solution below appropriately.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Thanks to &lt;a href="http://www.west-wind.com/weblog/"&gt;Rick Strahl&lt;/a&gt; for clarifying the Activator.CreateInstanceFrom(), app domain behavior. You can also find an &lt;a href="http://www.code-magazine.com/article.aspx?quickid=0211081&amp;amp;page=1"&gt;excellent article&lt;/a&gt; by Rick in CoDe magazine that covers this extensively: &lt;font face="Arial"&gt;&lt;a href="http://www.code-magazine.com/article.aspx?quickid=0211081&amp;amp;page=1"&gt;http://www.code-magazine.com/article.aspx?quickid=0211081&amp;amp;page=1&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;- - -&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I recently ran into a security problem in a somewhat typical scenario for which the specific details I imagine are fairly esoteric because I was unable to find anything relevant on the web or on &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1556266&amp;amp;SiteID=1"&gt;MSDN forums&lt;/a&gt;. It is amazing how easy it is to forget (or at least suffer from delayed recall) fundamental aspects of the framework when you are in the thick of it and trying to ship a product!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I figured I’d post an overview of the scenario and the solution to the problem in hopes of helping anyone else who runs into this.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;A common approach for setting up any kind of automated process is to use a Windows NT service which is continually running, monitoring a queue or database for records/messages that represent events for wich some work should be performed. For example, I can have a Windows NT Service monitor a private queue every 5 seconds, and when a message is available, process it (whatever process means for the given service). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;One option for the processing bit would be to raise and event and delegate the work out to a method that would maintain all of the event handling logic. This handler could reside in a single class within the same assembly as the service, but for obvious reasons this could quickly get unruly and introduce a maintanance nightmare. If every time you need to change the event handling business logic you had to recompile and redeploy the service executable, although you might be building job security, you'd find yourself getting frustrated at best and at worst, you would be tightly coupled to a single assembly making it difficult to leverage this pattern in a more abstract, loosely coupled manner.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;One possible solution might be&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; to apply a typical publish and subscribe pattern where the Windows NT service polls a backing store (or ideally was notified automagically) and when a record (or message) meets a specific criteria fire an event. The event would then be mapped to a delegate which implements the handling of the event. However, to keep the implementation of the handler from being static and hard coded, we could further delegate the implementation of the work to an external component, making the original event handling delegate only worry about the plumbing for dispatching the work to another component. Ideally, this would allow a plug and play approach where assemblies could be "dropped" in and just work. Of course, this would require that the message in a queue has some kind of metadata about the component to execute (such as assembly name, type and URI) and when the event is fired, the handler gets access to this URI and dispatches the call to it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;This is precisely what the System.Activator class allow you to. If you know the name of the assembly that contains the component you want to call, simply call the CreateInstanceFrom method on the Activator class. The CLR will then probe the local private directory for the assembly name, load it and instantiate an instance of the type. &lt;strong&gt;Figure 1&lt;/strong&gt; below summarizes what this might look like.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;img alt="Figure 1" align="absMiddle" src="http://farm1.static.flickr.com/222/492763344_94ccf58a1d.jpg" /&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;strong&gt;&lt;font size="1"&gt;Figure 1: Mock Sequence Diagram&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;When the IGateway object is “unwrapped” and made available to the MyNTService Windows NT Service, the service can call a method (or methods) on the instance to do some work. To achieve polymorphism, since the Gateway component that is unwrapped implements the IGateway interface, the service is guaranteed to be able to call a particular method (Execute, in this case). &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Figure 2 (below, right) provides a possible object model that supports this design.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;The purpose of the Gateway class is to serve as wrapper around a component/service call while maintaining location transparency. This can thought of as a "super proxy" and is really just the classic Service Gateway/Service Agent pattern. The MyNTService Windows NT Service  has no idea if the component is local to the machine or process or somewhere out in the cloud. &lt;img alt="" hspace="8" align="right" vspace="8" src="http://farm1.static.flickr.com/202/492763346_41226f5269.jpg" /&gt;With this flexibility comes significant power in being able to make decisions on distribution in a post-deployment manner. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;As the saying goes “&lt;em&gt;with great power comes great responsibility&lt;/em&gt;”. Looking again at the sequence diagram in &lt;strong&gt;Figure 1&lt;/strong&gt;, two important things need to be considered.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;First, this scenario demonstrates WS-I Profle interop between a WCF service and a managed Windows NT Service running on .NET 1.1 CLR (pretty cool huh?). &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Second, between every call in the sequence is an authentication and authorization boundary. Though impractical, the Gateway component could ensure that only the identity of the Windows account running the MyNTService Windows NT Service can call it’s Execute method. More importantly, however, the Gateway should flow the identity of the Windows account running the MyNTService Windows NT Service process to the WCF service that is out in the cloud so that the WCF service can authenticate and authorize the call. Pretty simple,right?&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;strong&gt;&lt;o:p&gt;Problem&lt;/o:p&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Well, one of the things that may not be overly apparent is that the assembly in which the Gateway type that implements the IGateway interface resides will actually load in the same application domain that exists within the host NT service process. The MyNTService Windows NT Service knows NOTHING about the Gateway component (other than that it implements a standard interface). When an instance of the Gateway component is activated, we want to run in the security context of the parent process (of the MyNTService Windows NT Service ), however if the host application domain has not specifically set the the Principal Policy, the component will execute with no security context, or to be a bit more technical, will load using the default UnauthenticatedPrincipal enumeration flag. This basically means that the principal under which the MyNTService Windows NT Service is running will not be attached to the thread on which the Gateway component runs. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;In fact, as the MSDN documentation for the System.Security.Principal.PrincipalPolicy enumeration states “Specifies how principal and identity objects should be created for an application domain. The default is &lt;strong&gt;UnauthenticatedPrincipal&lt;/strong&gt;.”.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;strong&gt;Solution&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Those keen to the default behavior regarding application domains and Windows Principals already know where this is going, but for those who aren’t sure, stay with me. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Although the MyNTService Windows NT Service was running as a fixed domain account, the WCF service requires transport level authentication and uses role-based authorization to ensure the caller (MyNTService) is authorized. However, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;calls from the MyNTService Windows NT Service via the Gateway were failing with &lt;span style="COLOR: black"&gt;&lt;strong&gt;"The request failed with HTTP status 401: Authorization Required."&lt;/strong&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;span style="COLOR: black"&gt;I triple checked IIS security settings. My unit tests worked just fine. My test harness also worked and even browsing to the service’s metadata page was working. For some reason, the Gateway was calling the WCF service in a seamingly anonymous manner. This threw me for a loop for a couple of days.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Then, a few days ago, while in the shower (I get many of my “light-bulb on” moments in the shower or in my dreams for some odd reason) the solution hit me like a thunderbolt! The Gateway assembly was being loaded without an authenticated principal, and hence the solution was simple, sweet and elegant:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;AppDomain.CurrentDomain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Now the Gateway took on the identity of the Windows AD account that was running the Windows NT Service process and was able to authenticate to and be authorized by the WCF service.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;You can find more info on principal policy and application domain behavior here: &lt;font face="Arial"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/90395801.aspx"&gt;http://msdn2.microsoft.com/en-us/library/90395801.aspx&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;strong&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/133.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay - The more I learn, the less I kno</dc:creator>
            <guid>http://rickgaribay.net/archive/2007/05/10/managed-windows-nt-services-application-domains--principal-policy.aspx</guid>
            <pubDate>Thu, 10 May 2007 17:34:58 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2007/05/10/managed-windows-nt-services-application-domains--principal-policy.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/133.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/133.aspx</trackback:ping>
        </item>
        <item>
            <title>Taking the Agile Plunge? Hire a Competent Architect</title>
            <link>http://rickgaribay.net/archive/2007/03/12/Taking-the-Agile-Plunge-Hire-a-Competent-Architect.aspx</link>
            <description>&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Before the agile community swarms my home with pitchforks and torches, let me get one thing straight right now: I have nothing against agile development practices (ADP) or theory and do not dispute their efficacy when applied reasonably and pragmatically. I have learned much from, and have a deep respect for many agile evangelists such as Martin Fowler and Kent Beck, and more recently &lt;a href="http://www.mountaingoatsoftware.com/"&gt;&lt;span style="COLOR: #223355; TEXT-DECORATION: none; mso-bidi-font-size: 12.0pt; text-underline: none"&gt;Mike Cohn&lt;/span&gt;&lt;/a&gt; of &lt;a href="http://www.mountaingoatsoftware.com/"&gt;&lt;span style="COLOR: #223355; TEXT-DECORATION: none; mso-bidi-font-size: 12.0pt; text-underline: none"&gt;Mountain Goat Software&lt;/span&gt;&lt;/a&gt;. In fact, I believe that many of the engineering practices purported as “agile” are simply a handful of best practices that have emerged from modern software engineering. I stand behind, and use many of these practices in my own work and continue to learn from many of the aforementioned visionaries (although I so wish we could banish the term "agile" as it has become such a polarizing term in software process community).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;But while I believe that the tenets of the Agile Manifesto are noble and well intended,  I can’t help but wonder if these tenets are being somewhat misinterpreted by the community at large and should either be clarified or ratified. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 10.5pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;One questionable trend that I believe we are witnessing in the agile gold rush is the wholesaling of agile methodologies into canned process frameworks that are peddled like snake oil to desperate and unsuspecting souls. These frameworks are often deployed very prescriptively, as if to “cleanse the masses” and often result in a carte blanche implementation where previous learnings are encouraged to be forgotten or disregarded. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 10.5pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;In fact, I have seen teams adopt agile methodologies with such zealotry that they cling to every letter of the tenets as if the words were inscribed on a marble tome. Worse, they then go beyond the written guidelines to form their own interpretations which are then applied conveniently to meet their needs. This is a dangerous practice that is common to all religions, and the fact that I am even describing a software methodology in this context suggests that things are getting a little ridiculous. The industry doesn't need to be born again, it just needs a unified representation of how to accomplish the job by doing more of the right things and a reminder that no one is smart enough to figure the whole puzzle out before getting their hands dirty. This doesn't mean you scrap everything for this new snake oil- it means you identify some key areas of opportunity and lend some good old fashioned process improvement.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 10.5pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;There is an exception to this, where wholesaling ADP does make sense, and that is in organizations that have very little understanding or appreciation for the engineering aspects that drive product development. These are the companies that are 100% date and sale driven and blame IT for all of the failed projects because they lack the transparency to identify the real problems keeping them from meeting their objectives. But few of these organizations will actually stick it out because the cultural transformation is often insurmountable (then again, one would have to ask themselves why they would stick around in this environment to begin with)?&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 10.5pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;But the biggest problem I see developing within the agile movement -that has gone largely unchecked- is the de-emphasis on so called up-front design and architecture, a key component that I believe is fundamental to (successful) software engineering. Although it is not stated anywhere in the Agile Manifesto to abandon architecture and design, the dismissal of up-front architecture and design as draconian casualties of “traditional” or “waterfall” methods is a common thread within the agile community. As an architect, when I challenge this point (and trust me, it happens all the time), too often tenet # 3 (“Working Software over comprehensive documentation”) is used to support this belief that up front design is the modern leprosy of agile development. &lt;a href="http://www.martinfowler.com/articles/designDead.html"&gt;Martin Fowler&lt;/a&gt; has done &lt;a href="http://www.martinfowler.com/articles/designDead.html"&gt;some work&lt;/a&gt; to help dispel this myth, but there is still much work to be done around educating the community on this topic, and I am confident that many reading this actually firmly believe that all so called up front design (BDUF) is evil.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 10.5pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;The reality is that this tenet is being used as a fig leaf to cover up the real reasons for not doing the right things, and this has nothing to do with being agile or not agile, but instead points to what I think boils down to a lack of experience and maturity. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 10.5pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Some up-front, pragmatic architecture and design work which sets the foundation for the project's conceptual integrity and then is consistently refined is a sound engineering practice which is the responsibility of a competent architect to perform. Such critical design aspects include layer and corresponding artifiact definitions, assembly allocation, messaging patterns, process allocation, identity management, transaction boundaries and deployment plans- these are fundamental to software projects that you don't need a crystal ball to figure out, just some good old fashioned experience.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 10.5pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Of course, all architecture and design is to some extent evolutionary, but modern software projects of any significance apply this technique as a critical step for gaining consensus, forming conceptual integrity and orienting teams on the work that lies ahead.&lt;span style="mso-spacerun: yes"&gt; In my opinion, t&lt;/span&gt;his step is just as critical to the success of any non-trivial endeavor as writing unit tests and automating the build process. Skipping it will almost always yield lost time, productivity and result in a fragile product, regardless of how agile or motivated the team may be. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 10.5pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;There is nothing written in stone that says that all BDUF is bad, and I believe that there are a fair amount of Agile projects that do put this critical step into an architecture/core-foundation iteration, but I just wish that the Agile community at large would distinguish this a bit better so that the lay person interpreting the impact of ADP has a more educated perspective. This is certainly an optimistic perspective, and for as many moderates on this subject, I am sure there are radicals, but the I think that the kind of thinking that rationalizes the omission of this practice threatens the software industry’s ability to evolve as an engineering body of knowledge and will further demarcate the gap between enterprise software and toys. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 10.5pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Worse, I believe it will continue to prevent the agile movement from ever graduating to a mainstream, disciplined SDLC process, instead being forever relegated as a fringe software development process. This is unfortunate too, because I think ADP has a real potential for forming the bedrock of what modern software engineering practices look like and mobilizing the industry to do more of the "right things", lest we skip the critical design aspects.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/94.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2007/03/12/Taking-the-Agile-Plunge-Hire-a-Competent-Architect.aspx</guid>
            <pubDate>Mon, 12 Mar 2007 19:15:49 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2007/03/12/Taking-the-Agile-Plunge-Hire-a-Competent-Architect.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/94.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/94.aspx</trackback:ping>
        </item>
    </channel>
</rss>