<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>WCF</title>
        <link>http://rickgaribay.net/category/4.aspx</link>
        <description>WCF</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>AZ.NET UG WCF 4.0 Materials</title>
            <link>http://rickgaribay.net/archive/2010/02/14/az.net-ug-materials-for-my-talk-on-wcf-4.0.aspx</link>
            <description>&lt;p&gt;Below please find my presentation and demos from my talk on new productivity features in &lt;a href="http://en.wikipedia.org/wiki/Windows_Communication_Foundation" target="_blank"&gt;WCF&lt;/a&gt; 4.0 at the AZ .NET User Group.&lt;/p&gt; &lt;iframe style="width: 300px; height: 61px" id="I4" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Share/Talks/AZ.NET%20UG%2020100209/New^_Features^_in^_WCF^_4.pdf" frameborder="0" name="I4" marginwidth="0" scrolling="no" 0px?="0px?" padding-top:="padding-top:" solid;="solid;" 1px="1px" #dde5e9="#dde5e9" border-right:="border-right:" border-top:="border-top:" 66px;="66px;" height:="height:" 0px;="0px;" padding-right:="padding-right:" 240px;="240px;" width:="width:" padding-left:="padding-left:" 3px;="3px;" margin:="margin:" #ffffff;="#ffffff;" background-color:="background-color:" padding-bottom:="padding-bottom:" border-left:="border-left:" border-bottom:="border-bottom:"&gt;&lt;/iframe&gt;&lt;iframe style="width: 300px; height: 61px" id="I4" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/Share/Talks/AZ.NET%20UG%2020100209/20100910^_After.zip" frameborder="0" marginwidth="0" scrolling="no" 0px?="0px?" padding-top:="padding-top:" solid;="solid;" 1px="1px" #dde5e9="#dde5e9" border-right:="border-right:" border-top:="border-top:" 66px;="66px;" height:="height:" 0px;="0px;" padding-right:="padding-right:" 240px;="240px;" width:="width:" padding-left:="padding-left:" 3px;="3px;" margin:="margin:" #ffffff;="#ffffff;" background-color:="background-color:" padding-bottom:="padding-bottom:" border-left:="border-left:" border-bottom:="border-bottom:"&gt;&lt;/iframe&gt;  &lt;p&gt;Thanks to Scott Cate and the AZ.NET UG for hosting &lt;a href="http://www.rickgaribay.net/contact.aspx" target="_blank"&gt;me&lt;/a&gt;- I had lots of fun!&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/273.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2010/02/14/az.net-ug-materials-for-my-talk-on-wcf-4.0.aspx</guid>
            <pubDate>Sun, 14 Feb 2010 14:46:17 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2010/02/14/az.net-ug-materials-for-my-talk-on-wcf-4.0.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/273.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/273.aspx</trackback:ping>
        </item>
        <item>
            <title>Byte-Size WCF Episode 1: Default Endpoints in WCF 4.0</title>
            <link>http://rickgaribay.net/archive/2010/01/23/byte-size-wcf-episode-1-default-endpoints-in-wcf-4.0.aspx</link>
            <description>&lt;p&gt;WCF 4.0 simplifies the configuration experience significantly by providing a new default endpoint feature. This saves time and simplifies the configuration requirements for hosting a WCF service by providing a File –&amp;gt; New Project –&amp;gt; Code –&amp;gt; F5 hosting experience. &lt;/p&gt;  &lt;p&gt;In this episode you’ll learn how to get up and running quickly with default endpoints and how to gain more control over the default bindings for each scheme (HTTP, TCP, MSMQ, etc) you may want to configure using the new protocol mapping capabilities in WCF 4.0.&lt;/p&gt; &lt;object width="0" height="0"&gt; &lt;param name="movie" value="http://content.screencast.com/users/rickggaribay/folders/Default/media/4d3bbe3d-0691-4d56-a1f1-09d4f291dcc9/Episode%201_controller.swf" /&gt; &lt;param name="quality" value="high" /&gt; &lt;param name="bgcolor" value="#FFFFFF" /&gt; &lt;param name="flashVars" value="containerwidth=640&amp;amp;containerheight=498&amp;amp;showstartscreen=true&amp;amp;showendscreen=true&amp;amp;loop=false&amp;amp;autostart=false&amp;amp;color=000000,000000&amp;amp;thumbscale=45&amp;amp;content=http://content.screencast.com/users/rickggaribay/folders/Default/media/4d3bbe3d-0691-4d56-a1f1-09d4f291dcc9/Episode%201.mp4" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="scale" value="showall" /&gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="base" value="http://content.screencast.com/users/rickggaribay/folders/Default/media/4d3bbe3d-0691-4d56-a1f1-09d4f291dcc9/" /&gt;  &lt;embed src="http://content.screencast.com/users/rickggaribay/folders/Default/media/4d3bbe3d-0691-4d56-a1f1-09d4f291dcc9/Episode%201_controller.swf" quality="high" bgcolor="#FFFFFF" width="640" height="498" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="containerwidth=300&amp;amp;containerheight=200&amp;amp;showstartscreen=true&amp;amp;showendscreen=true&amp;amp;loop=false&amp;amp;autostart=false&amp;amp;color=000000,000000&amp;amp;thumbscale=45&amp;amp;content=http://content.screencast.com/users/rickggaribay/folders/Default/media/4d3bbe3d-0691-4d56-a1f1-09d4f291dcc9/Episode%201.mp4" allowfullscreen="true" base="http://content.screencast.com/users/rickggaribay/folders/Default/media/4d3bbe3d-0691-4d56-a1f1-09d4f291dcc9/" scale="showall"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;img src="http://rickgaribay.net/aggbug/270.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2010/01/23/byte-size-wcf-episode-1-default-endpoints-in-wcf-4.0.aspx</guid>
            <pubDate>Sun, 24 Jan 2010 01:35:27 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2010/01/23/byte-size-wcf-episode-1-default-endpoints-in-wcf-4.0.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/270.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/270.aspx</trackback:ping>
        </item>
        <item>
            <title>Is .NET a Great Disruptor of the Decade?</title>
            <link>http://rickgaribay.net/archive/2010/01/15/is-.net-a-great-disruptor-of-the-decade.aspx</link>
            <description>&lt;p&gt;The following article was recently brought to my attention. It asks if .NET should be considered a disruptor in the last decade: &lt;a href="http://blogs.zdnet.com/service-oriented/?p=3921"&gt;http://blogs.zdnet.com/service-oriented/?p=3921&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I actually gave this a bit of thought and the best answer I was able to come up with was “Yes and No”. Here’s why…&lt;/p&gt;
&lt;p&gt;A technology can be "disruptive" when it gains wide spread attention but can fizzle out just as quickly or over an undetermined period of time. How deep into a revolution a technology can sink its teeth and still emerge a clear winner is a true long term measure that I believe earns the designation of "disruptor". &lt;/p&gt;
&lt;p&gt;A true market leader leverages (or themselves are responsible for) a revolutionary technology and both exploits it fully while surviving several aftershocks that typically follow.&lt;/p&gt;
&lt;p&gt;For example, I would argue that SOA was a revolutionary innovation that changed the mindset of an industry. In the process it displaced many traditional (and proprietary) approaches to distributed computing and a new market segment exploded. &lt;/p&gt;
&lt;p&gt;I think Microsoft capitalized on this with ASP.NET Web Services (ASMX) which at the time I would certainly consider disruptive- offering 1st generation commodity SOA to the masses- but had the innovation wave stopped there, Microsoft wouldn't have a SOA story today.&lt;/p&gt;
&lt;p&gt;Enter &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Windows_Communication_Foundation"&gt;WCF&lt;/a&gt; . WCF is both an evolution over ASMX as well as a technology that has been successful in displacing many proprietary incumbents. However I think today what we have is a low-end disruption because it is evident that WCF overshot the market with performance and features. Incredibly, almost in perfect harmony with this market perception REST came into its own and disrupted our whole perspective on SOA and continues to challenge our values in the process (as all disruptive technologies do).&lt;/p&gt;
&lt;p&gt;WCF 3.5 and the REST Starter Kit answered this call cementing the fact that .NET (WCF) is deep enough to survive and subsume other distrubtions and at the same time, WCF 4 will attempt to democratize WCF for the masses, likely gaining both mindshare and market share in the process. &lt;/p&gt;
&lt;p&gt;So, while .NET has been disruptive, I don't know that we can claim it as disruptor just yet. &lt;/p&gt;
&lt;p&gt;One thing is for certain. &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Windows_Azure"&gt;Azure&lt;/a&gt; has the potential to propel .NET to a more profitable market segment ushering with it new market disruption and establishing .NET in a clear lead position.&lt;/p&gt;
&lt;p&gt;But these are just my thoughts. What do you think?&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/268.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2010/01/15/is-.net-a-great-disruptor-of-the-decade.aspx</guid>
            <pubDate>Sat, 16 Jan 2010 01:08:53 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2010/01/15/is-.net-a-great-disruptor-of-the-decade.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/268.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/268.aspx</trackback:ping>
        </item>
        <item>
            <title>Desert Code Camp November 7th</title>
            <link>http://rickgaribay.net/archive/2009/10/31/desert-code-camp-november-7th.aspx</link>
            <description>&lt;p&gt;I will be speaking at &lt;a href="http://www.desertcodecamp.com/default.aspx" target="_blank"&gt;DCC&lt;/a&gt; on November 7th on the following topics:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Developing and Deploying an On-Premise .NET Application with Azure Table Storage &lt;/li&gt;    &lt;li&gt;Developing and Deploying a WCF Application with Azure Compute Services and Azure Table Storage&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There are several excellent sessions this time around, including talks from fellow colleagues at &lt;a title="" href="http://neudesic.com" rel=""&gt;Neudesic&lt;/a&gt; like &lt;a href="http://www.imaginaryrealities.com/" target="_blank"&gt;Michael Collins&lt;/a&gt;, &lt;a href="http://www.imaginaryrealities.com/" target="_blank"&gt;Joel Neubeck&lt;/a&gt; and Andrew Wilson.&lt;/p&gt;  &lt;p&gt;Hope to see you there!&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/265.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2009/10/31/desert-code-camp-november-7th.aspx</guid>
            <pubDate>Sat, 31 Oct 2009 12:11:22 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2009/10/31/desert-code-camp-november-7th.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/265.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/265.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>Speaking at Ultimate Virtual Conference on October 22</title>
            <link>http://rickgaribay.net/archive/2009/09/22/speaking-at-ultimate-virtual-conference-on-october-22.aspx</link>
            <description>&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&gt;&lt;a href="http://www.vconferenceonline.com/shows/fall09/uvc/"&gt;&lt;img border="0" alt="" align="left" width="960" height="175" src="http://www.vconferenceonline.com/shows/fall09/uvc/images/oct_header.jpg" /&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;pre&gt; &lt;/pre&gt;
&lt;pre&gt; &lt;/pre&gt;
&lt;pre&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I will be speaking at the SQL Server Worldwide User Group Ultimate Virtual Conference on October 22.&lt;/p&gt;
&lt;p&gt;If you haven’t experienced an Ultimate Virtual Conference, it is very similar to other industry conferences. There are a number of tracks including .NET, SQL and MOSS and sessions are scheduled on specific days.&lt;/p&gt;
&lt;p&gt;Unlike traditional conferences, however, you don’t have to leave the comfort of your home or office to attend. All sessions are streamed in HD video at the scheduled time. Speakers are available via live chat during the initial screening of their sessions and then you can watch the sessions again and again.&lt;/p&gt;
&lt;p&gt;I will be delivering the following two sessions:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Developing and Deploying an On-Premise .NET Application with Azure Table Storage&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Azure Table Storage provides a scalable data access solution for applications hosted on-premise or in the Azure cloud. Learn how to get up and running with Table Storage with a look at building entities, provisioning Table Storage locally in Development Storage and in Azure Table Storage along with techniques for maintaining a consistent development experience when developing locally or against the cloud.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Developing and Deploying a WCF Application with Azure Compute Services and Azure Table Storage.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;The Azure Compute Service provides robust hosting capabilities of you .NET application in the Azure operating system. Learn about Web Roles and Worker Roles and how to configure your .NET application for deployment to Windows Azure. We will also explore techniques for consuming data via Azure Table Storage and put at all together and deploy the application live to Windows Azure.  &lt;/p&gt;
&lt;p&gt;My colleague &lt;a target="_blank" href="http://blogs.neudesic.com/blogs/brendon_birdoes/default.aspx"&gt;Brendon Birdoes&lt;/a&gt; of Neudesic will also be presenting the following sessions: &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ESB Toolkit 2.0 Overview&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;An Enterprise Service Bus (ESB) is an architectural pattern and a key enabler in implementing the infrastructure for a service-oriented architecture (SOA). The ESB Toolkit for BizTalk Server 2009 implements best practices and patterns for building loosely coupled service oriented solutions using BizTalk as the bus. The ESB Toolkit 2.0 is one of the best new features of Microsoft BizTalk Server 2009! Join Brendon as he explains what the ESB Toolkit is, explores the features and capabilities and discusses the benefits of using the Toolkit for your BizTalk solutions. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implementing Messaging Solutions Using ESB Toolkit 2.0 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Itinerary based routing is the key pattern in delivering solutions in the ESB Toolkit 2.0. The challenge though is how to take a traditional BizTalk scenario and implement it using the ESB Toolkit and itinerary based routing. This session will walk through a real world scenario and iteratively build the solution from a simple itinerary to a more complex itinerary including some of the more advanced capabilities of the Toolkit. This session will also take a closer look at the best new feature of the ESB Toolkit which is the Itinerary Designer that is fully integrated into Visual Studio 2008. If you are a BizTalk developer and would like to get an idea of the Toolkit development experience, this is a must see.  &lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;For a complete list of &lt;a target="_blank" href="https://www.vconferenceonline.com/shows/fall09/uvc/sessions.asp"&gt;sessions&lt;/a&gt; and &lt;a target="_blank" href="http://www.vconferenceonline.com/shows/fall09/uvc/speakers.asp"&gt;speakers&lt;/a&gt;, go to &lt;a title="http://www.vconferenceonline.com/shows/fall09/uvc/" href="http://www.vconferenceonline.com/shows/fall09/uvc/"&gt;http://www.vconferenceonline.com/shows/fall09/uvc/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strike&gt;I have a limited amount of discount codes I can give out so feel free to contact &lt;a target="_blank" href="http://www.rickgaribay.net/contact.aspx"&gt;me&lt;/a&gt; via &lt;a target="_blank" href="http://www.rickgaribay.net/contact.aspx"&gt;email&lt;/a&gt; or &lt;a target="_blank" href="http://twitter.com/rickggaribay"&gt;@rickggaribay&lt;/a&gt; on twitter and I will set you up.&lt;/strike&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &amp;quot;Calibri&amp;quot;, &amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;font size="2" face="Arial"&gt;Please feel free to use discount code &lt;strong&gt;SPRGUVC09&lt;/strong&gt; for $25 off registration discount.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/262.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2009/09/22/speaking-at-ultimate-virtual-conference-on-october-22.aspx</guid>
            <pubDate>Wed, 23 Sep 2009 04:14:09 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2009/09/22/speaking-at-ultimate-virtual-conference-on-october-22.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/262.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/262.aspx</trackback:ping>
        </item>
        <item>
            <title>PCSUG Meeting this Thursday: Developing and Deploying a WCF Application with Azure Compute Services and Azure Table Storage</title>
            <link>http://rickgaribay.net/archive/2009/09/07/pcsug-meeting-this-thursday-developing-and-deploying-a-wcf-application.aspx</link>
            <description>&lt;p&gt;I will be speaking at the &lt;a href="http://www.pcsug.org/Home/Events"&gt;PCSUG&lt;/a&gt; this Thursday on how to design, develop and deploy a &lt;a href="http://msdn.microsoft.com/wcf" target="_blank"&gt;WCF&lt;/a&gt; application for Windows Azure. I’ll demonstrate configuration for testing locally in the development fabric as well as development storage and wrap up with deployment to Compute Service and Table Storage. &lt;/p&gt;  &lt;p&gt;Pizza and sodas at 5:30 pm, and we’ll kick off at 6:00 pm and go until 7:30 pm. &lt;/p&gt;  &lt;p&gt;Hope to see you there!&lt;/p&gt;  &lt;p&gt;Slides and demo code are now available here: &lt;a title="http://pcsug.org/Home/Events" href="http://pcsug.org/Home/Events"&gt;http://pcsug.org/Home/Events&lt;/a&gt;&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/259.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2009/09/07/pcsug-meeting-this-thursday-developing-and-deploying-a-wcf-application.aspx</guid>
            <pubDate>Tue, 08 Sep 2009 01:11:48 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2009/09/07/pcsug-meeting-this-thursday-developing-and-deploying-a-wcf-application.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/259.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/259.aspx</trackback:ping>
        </item>
        <item>
            <title>The Modeling Vision Continues</title>
            <link>http://rickgaribay.net/archive/2009/08/18/the-modeling-vision-continues.aspx</link>
            <description>&lt;p&gt;Recently the Connected Systems Division at Microsoft, who is responsible for technologies including Windows Application Server, &lt;a target="_blank" href="http://msdn.microsoft.com/biztalk"&gt;BizTalk&lt;/a&gt; Server, and .NET Framework technologies including &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;Windows Communication Foundation&lt;/a&gt; and &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/netframework/aa663328.aspx"&gt;Windows Workflow Foundation&lt;/a&gt;,.NET cloud services, and the "Oslo" modeling platform was reorganized into the Data and Storage Platforms Division as the Business Platform Division (BPD) which is part of the Server and Tools Group responsible for products like Windows Server, Visual Studio and SQL Server. &lt;/p&gt;
&lt;p&gt;This move was not a big surprise, because if you look at products like BizTalk, Dublin and Oslo, Windows Server and SQL Server are intrinsically related, delivering on the need for a comprehensive plug-and-play platform for connecting disparate systems. For example, BizTalk, Dublin and Oslo run on the Windows Server platform, and each depend on SQL Server to varying extents.&lt;/p&gt;
&lt;p&gt;SQL Server has proven itself as a RDBMS platform and Dog-fooding SQL Server is good for business. I’ve also &lt;a target="_blank" href="http://rickgaribay.net/archive/2009/04/30/websphere-on-windows-outperforms-websphere-on-aix-by-37-who.aspx"&gt;talked about&lt;/a&gt; the robustness of Windows Server, and the fact that it not only runs the .NET stack faster than Java, put runs Java faster than AIX. Needless to say, the server platform that was beat up throughout the 90's as not worthy of the enterprise has certainly come of age.&lt;/p&gt;
&lt;p&gt;Anyone who knows &lt;a target="_blank" href="http://www.rickgaribay.net/contact.aspx"&gt;me&lt;/a&gt;, has come to &lt;a href="http://www.pcsug.org/Home/Events"&gt;PCSUG&lt;/a&gt; meetings or reads this blog has probably heard me talk about the progression from imperative programming into declarative software development and how critical model-driven development will become in the not so distant future. As a believer, I strive to incorporate technologies like &lt;a target="_blank" href="http://msdn.microsoft.com/wcf"&gt;WCF&lt;/a&gt;, which is declarative, and Entity Framework which is both declarative and model-driven into my solutions. Entity Framework raises the level of abstraction beyond the logical/data layer in the database, to the conceptual layer, which is the true “stuff” of software, the model. With a model, we can have solution-oriented conversations about the problem domain without talking about tables, views, classes,  bits or bytes. In addition, developer’s benefit from significant productivity gains by avoiding boiler-plate ADO.NET code which is largely commoditized into the Entity Framework. &lt;/p&gt;
&lt;p&gt;Yesterday, &lt;a target="_blank" href="http://www.douglaspurdy.com/category/microsoft/oslo/"&gt;Doug Purdy&lt;/a&gt; &lt;a target="_blank" href="http://www.douglaspurdy.com/category/microsoft/oslo/"&gt;announced&lt;/a&gt; that the &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/oslo/default.aspx"&gt;Olso&lt;/a&gt; team is joining the Data Programmability Team which is responsible for technologies like… wait for it… Entity Framework. Despite mixed messaging from Microsoft, Oslo represents the culmination of the declarative and model-driven vision within the Microsoft CSD.  As of today, Oslo will deliver languages like “M” which will at a minimum allow developers to further reduce the impedance mismatch between RDMS and application development by raising the abstraction of how developers and architects develop data models that are decompiled into TSQL. I &lt;a target="_blank" href="http://rickgaribay.net/archive/2009/06/10/m-model-for-desert-code-camp.aspx"&gt;demonstrated&lt;/a&gt; this in June in Phoenix at &lt;a target="_blank" href="http://rickgaribay.net/archive/2009/06/10/m-model-for-desert-code-camp.aspx"&gt;Desert Code Camp&lt;/a&gt;, and while it is cool, it is only the beginning. “M” will allow developers to create domain specific languages that will bring the conceptual layer closer to the design and problem solving stage. Applications built on foundational frameworks such as WCF and WF will take advantage of their declarative model to easily be serialized into the Oslo Repository for centralized management. These applications are surfaced via Quadrant, which provides a model with which to interact with the applications both individually and at the solution and enterprise scope.&lt;/p&gt;
&lt;p&gt;As Doug teases in his post, look for some key insights at PDC 09 this year as to the future of the modeling vision which appears to be very bright indeed.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/257.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2009/08/18/the-modeling-vision-continues.aspx</guid>
            <pubDate>Tue, 18 Aug 2009 20:43:16 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2009/08/18/the-modeling-vision-continues.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/257.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/257.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>
    </channel>
</rss>