<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Glavs Blog</title><link>http://weblogs.asp.net/pglavich/default.aspx</link><description>The dotDude of .Net</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>.Net Performance Testing and Optimisation – Free eBook</title><link>http://weblogs.asp.net/pglavich/archive/2010/01/30/net-performance-testing-and-optimisation-free-ebook.aspx</link><pubDate>Sat, 30 Jan 2010 01:43:48 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7328144</guid><dc:creator>Glav</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7328144</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2010/01/30/net-performance-testing-and-optimisation-free-ebook.aspx#comments</comments><description>&lt;p&gt;This blog has been super quiet lately. This is mainly because I have been hard at work writing a book around .Net Performance Testing and optimisation. Well, I am happy to say that part 1 of this book is available as a free download from &lt;a href="http://www.red-gate.com/products/ants_performance_profiler/care_about_performance_ebook.htm"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The full book will follow shortly and will contain concrete examples of popular performance issues in .Net applications, what to watch out for, and how to mitigate them. Additionally, you’ll get performance tips for Internet Information Server, web apps, SQL, caching strategies and a whole lot more.&lt;/p&gt;  &lt;p&gt;In part 1, you will learn how to setup a performance test rig, how it works, how to record tests, replay them, what metrics to collect, and how to analyse them.&lt;/p&gt;  &lt;p&gt;In addition, you will find out how to automate all this. Finally, you will get insight into profiling an application to improve performance. This is the one stop shop for performance testing and optimisation on the .Net platform.&lt;/p&gt;  &lt;p&gt;Since its free, &lt;a href="http://www.red-gate.com/products/ants_performance_profiler/care_about_performance_ebook.htm"&gt;download&lt;/a&gt; it now!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7328144" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/General/default.aspx">General</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Performance/default.aspx">Performance</category></item><item><title>iPhone Apps using Microsoft .NET</title><link>http://weblogs.asp.net/pglavich/archive/2009/12/02/iphone-apps-using-microsoft-net.aspx</link><pubDate>Tue, 01 Dec 2009 22:22:09 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7268159</guid><dc:creator>Glav</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7268159</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/12/02/iphone-apps-using-microsoft-net.aspx#comments</comments><description>&lt;p&gt;My good friend &lt;a href="http://weblogs.asp.net/wallym/"&gt;Wally McClure&lt;/a&gt; has written a short eBook on “&lt;strong&gt;Building iPhone and iPod touch Applications for the .NET/C# Developer with MonoTouch&lt;/strong&gt;”.&lt;/p&gt;  &lt;p&gt;You can check it out &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/Building-iPhone-and-iPod-touch-Applications-for-the-NET-C-Developer-with-MonoTouch.productCd-0470590734.html"&gt;here&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Given that iPhone is a very popular phone and that some of the development barrier for Microsofties like me is no .Net language support (Objective-C being the native development language), this can now be overcome with the help of Wally’s eBook.&lt;/p&gt;  &lt;p&gt;Its small and concise with topics covering class library support, deployment and debugging. I encourage you to check it out.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7268159" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/debugging/default.aspx">debugging</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/General/default.aspx">General</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Mobile/default.aspx">Mobile</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/iPhone/default.aspx">iPhone</category></item><item><title>Sydney Architecture User Group – Next Meeting: Why Windows Azure is not just Generic Brand Web Hosting</title><link>http://weblogs.asp.net/pglavich/archive/2009/11/10/sydney-architecture-user-group-next-meeting-why-windows-azure-is-not-just-generic-brand-web-hosting.aspx</link><pubDate>Tue, 10 Nov 2009 04:46:08 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7250290</guid><dc:creator>Glav</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7250290</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/11/10/sydney-architecture-user-group-next-meeting-why-windows-azure-is-not-just-generic-brand-web-hosting.aspx#comments</comments><description>&lt;p&gt;The Sydney Architecture User Group is having its second meeting this month on Thursday, 26th November. Full details can be found on our new (but very simple) website located &lt;a href="http://thesaug.org"&gt;here&lt;/a&gt; ( &lt;a href="http://thesaug.org"&gt;http://thesaug.org&lt;/a&gt; ). You can subscribe to the monthly email and also indicate your intention to come by selecting the RSVP option (which would be really nice if you did :-) )&lt;/p&gt;  &lt;p&gt;Here is what the next Sydney Architecture meeting has in store. Hope to see you there.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Why Windows Azure is not just Generic Brand Web Hosting &lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Presenter &lt;a href="http://community.softteq.com/blogs/nick/about.aspx"&gt;Nick Randolph &lt;/a&gt;    &lt;br /&gt;Date/Time: Thursday 26/11/2009 06:00 PM     &lt;br /&gt;Where: Grace Hotel , Function Room 77 York st Sydney,NSW. 2000 &lt;/p&gt;  &lt;p&gt;&lt;u&gt;Abstract&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;If you take only a glimpse at the offerings on the Windows Azure platform it may just appear to be a form of generic/home brand web hosting from Microsoft. However you’d be sorely mistaken as the platform is significantly different from not only traditional web hosting offerings but also from its competitors in the cloud computing space. In this session we will cover the unique offerings of cloud computing before looking at each of the components of the Windows Azure platform. Cloud computing is new, hot and sexy, but does that mean it’s right for you? Make sure you’re ready to interact and discuss the relative merits of building on the cloud.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Presenter Bio&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Nick currently runs Built To Roam (http://www.builttoroam.com) which focuses on building rich mobile applications. Previously Nick was co-founder and Development Manager for nsquared solutions where he lead a team of developers to build inspirational software using next wave technology. Prior to nsquared, Nick was the lead developer at Intilecta Corporation where he was integrally involved in designing and building their application framework.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7250290" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/WPF/default.aspx">WPF</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Windows/default.aspx">Windows</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Mobile/default.aspx">Mobile</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Sample chapter from upcoming book</title><link>http://weblogs.asp.net/pglavich/archive/2009/11/08/sample-chapter-from-upcoming-book.aspx</link><pubDate>Sun, 08 Nov 2009 08:59:27 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7249199</guid><dc:creator>Glav</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7249199</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/11/08/sample-chapter-from-upcoming-book.aspx#comments</comments><description>&lt;p&gt;There is a sample chapter from my upcoming book on all things performance related within the Microsoft platform. Specifically, the book will be about performance testing, profiling and optimisation for web and desktop applications developed using Microsoft.NET.&lt;/p&gt;  &lt;p&gt;This sample chapter is just a teaser and the book itself goes into great detail about how to setup a performance test rig using Visual Studio, how to record, manage and analyse performance metrics, and what you can change to make your apps fly.&lt;/p&gt;  &lt;p&gt;Anyways, the sample chapter is located &lt;a href="http://www.simple-talk.com/dotnet/performance/understanding-performance-profiling-targets/"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;( &lt;a title="http://www.simple-talk.com/dotnet/performance/understanding-performance-profiling-targets/" href="http://www.simple-talk.com/dotnet/performance/understanding-performance-profiling-targets/"&gt;http://www.simple-talk.com/dotnet/performance/understanding-performance-profiling-targets/&lt;/a&gt; )&lt;/p&gt;  &lt;p&gt;Hope you like it.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7249199" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/General/default.aspx">General</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Performance/default.aspx">Performance</category></item><item><title>SAUG – Sydney Architecture User Group</title><link>http://weblogs.asp.net/pglavich/archive/2009/10/15/saug-sydney-architecture-user-group.aspx</link><pubDate>Wed, 14 Oct 2009 22:28:53 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7230091</guid><dc:creator>Glav</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7230091</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/10/15/saug-sydney-architecture-user-group.aspx#comments</comments><description>&lt;p&gt;The first meeting of the Sydney Architecture User Group is going to be held on Thursday, October 22nd, 2009, form 6.00pm to 8.00pm, at the &lt;a href="http://www.gracehotel.com.au/"&gt;Grace Hotel&lt;/a&gt;, 77 York st, Sydney. (&lt;a href="http://maps.google.com.au/maps?oe=utf-8&amp;amp;rls=org.mozilla:en-GB:official&amp;amp;client=firefox-a&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;cid=0,0,15920144350290129951&amp;amp;fb=1&amp;amp;hq=grace+hotel,+77+york+st&amp;amp;hnear=Sydney+NSW&amp;amp;gl=au&amp;amp;daddr=77+York+Street,+Sydney+NSW+2000&amp;amp;geocode=10150030302310264918,-33.868967,151.206083&amp;amp;ei=7k_WSsOTFsSJkQWXxLX2DQ&amp;amp;sa=X&amp;amp;oi=local_result&amp;amp;ct=directions-to&amp;amp;resnum=1&amp;amp;ved=0CBEQngIwAA"&gt;Link to map&lt;/a&gt;) It will be housed in one of the very nice function rooms they have. Food and drink will be provided. &lt;a href="http://omarbesiso.typepad.com/"&gt;Omar Besiso&lt;/a&gt; and myself will be hosting the event, with all funding and sponsorship graciously provided by our company &lt;a href="http://www.datacom.com.au"&gt;Datacom&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;We intend on having a proper site to provide RSS feeds, email subscription and the like, but until we get better organised, we have a facebook page at : &lt;a href="http://www.facebook.com/event.php?eid=173036810551"&gt;http://www.facebook.com/event.php?eid=173036810551&lt;/a&gt; or you can contact myself directly on &lt;strong&gt;paul.glavich AT datacom.com.au&lt;/strong&gt; or you can contact Omar on &lt;strong&gt;omar.besiso AT datacom.com.au&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: If you do intend on coming along, it would be appreciated if you could RSVP via our &lt;/em&gt;&lt;a href=": http://www.facebook.com/event.php?eid=173036810551"&gt;&lt;em&gt;facebook page&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, or contact me directly at &lt;strong&gt;paul.glavich AT datacom.com.au&lt;/strong&gt; so we can order to right amounts of food&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The goal of the group will obviously be to discuss architecture related matters, but we are going to try and obtain a diverse range of speakers to cover all aspects of architecture. From application architecture, infrastructure, process, and although I am a Microsoft advocate, there is no intent to solely focus on Microsoft related technologies. We will try and cover the whole landscape of enterprise and solution architecture from a variety of angles.&lt;/p&gt;  &lt;p&gt;Our first meeting will be a little introduction to the group itself, and then straight onto a presentation by &lt;a href="http://richardsbraindump.blogspot.com"&gt;Richard Banks&lt;/a&gt;. Details below:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Title:&amp;#160; Architecture in the Small&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;No matter how good your design or how well the big pieces of your architecture fit together it's the little things that really count.&amp;#160; The little things are the things that can take your vision of beauty and either make it a reality or turn it into a thing of nightmares. Richard will talk about what these little things are, the impact they have and, most importantly, what to do about them.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Bio: Richard Banks is a Principal Consultant with Readify, with a history that includes building ERP, HR, point of sale and student administration systems as well as being the CIO/CTO for a listed company.&amp;#160; He is a Certified Scrum Practitioner, runs the Sydney and Virtual &lt;/em&gt;&lt;a href="http://Alt.Net"&gt;&lt;em&gt;Alt.Net&lt;/em&gt;&lt;/a&gt;&lt;em&gt; user groups and has spoken at both Tech.Ed and a number of other user groups around the state.&amp;#160; His blog can be found at &lt;/em&gt;&lt;a href="http://richardsbraindump.blogspot.com"&gt;&lt;em&gt;http://richardsbraindump.blogspot.com&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Further meetings will see a format of a short half hour presentation, followed by a longer presentation typically of an hour. We have some interesting speakers lined up for future meetings and if you are interested in presenting at the group, I would love to hear from you.&lt;/p&gt;  &lt;p&gt;We look forward to seeing you there!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7230091" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/General/default.aspx">General</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>ASP.NET v4 Presentation Deck and Demo’s</title><link>http://weblogs.asp.net/pglavich/archive/2009/10/02/asp-net-v4-presentation-deck-and-demo-s.aspx</link><pubDate>Fri, 02 Oct 2009 02:13:14 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7221393</guid><dc:creator>Glav</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7221393</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/10/02/asp-net-v4-presentation-deck-and-demo-s.aspx#comments</comments><description>&lt;p&gt;My ASP.NET v4 New Features overview presentation that I delivered at Sydney Deep .Net User Group (&lt;a href="http://sdnug.org"&gt;http://sdnug.org&lt;/a&gt; ) is available for download &lt;a href="http://sdnug.org/presentations/200910.zip"&gt;here&lt;/a&gt; (&lt;a title="http://sdnug.org/presentations/200910.zip" href="http://sdnug.org/presentations/200910.zip"&gt;http://sdnug.org/presentations/200910.zip&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: If the above link returns a 404 error, please try &lt;/em&gt;&lt;a href="http://theglavs.com/ArticleDownloads/ASPNET_v4_Beta2_Preso.zip"&gt;&lt;em&gt;here&lt;/em&gt;&lt;/a&gt;&lt;em&gt; instead.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;It covers almost every single new feature that will be covered in ASP.NET v4 in the next release With some demo’s showing off the permanent redirect feature, a bunch of templating demo’s, new client ID functionality and the new chart control.&lt;/p&gt;  &lt;p&gt;Hope you enjoy it.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7221393" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/General/default.aspx">General</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/MVC/default.aspx">MVC</category></item><item><title>2 TechEd Interviews are live</title><link>http://weblogs.asp.net/pglavich/archive/2009/09/11/2-teched-interviews-are-live.aspx</link><pubDate>Fri, 11 Sep 2009 04:45:29 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7200246</guid><dc:creator>Glav</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7200246</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/09/11/2-teched-interviews-are-live.aspx#comments</comments><description>&lt;p&gt;Its been a long time since I wrote a blog post but I have been a very busy boy.&lt;/p&gt;  &lt;p&gt;This week I have been at &lt;a href="http://www.msteched.com/australia/Public/default.aspx"&gt;TechEd Australia&lt;/a&gt; on the sunny Gold Coast in Queensland. I have been keeping a pretty low profile this year but I did participate in 2 interviews that are now available for viewing or download from the Microsoft online site.&lt;/p&gt;  &lt;p&gt;The first one is an interview with &lt;a href="http://omarbesiso.typepad.com/"&gt;Omar Besiso&lt;/a&gt;, friend, colleague and Enterprise Architect at Datacom on the topic of &lt;a href="http://www.msteched.com/online/view.aspx?tid=330697c7-f29b-4312-bbdf-6b6d171dd2c6"&gt;Building Enterprise Software&lt;/a&gt;. You can grab it from &lt;a href="http://www.msteched.com/online/view.aspx?tid=330697c7-f29b-4312-bbdf-6b6d171dd2c6"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The second is an interview with &lt;a href="http://damianedwards.wordpress.com/"&gt;Damian Edwards&lt;/a&gt; and &lt;a href="http://blog.tatham.oddie.com.au/"&gt;Tatham Oddie&lt;/a&gt; on the topic of &lt;a href="http://www.msteched.com/online/view.aspx?tid=f97393ad-ba67-4c1f-9676-b8eb1d35afe8"&gt;ASP.NET WebForms vs ASP.NET MVC framework&lt;/a&gt;. You can access it &lt;a href="http://www.msteched.com/online/view.aspx?tid=f97393ad-ba67-4c1f-9676-b8eb1d35afe8"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Hopefully you find them valuable, or at the very least, somewhat entertaining.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7200246" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/TechEd/default.aspx">TechEd</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Videocast/default.aspx">Videocast</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Silverlight 3 and WCF Faults</title><link>http://weblogs.asp.net/pglavich/archive/2009/07/14/silverlight-3-and-wcf-faults.aspx</link><pubDate>Tue, 14 Jul 2009 04:57:13 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7146930</guid><dc:creator>Glav</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7146930</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/07/14/silverlight-3-and-wcf-faults.aspx#comments</comments><description>&lt;p&gt;On&amp;#160; a previous project that utilised WCF and Silverlight 2, I began implementing an error handling strategy that was going to rely on certain FaultExceptions being propagated to the Silverlight client. Well it turned out that Silverlight 2 does not support FaultExceptions so that was not going to fly and a custom solution was built.&lt;/p&gt;  &lt;p&gt;Well Silverlight 3 does change this to some degree. Silverlight 3 now supports to the notion of Fault Contracts and FaultExceptions. In your Silverlight client code, if I have a WCF service called &lt;font size="2" face="Courier New"&gt;ThrowExceptionMethod&lt;/font&gt; (which as you may have guessed throws a &lt;font size="2" face="Courier New"&gt;FaultException&lt;/font&gt;) you can do something like this:&lt;/p&gt;  &lt;p&gt;First wire up the service call:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:526ebe7f-55d1-4d8f-a398-fecac65fe221" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Button_Click_1(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, RoutedEventArgs e)
{
    TestRef.TestServiceClient client &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; TestSilverlightApplication3.TestRef.TestServiceClient();
    client.ThrowExceptionMethodCompleted &lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; EventHandler&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;System.ComponentModel.AsyncCompletedEventArgs&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(client_ThrowExceptionMethodCompleted);
    client.ThrowExceptionMethodAsync();
}
&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;Then handle any error situation in the completed event:&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:2dda3215-f3a5-4606-a9d0-37266b1e2275" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; client_ThrowExceptionMethodCompleted(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (e.Error &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
        MessageBox.Show(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Call sucessfull&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    {
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; msg;
        FaultException&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;ExceptionDetail&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; fex &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; e.Error &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; FaultException&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;ExceptionDetail&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (fex &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
            msg &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Format(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Fault Exception recevied. Reason: {0}, Message: {1}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, fex.Reason, e.Error.Message);
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            msg &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Format(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Error recevied of type: {0}, Message: {1}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,e.Error.GetType(),e.Error.Message);
        MessageBox.Show(msg);
    }
}
&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Here you can see that we test the ‘&lt;font size="2" face="Courier New"&gt;e.Error&lt;/font&gt;’ property to see if its an exception of type &lt;font size="2" face="Courier New"&gt;FaultException&lt;/font&gt;, otherwise the error will flow through generally as a &lt;font size="2" face="Courier New"&gt;CommunicationException&lt;/font&gt; as per normal WCF behaviour.&lt;/p&gt;

&lt;p&gt;That all sounds easy, however you still need to tell the WCF service (or more specifically WCF itself) to return the fault using a HTTP status code of 200 (OK) instead of a HTTP status code of 500 (server error) which is the default. If you don’t do this, then the error will always come through as a &lt;font size="2" face="Courier New"&gt;CommunicationException&lt;/font&gt; .&lt;/p&gt;

&lt;p&gt;You need a little bit of code and configuration for this. First you need to define a custom behaviour like so:&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:2b958dfb-db71-4d7a-b7c3-efb258ef6d76" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; SilverlightFaultBehavior : BehaviorExtensionElement, IEndpointBehavior
    {        
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {
            SilverlightFaultMessageInspector inspector &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SilverlightFaultMessageInspector();
            endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
        }

        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; SilverlightFaultMessageInspector : IDispatchMessageInspector
        {
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; BeforeSendReply(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ref&lt;/span&gt;&lt;span style="color: #000000;"&gt; Message reply, &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; correlationState)
            {
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (reply.IsFault)
                {
                    HttpResponseMessageProperty property &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; HttpResponseMessageProperty();

                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Here the response code is changed to 200.&lt;/span&gt;&lt;span style="color: #008000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;                    property.StatusCode &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Net.HttpStatusCode.OK;
                    reply.Properties[HttpResponseMessageProperty.Name] &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; property;
                }
            }
            
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; AfterReceiveRequest(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ref&lt;/span&gt;&lt;span style="color: #000000;"&gt; Message request, IClientChannel channel, InstanceContext instanceContext)
            {
                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Do nothing to the incoming message.&lt;/span&gt;&lt;span style="color: #008000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
            }
        }

        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; The following methods are stubs and not relevant. &lt;/span&gt;&lt;span style="color: #008000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
        }
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
        }
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Validate(ServiceEndpoint endpoint)
        {
        }
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Type BehaviorType
        {
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt; { &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(SilverlightFaultBehavior); }
        }
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; CreateBehavior()
        {
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SilverlightFaultBehavior();
        }
    }&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;Then some config:&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:335fcbd2-a421-4c99-aa54-69bf4c51f3b4" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;overflow: auto;"&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;extensions&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
      &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;add name&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;”silverlightFaults” 
             type&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;”Microsoft.Silverlight.Samples.SilverlightFaultBehavior, 
             SilverlightFaultBehavior, 
             Version&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #800080;"&gt;1.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #800080;"&gt;0.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, 
             Culture&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;neutral, 
             PublicKeyToken&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;”&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
      &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;extensions&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;behaviors&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
          &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;behavior name&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;”SilverlightFaultBehavior”&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;silverlightFaults&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
          &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;behavior&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;behaviors&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;services&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;service name&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;”Calculator.Web.Service”&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;endpoint address&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;”” 
                      binding&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;”basicHttpBinding” 
                      contract&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;”Calculator.Web.Service” 
                      behaviorConfiguration&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;”SilverlightFaultBehavior” &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;service&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
  &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;services&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;So, its still not quite there yet, but its better. It would be nice if this status code behaviour were part of the default Silverlight service template and that it was a provided behaviour, rather than a roll your own custom one.&lt;/p&gt;

&lt;p&gt;Note: The custom behaviour, as well as more information on this subject, can and was taken from this article &lt;a href="http://msdn.microsoft.com/en-us/library/dd470096(VS.96).aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7146930" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Getting better performance in web apps with a few lines of script</title><link>http://weblogs.asp.net/pglavich/archive/2009/06/27/getting-better-performance-in-web-apps-with-a-few-lines-of-script.aspx</link><pubDate>Sat, 27 Jun 2009 09:53:45 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7135447</guid><dc:creator>Glav</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7135447</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/06/27/getting-better-performance-in-web-apps-with-a-few-lines-of-script.aspx#comments</comments><description>&lt;p&gt;We had a situation where a web application was utilising near 100% of CPU all the time under light load and it was proving very hard to reduce this significantly through code optimisation. We were performance testing and profiling, but only seeing marginal gains.&lt;/p&gt;  &lt;p&gt;The infrastructure that was hosting the web application was as follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Virtual Server (Hosted via VMWare Server) running Windows Server 2003 64 bit&lt;/li&gt;    &lt;li&gt;.Net 3.5&lt;/li&gt;    &lt;li&gt;Dual Virtual CPUs &lt;/li&gt;    &lt;li&gt;2 Gb of memory.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now I am not a big fan of virtualisation for hosting high performance web sites but we were stuck with this. At any rate, we had consistently high CPU utilisation for seemingly no real reason. Some of the most simple requests were generating high CPU usage.&lt;/p&gt;  &lt;p&gt;After some investigation, and also the help of a friend and very smart dude, &lt;a href="http://weblogs.asp.net/OWScott/"&gt;Scott Forsyth&lt;/a&gt; (who works for &lt;a href="http://www.orcsweb.com/"&gt;Orcsweb&lt;/a&gt; a high profile web hosting company) we decided to try setting Internet Information Services to 32 bit mode to see if any difference was seen.&lt;/p&gt;  &lt;p&gt;To cut a long story short, we changed Internet Information Services to run in 32 bit mode. This simple switch, yielded &lt;strong&gt;significant lower CPU utilisation&lt;/strong&gt; and in some case, almost &lt;strong&gt;cut the CPU utilisation in half!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Why would this be so? Well, it turns out there are a few reasons for this. Probably the primary reason is the fact the we get less information within the level 1 cache of the processor because of the increased structure size (pointers are bigger) within 64 bit systems. The same information in a 64 bit system occupies more memory than its 32 bit counterpart, therefore we can fit less into the processor cache. More information on this can be found &lt;a href="http://blogs.msdn.com/joshwil/archive/2006/07/18/670090.aspx"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Its really easy to change IIS to 32 bit mode. The steps are:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;To enable 32 bit mode on IIS in 64 bit windows, at a command prompt type:     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;Once this is done, 32 bit mode is enabled but we need to ensure that the 32 bit DLL’s are used as IIS will still have the 64 bit DLL’s defined for the ISAPI handler. To do this, all we have to do is re-register ASP.NET. At a command prompt, simply type:     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe –i&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;Finally, just make sure the status ASP.NET version 2.0.50727 (32-bit)&amp;#160; in the web services extension, within IIS, is set to allowed.     &lt;br /&gt;(More information on this process can be found &lt;a href="http://support.microsoft.com/kb/894435"&gt;here&lt;/a&gt; &lt;a href="http://support.microsoft.com/kb/894435"&gt;http://support.microsoft.com/kb/894435&lt;/a&gt;)&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;And that’s it. A few lines of script, and we had effectively reduced CPU utilisation by somewhere in between 30% and 50%!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Conclusion&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So my rule is this, If you are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Running Windows server in 64 bit mode.&lt;/li&gt;    &lt;li&gt;Running a standard .Net web application&lt;/li&gt;    &lt;li&gt;Do not need a large memory address space (ie. over 4 gigabytes)&lt;/li&gt;    &lt;li&gt;Have no special 64 bit optimisations&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Then this change will yield immediate performance improvements in your application, and in some cases (dependent on what your application does), yield significant performance improvements.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7135447" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/IIS/default.aspx">IIS</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Performance/default.aspx">Performance</category></item><item><title>FromTheGrey – Arts Site</title><link>http://weblogs.asp.net/pglavich/archive/2009/05/10/fromthegrey-arts-site.aspx</link><pubDate>Sun, 10 May 2009 02:08:56 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7080166</guid><dc:creator>Glav</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7080166</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/05/10/fromthegrey-arts-site.aspx#comments</comments><description>&lt;p&gt;Recently, I have been working on creating an arts based website called “&lt;a href="http://FromTheGrey.com"&gt;FromTheGrey&lt;/a&gt;” at &lt;a href="http://FromTheGrey.com"&gt;http://FromTheGrey.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Its a site devoted to showcasing the pictures and artwork created by my wife Michele. Previously, Michele has been very reluctant to showcase these pieces, but I really like them, as do many others I know, so it took some time and coaxing to convince Michele to show them to the world.&lt;/p&gt;  &lt;p&gt;However, I finally managed to do. As a result, “&lt;a href="http://FromTheGrey.com" target="_blank"&gt;FromTheGrey&lt;/a&gt;” was born. Its a relatively simple site but I hope you like the art on the site and if so, would really appreciate you recommending it to others.&lt;/p&gt;  &lt;p&gt;Its currently simple but functional, and will have many more pieces of work from Michele on there, as well as enhanced styling and functionality.&lt;/p&gt;  &lt;p&gt;For now though, we would love your feedback which can be submitted via the &lt;a href="http://fromthegrey.com/ContactUs.aspx" target="_blank"&gt;Contact Form&lt;/a&gt; on the site.&lt;/p&gt;  &lt;p&gt;For the technically inclined, it utilises ASP.NET 3.5 Webforms, &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery 1.3.2&lt;/a&gt;, and &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt; plugins for the dialog box and gallery effects, &lt;a href="http://jquery.com/demo/thickbox/" target="_blank"&gt;Thickbox&lt;/a&gt; and &lt;a href="http://devkick.com/lab/galleria/" target="_blank"&gt;Galleria&lt;/a&gt; respectively.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7080166" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/General/default.aspx">General</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/jquery/default.aspx">jquery</category></item><item><title>AjaxView – Javascript profiling</title><link>http://weblogs.asp.net/pglavich/archive/2009/05/10/ajaxview-javascript-profiling.aspx</link><pubDate>Sun, 10 May 2009 00:25:36 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7080153</guid><dc:creator>Glav</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7080153</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/05/10/ajaxview-javascript-profiling.aspx#comments</comments><description>&lt;p&gt;A little while ago, I &lt;a href="http://weblogs.asp.net/pglavich/archive/2008/06/03/profiling-your-ajax-applications-using-ajaxview.aspx"&gt;posted&lt;/a&gt; about a tool called &lt;a href="http://code.msdn.microsoft.com/AjaxView" target="_blank"&gt;AjaxView&lt;/a&gt; to allow you to profile javascript code within your web applications.&lt;/p&gt;  &lt;p&gt;Well, I was contacted by Adam who is working on this tool about its latest incarnation. It appears had a lot of work done to it, and now looks quite slick and is really nice to use. Previously, it was quite raw in use and also with the metrics its provides. Now, it acts very similar to one of my favourite profilers, &lt;a href="http://www.red-gate.com/products/ants_profiler/index.htm" target="_blank"&gt;Ants Profiler&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;What does it do?&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This tool injects profiling code into your javascript that enables it to analyse your javascript code and provide accurate metrics around all the operations being performed, including anonymous functions. It then provides these metrics to the Visual Studio performance tools for you to view in a very simple and familiar manner.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;How do you use it?&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You need to be using IIS7 in Integrated mode for this tool to work. A full set of install instructions is listed &lt;a href="http://code.msdn.microsoft.com/AjaxView/Release/ProjectReleases.aspx?ReleaseId=2594" target="_blank"&gt;here&lt;/a&gt; along with the installation files. It installs pretty easily.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;What do you get?&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In short, you get detailed metrics on each page and javascript file in your site. When access a site with the AjaxView profile tools installed, all metric information is automatically being recorded. You can then access a web site on your local machine that is installed when AjaxView is installed. (Something like &lt;a href="http://localhost/AjaxView"&gt;http://localhost/AjaxView&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;When you do that, you can view the session profiles you have created (or the default one that is created for you on install). Something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/pglavich/image_6374FCAE.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/pglavich/image_thumb_4EDF8763.png" width="522" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Select any of the files on the right which constitute all the files access by your web app (either a page or javascript file). Select the ‘Get profile data’ button and it launches Visual Studio and provides the profile metric data so that you can view it within Visual Studio. You end up getting access to detailed multiple views like the ones shown below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/pglavich/image_214E41D3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/pglavich/image_thumb_39618661.png" width="387" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/pglavich/image_7F621DA7.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/pglavich/image_thumb_2D8BF395.png" width="644" height="118" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/pglavich/image_37906EF3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/pglavich/image_thumb_53DDB113.png" width="644" height="108" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;All in all, a pretty useful tool to look at your Javascript performance. I recommend you take a look. Get it from &lt;a href="http://code.msdn.microsoft.com/AjaxView" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7080153" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/jquery/default.aspx">jquery</category></item><item><title>Regaining results from a performance test run</title><link>http://weblogs.asp.net/pglavich/archive/2009/04/29/regaining-results-from-a-performance-test-run.aspx</link><pubDate>Wed, 29 Apr 2009 12:48:33 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7064546</guid><dc:creator>Glav</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=7064546</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/04/29/regaining-results-from-a-performance-test-run.aspx#comments</comments><description>&lt;p&gt;I have been doing a lot of performance testing lately, and one of the worst things that can happen during a performance run, is when you don’t get any results. Performance testing is expensive, from a time and resources perspective, so getting results from a run is paramount.&lt;/p&gt;  &lt;p&gt;In my scenario, I have everything automated to kick off a performance run, at 7.00pm every night, run for 12 hours, then terminate. I collect metrics via Visual Studio Team Suite which is used to drive my performance tests, but I also have automated the collection of performance metrics on all related servers (web, sql etc…)&lt;/p&gt;  &lt;p&gt;On one of my recent runs, I came into the office in the morning, and checked on the test rig. The test appeared to be still running, even well beyond the termination time. VSTS reported that it was trying to abort the test, but things were still running. Some of the test agents refused to respond.&lt;/p&gt;  &lt;p&gt;I pressed the stop button to stop the test in VSTS and while I was waiting for that, loaded up the test results so far. The business were eagerly awaiting the results of the tests and it looked promising so far.&lt;/p&gt;  &lt;p&gt;Visual Studio began to refuse to respond after a while and was continuing to try and stop the test. After a long wait, I simply killed off the &lt;font size="2" face="Courier New"&gt;devenv.exe&lt;/font&gt; process, and restarted the Visual Studio Test controller service.&lt;/p&gt;  &lt;p&gt;I then went to load my test data from the run. Oh dear, the test run that I was looking at not more than half an hour ago, did not appear. Nothing listed on the ‘Completed Tests’ tab, and nothing within the ‘Manage Test Results’ option either.&lt;/p&gt;  &lt;p&gt;Crap. A business person walks by and asks how the test run went. “Still analysing the data” was my response. Double crap. What to do.&lt;/p&gt;  &lt;p&gt;After looking at the SQL database where the load results are stored, it was apparent there was a bunch of data in there, that simply was not showing. Looking through the raw data did not appeal to me very much.&lt;/p&gt;  &lt;p&gt;I had a look in the&lt;font size="2" face="Courier New"&gt; ‘LoadTest’&lt;/font&gt; table in the LoadTest database I was using to see if there was any data.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/pglavich/image_4D1C360B.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/pglavich/image_thumb_6ED7E8CF.png" width="299" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I noticed there was no ‘&lt;font size="2" face="Courier New"&gt;End Time&lt;/font&gt;’ defined for my run. It was simply set to NULL&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/pglavich/image_5E9BFB09.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/pglavich/image_thumb_757ACC85.png" width="566" height="250" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;. The Start Date was correct, so I simply copied the &lt;font size="2" face="Courier New"&gt;StartTime&lt;/font&gt; to the &lt;font size="2" face="Courier New"&gt;EndTime&lt;/font&gt; column, changed the date to the next day, and set the time to AM instead of PM (thus setting my 12 hour run).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/pglavich/image_79387155.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/pglavich/image_thumb_492E1FD4.png" width="558" height="214" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;And now I have normal access to all my test results. Whew…. crisis averted.&lt;/p&gt;  &lt;p&gt;Hope this helps someone.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7064546" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/debugging/default.aspx">debugging</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/General/default.aspx">General</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Animated SiteMap Ajax Control</title><link>http://weblogs.asp.net/pglavich/archive/2009/02/12/animated-sitemap-ajax-control.aspx</link><pubDate>Thu, 12 Feb 2009 11:18:53 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6898407</guid><dc:creator>Glav</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=6898407</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/02/12/animated-sitemap-ajax-control.aspx#comments</comments><description>&lt;p&gt;Today, I finally released on &lt;a href="http://www.codeplex.com/animatedsitemap"&gt;Codeplex&lt;/a&gt; a control that I had been working on over a year ago, called the &lt;a href="http://www.codeplex.com/animatedsitemap"&gt;Animated SIteMap Control&lt;/a&gt;. Its an &lt;a href="http://www.codeplex.com/AjaxControlToolkit"&gt;AJAX Control toolkit&lt;/a&gt; control and it has been prototype form for a very long time now.&lt;/p&gt;  &lt;p&gt;I had planned on releasing it into the &lt;a href="http://www.codeplex.com/AjaxControlToolkit"&gt;AJAX Control toolkit&lt;/a&gt; but I got sidetracked and haven’t touched this in over a year. It works fine and probably needs a little refinement but has configurable animation speeds, full support for CSS styling and various other options.&lt;/p&gt;  &lt;p&gt;Basically, it creates an ‘exploding’ like circular animation of the nodes defined in your web.sitemap file. You can drill down into nodes that have subnodes, or step back from the selected node, and the nodes of the same level are all animated in a circular fashion around the main or home node.&lt;/p&gt;  &lt;p&gt;You can view a very small and brief example of this &lt;a href="http://www.theglavs.com/ControlTestPage.aspx"&gt;here&lt;/a&gt;: &lt;a title="http://www.theglavs.com/ControlTestPage.aspx" href="http://www.theglavs.com/ControlTestPage.aspx"&gt;http://www.theglavs.com/ControlTestPage.aspx&lt;/a&gt;. Feel free to download it and use it if you like it. Hopefully, you may get the time to contribute to it and make it better. I know my time is short and I just didn’t want to waste it. Perhaps even a jQuery port might come of it.&lt;/p&gt;  &lt;p&gt;At any rate, if you end up using it, changing it or whatever, I would love to know. Hope you like it.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6898407" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Component/default.aspx">Component</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Controls/default.aspx">Controls</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Control+Toolkit/default.aspx">Control Toolkit</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/AJAX+Control+toolkit/default.aspx">AJAX Control toolkit</category></item><item><title>EOAST #4 – Evolution of a software thingy Part 4</title><link>http://weblogs.asp.net/pglavich/archive/2009/01/26/eoast-4-evolution-of-a-software-thingy-part-4.aspx</link><pubDate>Mon, 26 Jan 2009 01:45:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6860387</guid><dc:creator>Glav</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=6860387</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/01/26/eoast-4-evolution-of-a-software-thingy-part-4.aspx#comments</comments><description>&lt;p&gt;So its been ages since my last post on this pet project of mine. Its time to get down to the nitty gritty on this and see if it is actually working the way I want it to. Hopefully, you have read parts &lt;a href="http://weblogs.asp.net/pglavich/archive/2008/08/04/eoast-evolution-of-a-software-thingy-part-1.aspx" mce_href="http://weblogs.asp.net/pglavich/archive/2008/08/04/eoast-evolution-of-a-software-thingy-part-1.aspx"&gt;one&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/pglavich/archive/2008/08/11/eoast-evolution-of-a-software-thingy-part-2.aspx" mce_href="http://weblogs.asp.net/pglavich/archive/2008/08/11/eoast-evolution-of-a-software-thingy-part-2.aspx"&gt;two&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/pglavich/archive/2008/09/09/eoast-evolution-of-a-software-thingy-part-3.aspx" mce_href="http://weblogs.asp.net/pglavich/archive/2008/09/09/eoast-evolution-of-a-software-thingy-part-3.aspx"&gt;three&lt;/a&gt; in previous posts to get a good idea on what I am trying to achieve.&lt;/p&gt;  &lt;p&gt;Basically, its a collect, store and display mechanism to store almost any information in a SQL database. You only need concentrate on implementing collection logic, or only display logic or both if you so choose. Its up to you. The storage and querying of this information is done for you, as is the scheduling of collection. Additionally, its gotta be real robust. If someone writes a crappy information provider, the system should not die. Also, I want to be able to map an information provider to one or more display providers, all easily.&lt;/p&gt;  &lt;p&gt;I have dubbed this the &lt;i&gt;InformationAggregator&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;So I am happy to say its actually working reasonably well at the moment. Since its a pet project of mine, the fact it is actually up to a reasonable level of functionality is quite an achievement. Normally I kinda let things go once I have satisfied my initial curiosity, or whatever it was that got me interested in doing it. What I haven’t really spent much time with is the user interface. Its really just a set of buttons on a form to exercise the API.&lt;/p&gt;  &lt;p&gt;At any rate, the basic details are as follows.&lt;/p&gt;  &lt;p&gt;There are 2 main assemblies: &lt;font size="2" face="courier "&gt;InformationAggregator.Core.dll&lt;/font&gt; and &lt;font size="2" face="Courier New"&gt;Information.Aggregator.Engine.dll&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;If you want to implement an information collection provider or an information display module, you only need to reference the Core assembly. The Engine assembly contains all the functionality to start the hosting and collection engine.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Note: Since this codebase is always being revised, its prone to change so there maybe much refactoring in the future. In fact, part of it will be happening after this post ":-)&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Writing an Information Collection provider&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Say you want to write a module which collects email, accepts user input, reads a users twitter entries, or some other information collection mechanism. You only need to Implement 2 interfaces: &lt;font size="2" face="Courier New"&gt;IPluginModule&lt;/font&gt;, &amp;amp; &lt;font size="2" face="Courier New"&gt;IInformationProvider&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;font size="2" face="Courier New"&gt;IPluginModule&lt;/font&gt; has only 1 method, &lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;i&gt;QueryPluginResponse QueryPluginModule()&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;which acts to provide some metadata around itself. Here is an example:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;public QueryPluginResponse QueryPluginModule()      &lt;br&gt;{       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; QueryPluginResponse response = new QueryPluginResponse();       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.MajorVersion = 1;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.MinorVersion = 0;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.PluginDescription = "Test Manual Collection. Only sends information to engine once collected from keyboard entry";       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.PluginName = "ManualCollector";       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.Publisher = "Glav";       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.PublisherLink = "&lt;/font&gt;&lt;a href="http://www.theglavs.com%22;" mce_href="http://www.theglavs.com&amp;quot;;"&gt;&lt;font size="2" face="Courier New"&gt;http://www.theglavs.com";&lt;/font&gt;&lt;/a&gt;     &lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.RevisionNumber = 0;      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.SupportsCollectionNotification = false;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.TypeOfService = ServiceType.InformationProvider; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return response;      &lt;br&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;IInformationProvider &lt;/font&gt;also requires the implementation of only 1 method,&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;i&gt;List&amp;lt;GenericInformationItem&amp;gt; GetAllInformation()&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Here is an example:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;public List&amp;lt;GenericInformationItem&amp;gt; GetAllInformation()      &lt;br&gt;{       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;GenericInformationItem&amp;gt; list = new List&amp;lt;GenericInformationItem&amp;gt;(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Random rnd = new Random(DateTime.Now.Millisecond);      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; 3; i++)       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GenericInformationItem item = new GenericInformationItem();       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.Author = "Paul Glavich"; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.BodyTextData = string.Format("This is dummy body entry ID:# {0}. The current date is {1} and the time is {2}", rnd.Next(1,200),DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString());      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.InformationSource = "Unit Test";       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.ReceivedDateTime = DateTime.Now;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.Originator = "TestInformationProvider";       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.PublishDate = DateTime.Now;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.SourceProvider = PROVIDER_NAME;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.Summary = "Just a test item"; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.Title = string.Format("Test Item #{0}", i);      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.Add(item);       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return list;      &lt;br&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This implementation simply sends 3 items of information to the InformationAggregator engine when its asked to do so. This particular implementation is well suited to periodic, or scheduled collection. The engine can be asked to collect information from modules every minute, hour, day, week etc.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image.png" mce_href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image.png"&gt;&lt;img src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb.png" title="image" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" alt="image" mce_src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb.png" width="373" border="0" height="318"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The engine also supports manual collection where it does not schedule collection at specific intervals, but waits for the provider to send it information. A third option is where the engine instructs the module to begin collection, then returns to its business, allowing that module to take its sweet time about collection (it may be very time consuming) and then send it the collected items. Status events of the collection process is also supported.&lt;/p&gt;  &lt;p&gt;Note that the implementation is very simple. It would be easy to write some logic to query some RSS feeds, twitter feeds, or whatever. All the scheduling and storage is performed via the engine through configuration. Currently I have a very crude user interface (and a I mean very crude) to control all this. Basically some buttons to exercise the functionality of the API:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_3.png" mce_href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_3.png"&gt;&lt;img src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_3.png" title="image" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" alt="image" mce_src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_3.png" width="424" border="0" height="328"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Only collection modules that have been registered, have their items accepted and stored via the engine in the database. When registering, the IQueryModule interface is invoked to gather and display some metadata to display for confirmation when registering:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_4.png" mce_href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_4.png"&gt;&lt;img src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_4.png" title="image" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" alt="image" mce_src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_4.png" width="493" border="0" height="255"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Writing an Information Display provider&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;To display information, again we implement only 2 interfaces: &lt;font size="2" face="Courier New"&gt;IPluginModule&lt;/font&gt;, &amp;amp; &lt;font size="2" face="Courier New"&gt;IInformationDiplay&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;IPluginModule&lt;/font&gt; was already discussed above and is a pre-requisite for any module, either display or collection.&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;IInformationDiplay&lt;/font&gt; has 2 methods to implement:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;void PushInformation(List&amp;lt;GenericInformationItem&amp;gt; infoItems ); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;void PushStatus(QueryPluginResponse plugin, int percentCollectionCompleted, CollectionStatus statusIndicator, string statusMessage);&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;The ‘&lt;font size="2" face="Courier New"&gt;&lt;i&gt;PushInformation&lt;/i&gt;&lt;/font&gt;’ method has the information ‘&lt;i&gt;pushed&lt;/i&gt;’ to it, and you can do what you want with the info from there. (Note: Not really happy with these method names, but I’ll leave them for now)&lt;/p&gt;  &lt;p&gt;The ‘&lt;font size="2" face="Courier New"&gt;&lt;i&gt;PushStatus&lt;/i&gt;&lt;/font&gt;’ method gets called repeatedly during the collection phase, if the information provider is providing this information.&lt;/p&gt;  &lt;p&gt;The display provider can be a simply console app, or more typically, a WPF application. These all need to be registered as described above.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_5.png" mce_href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_5.png"&gt;&lt;img src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_5.png" title="image" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" alt="image" mce_src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_5.png" width="415" border="0" height="215"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;However, one more pre-requisite is required if its a WPF application. A parameterised constructor must be provided that accepts the WPF window to be used for display. The engine will search the WPF application for this constructor and construct an instance of this window when creating this module, and maintain this, so that display items can be sent to the module, and threading affinity can be easily achieved.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Linking providers to display modules.&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;So we can easily create an information collection provider. We can also easily create a display provider. How do we get information from collection provider to display provider. We simply map one or more collection modules to a display provider. Here is an example of the (again very crude) UI to do this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_6.png" mce_href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_6.png"&gt;&lt;img src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_6.png" title="image" style="border-width: 0px; display: inline;" alt="image" mce_src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_6.png" width="529" border="0" height="197"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This UI shows 2 information providers, ManualCollector and TestInformationProvider. Currently, only the WPFDisplayProvider#2 is mapped to the TestInformationProvider, with the BalloonPopup display provider available, but not mapped to this module. This means that any information that the TestInformationProvider collects, is currently automatically sent to the WPFDisplayProvider#2. If we want that information to be sent to 2 display providers, we can simply click on the BalloonPopup display provider and move it into the mapped display providers.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_7.png" mce_href="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_7.png"&gt;&lt;img src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_7.png" title="image" style="border-width: 0px; display: inline;" alt="image" mce_src="http://www.theglavs.com/article_Images/EOAST4EvolutionofasoftwarethingyPart4_114E5/image_thumb_7.png" width="538" border="0" height="200"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now when the engine starts, all information collected by the TestInformationProvider is automatically sent to both the WPFDisplayProvider#2 and the BalloonPopup display provider. Basically you can pick and choose how your information is collected, and how it is displayed.&lt;/p&gt;  &lt;p&gt;So thats the concept. Control the collection of your information, and choose a display method that matches what you want. Additionally, have the information stored in an easily queryable store. &lt;/p&gt;  &lt;p&gt;There is actually much more, but I’ll leave it for now. Next step will be a demo, so look for a short video on how it works and specifically the WPF implementation of the display providers.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6860387" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/WPF/default.aspx">WPF</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Some interesting links for ASP.NET</title><link>http://weblogs.asp.net/pglavich/archive/2009/01/09/some-interesting-links-for-asp-net.aspx</link><pubDate>Fri, 09 Jan 2009 06:29:51 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6828926</guid><dc:creator>Glav</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=6828926</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2009/01/09/some-interesting-links-for-asp-net.aspx#comments</comments><description>&lt;p&gt;Its been a while since I have done any technical stuff as I have been on holidays, relaxing, and generally a lot of nothing. Certainly nothing technical related and have really enjoyed spending time with friends and family.&lt;/p&gt;  &lt;p&gt;Over this period, &lt;a href="http://morewally.com/cs/blogs/wallym/default.aspx"&gt;Wally&lt;/a&gt; has produced some good material around ASP.NET which I feel obligated to share with you….. (ok, so maybe Wally coerced me a bit….)&lt;/p&gt;  &lt;p&gt;Firstly, &lt;a href="http://morewally.com/cs/blogs/wallym/default.aspx"&gt;Wally&lt;/a&gt; has done a new ASP.NET Podcast:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2009/01/06/asp-net-podcast-show-134-general-thoughts-on-windows-azure-audio-only.aspx"&gt;ASP.NET Podcast Show #134 - General Thoughts on Windows Azure - Audio only&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Some good discussion around Cloud computing and Windows Azure in there.&lt;/p&gt;  &lt;p&gt;Also, &lt;a href="http://morewally.com/cs/blogs/wallym/default.aspx"&gt;Wally&lt;/a&gt; has produced an e-Book on some of the ASP.NET 3.5 SP1 features and its located &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/New-Features-in-ASP-NET-3-5-Service-Pack-1.productCd-0470457341.html"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Go check em out. Make &lt;a href="http://morewally.com/cs/blogs/wallym/default.aspx"&gt;Wally&lt;/a&gt; a happy &lt;a href="http://morewally.com/cs/blogs/wallym/default.aspx"&gt;Wally&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6828926" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/pglavich/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/podcast/default.aspx">podcast</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category></item></channel></rss>