<?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 : Web 2.0</title><link>http://weblogs.asp.net/pglavich/archive/tags/Web+2.0/default.aspx</link><description>Tags: Web 2.0</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><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>0</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>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>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>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><item><title>ASP.NET Podcast Show #119 - Using the History (Back) Functionality with the ASP.NET AJAX Web Services in .NET 3.5 Service Pack 1 Beta 1</title><link>http://weblogs.asp.net/pglavich/archive/2008/07/02/asp-net-podcast-show-119-using-the-history-back-functionality-with-the-asp-net-ajax-web-services-in-net-3-5-service-pack-1-beta-1.aspx</link><pubDate>Wed, 02 Jul 2008 03:49:11 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6348373</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=6348373</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2008/07/02/asp-net-podcast-show-119-using-the-history-back-functionality-with-the-asp-net-ajax-web-services-in-net-3-5-service-pack-1-beta-1.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://weblogs.asp.net/wallym" target="_blank"&gt;Wally&lt;/a&gt; has put out another podcast following his series around some of the latest AJAX features in .Net 3.5 SP1. In this installment, he looks at the history (back button) support.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.scalabledevelopment.com/ftp/ScalabilityWithDotNet.xml"&gt;Subscribe to Everything&lt;/a&gt;. &lt;p&gt;Original Url: &lt;a href="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/07/01/asp-net-podcast-show-119-using-the-history-back-functionality-with-the-asp-net-ajax-web-services-in-net-3-5-service-pack-1-beta-1.aspx"&gt;http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/07/01/asp-net-podcast-show-119-using-the-history-back-functionality-with-the-asp-net-ajax-web-services-in-net-3-5-service-pack-1-beta-1.aspx&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.scalabledevelopment.com/ftp/ASPNETPodcast-WMV.xml"&gt;Subscribe to WMV format&lt;/a&gt;. &lt;p&gt;&lt;a href="http://www.scalabledevelopment.com/ftp/ASPNETPodcast-MP4.xml"&gt;Subscribe to M4V for iPod Users&lt;/a&gt;. &lt;p&gt;&lt;a href="http://www.scalabledevelopment.com/ftp/ASPNETPodcast-MP3.xml"&gt;Subscribe to MP3 (Audio only)&lt;/a&gt;.  &lt;p&gt;&lt;a href="http://www.aspnetpodcast.com/videofiles/aspnetpodcast20080701-ajaxwebserviceshistory.wmv"&gt;Download WMV&lt;/a&gt;. &lt;p&gt;&lt;a href="http://www.aspnetpodcast.com/videofiles/aspnetpodcast20080701-ajaxwebserviceshistory.m4v"&gt;Download M4V for iPod Users&lt;/a&gt;. &lt;p&gt;&lt;a href="http://www.aspnetpodcast.com/podcastfiles/aspnetpodcast20080701-ajaxwebserviceshistory.mp3"&gt;Download MP3 (Audio only)&lt;/a&gt;. &lt;p&gt;&lt;a href="http://www.aspnetpodcast.com/CS11/files/folders/podcastsupportfiles/entry1176.aspx"&gt;Download PPT associated file&lt;/a&gt;.  &lt;p&gt;Show Notes: &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/05/05/asp-net-podcast-show-111-asp-net-ajax-with-virtual-earth.aspx"&gt;This show is an extension of Show #110 on ASP.NET AJAX and Live Maps&lt;/a&gt;.  &lt;li&gt;Back and forward are now enabled.  &lt;li&gt;Data stored on the url.  &lt;li&gt;Upcoming Community Events:  &lt;ul&gt; &lt;li&gt;GiveCamp in Ann Arbor, MI. &lt;a href="http://www.annarborgivecamp.org/"&gt;http://www.annarborgivecamp.org&lt;/a&gt;.&amp;nbsp; Check for Satellite events.  &lt;li&gt;CodeStock in Knoxville on August 9.&amp;nbsp; &lt;a href="http://www.codestock.org/"&gt;http://www.codestock.org&lt;/a&gt;.  &lt;li&gt;devLink in Nashville on August 22-23.&amp;nbsp; &lt;a href="http://www.devlink.net/"&gt;http://www.devlink.net&lt;/a&gt;.  &lt;li&gt;INETA Silverlight Challenge..&amp;nbsp; &lt;a href="http://www.ineta.org/silverlight"&gt;http://www.ineta.org/silverlight&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Source Code: &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ScriptManager ID="sm" runat="server" &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableHistory="true" &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableSecureHistoryState="true" &amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Services&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ServiceReference Path="~/GetMaps.asmx" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Services&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/asp:ScriptManager&amp;gt;&lt;br&gt;&amp;lt;script language="javascript" type="text/javascript"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var Map;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var userNavigated = false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function pageLoad() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sys.Application.add_navigate(onNavigate);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetMaps.MapData(SetupMap);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function onNavigate(sender, e) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (userNavigated) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; restorePage(e.get_state());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function restorePage(PageState) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var UpperLeftLat = new Number(PageState.UpperLeftLat);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var UpperLeftLon = new Number(PageState.UpperLeftLon);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var BottomRightLat = new Number(PageState.LowerRightLat);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var BottomRightLon = new Number(PageState.LowerRightLon);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var ZoomLevel = new Number(PageState.ZoomLevel);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var Lat = (UpperLeftLat + BottomRightLat ) / 2;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var Lon = (UpperLeftLon + BottomRightLon) / 2;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!(isNaN(Lat) || isNaN(Lon))) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.LoadMap(new VELatLong(Lat, Lon), ZoomLevel, 'h', false);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetMaps.GetPointData(10, UpperLeftLat, UpperLeftLon,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BottomRightLat, BottomRightLon, GetDataSuccess);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function SetupMap(result) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var Lat = result.Center.Lat;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var Lon = result.Center.Lon;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var ZoomLevel = result.ZoomLevel;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var MapView, TopLeft, BottomRight;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map = new VEMap('MapDiv');&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.LoadMap(new VELatLong(Lat, Lon), ZoomLevel, 'h', false);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MapView = Map.GetMapView();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TopLeft = MapView.TopLeftLatLong;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BottomRight = MapView.BottomRightLatLong;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //TopleftLatLong and BottomRightLatLong return a VELatLong object.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.AttachEvent("onchangeview", MapChangedView);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetupHistory();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetMaps.GetPointData(10, TopLeft.Latitude, TopLeft.Longitude,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BottomRight.Latitude, BottomRight.Longitude, GetDataSuccess);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (e) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert("Error: " + e);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function GetDataSuccess(result) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var i = 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var Lat, Lon;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; result.length; i++) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lat = result[i].Location.Lat;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lon = result[i].Location.Lon;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var shape = new VEShape(VEShapeType.Pushpin, new VELatLong(Lat, Lon));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shape.SetTitle("Title: " + i);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shape.SetDescription(result[i].Description);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.AddShape(shape);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function SetupHistory() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var PageTitle;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var now = new Date();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var CurrentTime = now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PageTitle = "AJAX History Test Time:" + CurrentTime;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MapView = Map.GetMapView();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TopLeft = MapView.TopLeftLatLong;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BottomRight = MapView.BottomRightLatLong;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZoomLevel = Map.GetZoomLevel();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var PageState =&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "UpperLeftLat": TopLeft.Latitude,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "UpperLeftLon": TopLeft.Longitude,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "LowerRightLat": BottomRight.Latitude,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "LowerRightLon": BottomRight.Longitude,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "ZoomLevel": ZoomLevel&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userNavigated = false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sys.Application.addHistoryPoint(PageState, PageTitle);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userNavigated = true;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function MapChangedView(e) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.DeleteAllShapes();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MapView = Map.GetMapView();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TopLeft = MapView.TopLeftLatLong;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BottomRight = MapView.BottomRightLatLong;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetupHistory();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetMaps.GetPointData(10, TopLeft.Latitude, TopLeft.Longitude,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BottomRight.Latitude, BottomRight.Longitude, GetDataSuccess);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;lt;/script&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id="MapDiv" style="position:relative; width:450px; height: 350px;" &amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6348373" 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><item><title>VSTS 2008, Web Tests and using Fiddler</title><link>http://weblogs.asp.net/pglavich/archive/2008/06/03/vsts-2008-web-tests-and-using-fiddler.aspx</link><pubDate>Tue, 03 Jun 2008 06:04:23 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6244002</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=6244002</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2008/06/03/vsts-2008-web-tests-and-using-fiddler.aspx#comments</comments><description>&lt;p&gt;I have been doing some performance and load testing of a web application I have been working on lately. Most of my previous experience was with the 2005 flavour of VSTS and I was keen to play with the 2008 version to see what improvements have been made. This web application is quite heavy in terms of Javascript and AJAX feature usage.&lt;/p&gt; &lt;p&gt;I am happy to report that things are much better in this version, but still not as easy as I had hoped. Form value extraction and recognition of AJAX requests seem to work well.&lt;/p&gt; &lt;p&gt;However, I still had some problems running the tests. For the most part they would run ok, but would cause errors on the server such as:&lt;/p&gt; &lt;p&gt;&lt;font size="2" face="Courier New"&gt;'Index was outside the bounds of the array.' at System.Web.Handlers.ScriptResourceHandler.ProcessRequest&lt;/font&gt;&lt;/p&gt; &lt;p&gt;which was always when accessing some script resource via the &lt;font size="2" face="Courier New"&gt;ScriptResource.axd&lt;/font&gt; handler.&lt;/p&gt; &lt;p&gt;I could see no reference to any of my code in there. Everything seemed to work as far as the client aspect was concerned (examining the results of the web tests) but this did not sit too well with me.&lt;/p&gt; &lt;p&gt;So I decided to try and record some tests via &lt;a href="http://www.fiddler2.com" target="_blank"&gt;Fiddler2 HTTP proxy tool&lt;/a&gt; to see if that helped. There was definitely a little more work in getting this to record and playback web tests properly, but I was able to get some cleaner looking tests, and no errors generated on the server using this method. I did verify that all the functionality was being exercised on the server just in case I was missing anything and getting false positives.&lt;/p&gt; &lt;p&gt;The procedure I used to record web tests and get them working was.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Load Fiddler2  &lt;li&gt;Load Internet Explorer and browse to the site, running through my specific performance test scenario.  &lt;li&gt;In Fiddler, press F12 to ensure no more sessions/traffic is captured.  &lt;li&gt;Select all the sessions by using &lt;font size="2" face="Courier New"&gt;CTRL-A&lt;/font&gt; (ensuing there was no other traffic that got recorded at the time. If there was, just highlight that session and delete it)  &lt;li&gt;Go to the &lt;font size="2" face="Courier New"&gt;File &amp;gt;&amp;gt; Save &amp;gt;&amp;gt; Sessions &amp;gt;&amp;gt; As Visual Studio Web Test&lt;/font&gt; menu option&lt;a href="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_thumb.png" width="450" height="164"&gt;&lt;/a&gt;  &lt;li&gt;In Visual Studio 2008, within your test project, add in the existing web test.  &lt;li&gt;VS2008 will add some 'Form Field' extraction rules to each request. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_3.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_thumb_3.png" width="211" height="79"&gt;&lt;/a&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;If you are using UpdatePanel's a lot and need to extract the ViewState from UpdatePanel delta responses, you will need to change the extraction rule.  &lt;li&gt;For this I created a Text Extraction rule.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_thumb_4.png" width="212" height="79"&gt;&lt;/a&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;This rule simply looks for &lt;font size="2" face="Courier New"&gt;__VIEWSTATE|&lt;/font&gt; (yes, that's a pipe char on the end) as the start text and a pipe &lt;font size="2" face="Courier New"&gt;|&lt;/font&gt; as the end delimiter text and extracts everything in between.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_5.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_thumb_5.png" width="323" height="203"&gt;&lt;/a&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;I had to add this extraction rule to each request, and replace the references to the old Form field extraction value&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_thumb_6.png" width="244" height="37"&gt;&lt;/a&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;with references to our new AJAX text extraction rule.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_7.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.theglavs.com/article_Images/VSTS2008WebTestsandusingFiddler_B8C3/image_thumb_7.png" width="244" height="46"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Like I said, it was a little bit of work to go through each page request and fix it in this manner, but the tests execute cleanly every time with no errors on the server as previously mentioned and it is actually a neater looking web test.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6244002" 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/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/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Profiling your AJAX Applications using AjaxView</title><link>http://weblogs.asp.net/pglavich/archive/2008/06/03/profiling-your-ajax-applications-using-ajaxview.aspx</link><pubDate>Tue, 03 Jun 2008 05:35:09 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6243959</guid><dc:creator>Glav</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=6243959</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2008/06/03/profiling-your-ajax-applications-using-ajaxview.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Don't know if this has already been discussed at length before, but I found an interesting little tool from Microsoft Research for profiling the Javascript functionality in your AJAX applications.&lt;/p&gt; &lt;p&gt;Its called &lt;a href="http://research.microsoft.com/projects/ajaxview/" target="_blank"&gt;AjaxView&lt;/a&gt; and can remotely monitor any AJAX web app that is currently on the web, locally or whatever.&lt;/p&gt; &lt;p&gt;You basically, install a small proxy application, then change your Internet Explorer LAN connection to go through a proxy of &lt;font size="2" face="Courier New"&gt;localhost:8888.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Go and browse your web application or your own AJAX app, and execute your normal series of functionality.&lt;/p&gt; &lt;p&gt;Once your done, you then browse to a page generated by the tool itself&lt;/p&gt; &lt;p&gt;&lt;a href="http://fakeurl.com/?&amp;amp;AJAXVIEWREQUEST=GET=main.html"&gt;http://fakeurl.com/?&amp;amp;AJAXVIEWREQUEST=GET=main.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This gets you something like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/ProfilingyourAJAXApplicationsusingAjaxVi_C482/clip_image002.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="clip_image002" src="http://www.theglavs.com/article_Images/ProfilingyourAJAXApplicationsusingAjaxVi_C482/clip_image002_thumb.jpg" width="553" height="379"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;You can then click on whatever item you want, typically the site that represents the worst performance. You'll then get something like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/ProfilingyourAJAXApplicationsusingAjaxVi_C482/clip_image00210.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="clip_image002[10]" src="http://www.theglavs.com/article_Images/ProfilingyourAJAXApplicationsusingAjaxVi_C482/clip_image00210_thumb.jpg" width="644" height="320"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Here I have clicked on the 'Mean Time (ms)' view to get column sorted by the slowest functions. If I want to drill down a bit more, I can click on the 'Details' link which gives me:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/ProfilingyourAJAXApplicationsusingAjaxVi_C482/clip_image00212.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="clip_image002[12]" src="http://www.theglavs.com/article_Images/ProfilingyourAJAXApplicationsusingAjaxVi_C482/clip_image00212_thumb.jpg" width="644" height="384"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This shows me a breakdown of which functions took how long.&lt;/p&gt; &lt;p&gt;Its actually a pretty quick way to get a good idea of what is consuming a lot of client side cycles from a Javascript perspective. The tool is a little raw and is still somewhat rough, but its easy enough to use and get going and worth a quick look.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6243959" 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/debugging/default.aspx">debugging</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/Performance/default.aspx">Performance</category></item><item><title>Remix in Oz</title><link>http://weblogs.asp.net/pglavich/archive/2008/04/28/remix-in-oz.aspx</link><pubDate>Mon, 28 Apr 2008 06:05:36 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6138134</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=6138134</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2008/04/28/remix-in-oz.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.microsoft.com/australia/remix08/index.aspx"&gt;Remix&lt;/a&gt;, is heading downunder and registrations are now open. You can register &lt;a href="http://www.microsoft.com/australia/remix08/index.aspx"&gt;here&lt;/a&gt;.This event is especially cool for the many people who did not get a chance to attend the actual Mix event in the United States (which is many of us). &lt;/p&gt; &lt;p&gt;Dates and locations are:&lt;/p&gt; &lt;h5&gt;&lt;b&gt;Sydney&lt;/b&gt;&lt;/h5&gt;&amp;nbsp;&amp;nbsp; May 20 &lt;br&gt;&amp;nbsp;&amp;nbsp; Powerhouse Museum&lt;br&gt;&amp;nbsp;&amp;nbsp; Harris Street, Ultimo  &lt;h5&gt;&lt;b&gt;Melbourne&lt;/b&gt;&lt;/h5&gt;&amp;nbsp;&amp;nbsp; May 22&lt;br&gt;&amp;nbsp;&amp;nbsp; Melbourne Town Hall&lt;br&gt;&amp;nbsp;&amp;nbsp; Cnr Swanston &amp;amp; Collins&lt;br&gt;&amp;nbsp;&amp;nbsp; Street, Melbourne  &lt;p&gt;There will be heaps of quality technical content from a bunch of &lt;a href="http://www.microsoft.com/australia/remix08/sessions.aspx"&gt;local technical rockstars&lt;/a&gt;, and I will be attending and participating as an expert in one of the "Ask the Experts" areas.&lt;/p&gt; &lt;p&gt;Look forward to seeing you there!&lt;/p&gt; &lt;p&gt;Oh, by the way, &lt;strong&gt;each&lt;/strong&gt; attendee receives a copy of Expression Studio 2 (rrp$1040) for &lt;strong&gt;free&lt;/strong&gt; when they register!&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://weblogs.asp.net/australia/remix08/index.aspx"&gt;&lt;img border="0" alt="The Next Web Now" src="http://www.microsoft.com/australia/remix08/images/bling/nextweb_08.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6138134" 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/MVP/default.aspx">MVP</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/Silverlight/default.aspx">Silverlight</category></item><item><title>ASP.NET Podcast Show #107 - Paul and Wally talk about 2007 &amp; look forward to 2008</title><link>http://weblogs.asp.net/pglavich/archive/2008/01/08/asp-net-podcast-show-107-paul-and-wally-talk-about-2007-amp-look-forward-to-2008.aspx</link><pubDate>Tue, 08 Jan 2008 06:43:05 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5567194</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=5567194</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2008/01/08/asp-net-podcast-show-107-paul-and-wally-talk-about-2007-amp-look-forward-to-2008.aspx#comments</comments><description>&lt;p&gt;Here is the annual year end podcast that Wally and myself try and put out as a kind of summary of the year and to also highlight some of the things that may play a big part in the future.&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;b&gt;&lt;a href="http://www.scalabledevelopment.com/ftp/ScalabilityWithDotNet.xml"&gt;Subscribe&lt;/a&gt; &amp;lt;-- What every good developer should do!&lt;br&gt;&lt;/p&gt;&lt;/b&gt;&lt;/i&gt; &lt;p&gt;Original Url: &lt;a href="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/01/05/asp-net-podcast-show-107-paul-and-wally-talk-about-2007-look-forward-to-2008.aspx"&gt;http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/01/05/asp-net-podcast-show-107-paul-and-wally-talk-about-2007-look-forward-to-2008.aspx&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.aspnetpodcast.com/PodcastFiles/ASPNETPodcast20080103-2007to2008.mp3"&gt;Download&lt;/a&gt; &lt;p&gt;Show Notes: &lt;ul&gt; &lt;li&gt;&lt;a href="http://weblogs.asp.net/glav"&gt;Paul &lt;/a&gt;looks back on 2007  &lt;li&gt;Paul looks forward into 2008  &lt;li&gt;&lt;a href="http://www.morewally.com/"&gt;Wally &lt;/a&gt;just rambles................ &lt;/li&gt;&lt;/ul&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5567194" 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/Silverlight/default.aspx">Silverlight</category></item><item><title>AJAX Control toolkit and TFS Presentations</title><link>http://weblogs.asp.net/pglavich/archive/2007/10/29/ajax-control-toolkit-and-tfs-presentations.aspx</link><pubDate>Mon, 29 Oct 2007 05:41:03 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4815702</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=4815702</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2007/10/29/ajax-control-toolkit-and-tfs-presentations.aspx#comments</comments><description>&lt;p&gt;Tuesday 30th October and Wednesday 31st October, I am doing a presentation on the &lt;a href="http://www.codeplex.com/AtlasControlToolkit"&gt;AJAX Control Toolkit&lt;/a&gt;. It is part of the &lt;a href="http://www.readify.net/rdn.aspx"&gt;readify developer network&lt;/a&gt; series of presentations. I am doing a primer presentation which is more introductory and runs for a relatively short period of time. &lt;a href="http://blogs.madtechnology.net/blogs/chris/"&gt;Chris Burrows&lt;/a&gt; will then follow through with a Team Foundation server related presentation based on experiences in the field.&lt;/p&gt; &lt;p&gt;Tuesday there are 2 sessions (morning and night) in Sydney, and Wednesday there is 1 afternoon session in Canberra. Melbourne will also have a similar series of presentations on Thursday.&lt;/p&gt; &lt;p&gt;For more details and also to register for the events, visit here &lt;a href="http://www.readify.net/rdncalendar.aspx"&gt;http://www.readify.net/rdncalendar.aspx&lt;/a&gt;&amp;nbsp;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4815702" 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/Controls/default.aspx">Controls</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/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>Dodgy Debugging</title><link>http://weblogs.asp.net/pglavich/archive/2007/10/11/dodgy-debugging.aspx</link><pubDate>Thu, 11 Oct 2007 05:45:52 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4521010</guid><dc:creator>Glav</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=4521010</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2007/10/11/dodgy-debugging.aspx#comments</comments><description>&lt;p&gt;In a &lt;a href="http://weblogs.asp.net/pglavich/archive/2007/09/09/obscure-asp-net-problem-ajax-control-toolkit-collapsiblepanelextender-image-controls-pages-loading-more-than-once.aspx"&gt;previous post&lt;/a&gt;, I mentioned an obscure ASP.NET issue that had me scratching my head for a while.&lt;/p&gt; &lt;p&gt;In order to track it down, I had to resort some dodgy debugging techniques which I wouldn't call exactly scientific nor particularly complex, but they did help, so thought I'd share.&lt;/p&gt; &lt;p&gt;Basically, the page had many controls, and nested controls within many other containers and the like. The problem was difficult because there was no actual errors being caused and no obvious culprit to the "double request" problem I mentioned in the &lt;a href="http://weblogs.asp.net/pglavich/archive/2007/09/09/obscure-asp-net-problem-ajax-control-toolkit-collapsiblepanelextender-image-controls-pages-loading-more-than-once.aspx"&gt;previous post&lt;/a&gt;, so I had to start eliminating sections of the page and sections of controls to see if it fixed the problem, and then start to isolate even further.&lt;/p&gt; &lt;p&gt;Problem was, once you start removing controls, the code behind does&amp;nbsp;not compile, and then you have to start hacking your code behind so your site will compile and run. Once you remove more than a few controls, you need to make some serious changes and end up not really achieving anything by doing so. Ok for relatively simple pages, but a nightmare for complex pages. I wanted a way where I didn't break the code behind, but could easily remove controls from the page to try and isolate the issue.&lt;/p&gt; &lt;p&gt;Enter &lt;em&gt;dodgy debugging&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;To do this, I simply wrapped portions of the page in a Panel control and set its visibility to false. This still allowed all the code behind to compile and run fine, but because the visibility of the panel was false, the content within the panel would not be rendered at all.&lt;/p&gt; &lt;p&gt;So basically, portions of the page were wrapped in:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;asp:Panel id="pnl" runat="server" Visible="false"&amp;gt;&lt;br&gt;........&lt;br&gt;&amp;lt;/asp:Panel&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;I initially wrapped fairly large sections of the page, then reduced the number of controls within the panel,&amp;nbsp;until I could&amp;nbsp;isolate the control that was causing a double postback to my page.&lt;/p&gt; &lt;p&gt;Once I found the culprit, I fixed the issue and removed all the newly added panels from the page. Good to go.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4521010" 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/Controls/default.aspx">Controls</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/debugging/default.aspx">debugging</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></item><item><title>Some more JavaScript Intellisense issues in VS2008</title><link>http://weblogs.asp.net/pglavich/archive/2007/09/24/some-more-javascript-intellisense-issues-in-vs2008.aspx</link><pubDate>Mon, 24 Sep 2007 05:10:13 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4091980</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=4091980</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2007/09/24/some-more-javascript-intellisense-issues-in-vs2008.aspx#comments</comments><description>&lt;p&gt;I was experiencing the issues described &lt;a href="http://blogs.msdn.com/webdevtools/archive/2007/07/30/workaround-for-beta-2-javascript-intellisense-and-colorization-issue.aspx"&gt;here&lt;/a&gt; where I was getting no colourisation of JavaScript and no Intellisense. I applied the fix mentioned in the post but it didn't work.&lt;/p&gt; &lt;p&gt;Turned out I was missing the file itself file &lt;font face="Courier New" size="2"&gt;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Microsoft.JScript.AuthoringServices.dll&lt;/font&gt; and a complete search of the hard drive yielded nothing. Don't know where the file went as Intellisense used to work, but it simply wasn't there.&lt;/p&gt; &lt;p&gt;So I emailed&amp;nbsp;the &lt;a href="http://www.readify.net/"&gt;readify&lt;/a&gt; internal techlist&amp;nbsp;and the file was delivered to my&amp;nbsp;inbox shortly thereafter. Once I copied the file to its correct location, everything worked again.&lt;/p&gt; &lt;p&gt;Interestingly, another colleague mentioned that the file did not exist on their system either. I am running VS2008 in a virtual PC but don't know if that had anything to do with it.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4091980" 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/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/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category></item><item><title>Obscure ASP.NET Problem - AJAX Control Toolkit, CollapsiblePanelExtender, Image controls pages loading more than once....</title><link>http://weblogs.asp.net/pglavich/archive/2007/09/09/obscure-asp-net-problem-ajax-control-toolkit-collapsiblepanelextender-image-controls-pages-loading-more-than-once.aspx</link><pubDate>Sun, 09 Sep 2007 11:05:42 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:3805466</guid><dc:creator>Glav</dc:creator><slash:comments>22</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/pglavich/rsscomments.aspx?PostID=3805466</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2007/09/09/obscure-asp-net-problem-ajax-control-toolkit-collapsiblepanelextender-image-controls-pages-loading-more-than-once.aspx#comments</comments><description>&lt;p&gt;Had an issue on a current project where a page was being loaded twice for each request, although it was a little different for each browser. Under IE, this particular page was loaded, then the 'Default.aspx' page in the same directory was loaded. In Firefox, the same page was loaded twice. This was verified by simply placing breakpoints in the Page_Load events and watching it get hit twice, in addition to seeing this via the NET monitor in &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;Firebug&lt;/a&gt; (the Firefox addin).&lt;/p&gt; &lt;p&gt;It was causing performance issues as well as weirdness regarding page state, as you can imagine. So in I went, thinking it should be relatively easy to debug. Turns out it was quite obscure and took more time than I had originally anticipated.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Scenario:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This page was using a &lt;a href="http://asp.net/AJAX/Control-Toolkit/Live/CollapsiblePanel/CollapsiblePanel.aspx"&gt;CollapsiblePanelExtender&lt;/a&gt; from the &lt;a href="http://www.codeplex.com/AtlasControlToolkit"&gt;AJAX Control toolkit&lt;/a&gt; to display a drop menu in the page. The CollapsiblePanelExtender had a declaration like the following:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/ObscureASP.NETProblem_91B9/image04.png" atomicselection="true"&gt;&lt;/a&gt;&lt;a href="http://www.theglavs.com/article_Images/ObscureASP.NETProblem_91B9/image07.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="87" src="http://www.theglavs.com/article_Images/ObscureASP.NETProblem_91B9/image0_thumb3.png" width="523" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;lt;&lt;em&gt;Some properties removed for brevity&lt;/em&gt;&amp;gt;&lt;/p&gt; &lt;p&gt;Note the use of the &lt;font face="Courier New" size="2"&gt;CollapsedImage&lt;/font&gt; and &lt;font face="Courier New" size="2"&gt;ExpandedImage&lt;/font&gt; properties. These tell the extender what images to display when the control is in a collapsed and expanded state. We also used the &lt;font face="Courier New" size="2"&gt;ImageControlID&lt;/font&gt; property to point to an &amp;lt;asp:Image control for the extender to manipulate with the respective images. Its declaration looked like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/ObscureASP.NETProblem_91B9/image031.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="28" src="http://www.theglavs.com/article_Images/ObscureASP.NETProblem_91B9/image0_thumb21.png" width="379" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;And therein was the cause of the problem! The page itself looked as though it worked fine. The CollapsiblePanelExtender changed the image accordingly and it looked good. However, the &amp;lt;asp:Image control did not originally have any &lt;font face="Courier New" size="2"&gt;ImageUrl&lt;/font&gt; property specified to an initial image (even though the CollapsiblePanelExtender was dynamically setting it). This rendered out to the page like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/ObscureASP.NETProblem_91B9/image022.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="23" src="http://www.theglavs.com/article_Images/ObscureASP.NETProblem_91B9/image0_thumb14.png" width="393" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now you see it right? The &lt;font face="Courier New" size="2"&gt;&lt;strong&gt;src=""&lt;/strong&gt;&lt;/font&gt; part of the tag. This caused IE to make a request against the /WebDirectory/ and thus it was getting the default.aspx document in that directory. It caused Firefox to request exactly the same again. So 2 requests for the 1 page request. Obviously to solve it, we just specified the original image to be displayed as part of the image control like so:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.theglavs.com/article_Images/ObscureASP.NETProblem_91B9/image030.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="26" src="http://www.theglavs.com/article_Images/ObscureASP.NETProblem_91B9/image0_thumb20.png" width="512" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Problem solved!&lt;/p&gt; &lt;p&gt;Now in general, it might be obvious that an &amp;lt;asp:Image control might render out this way, and cause such an issue but the fact that the CollapsiblePanelExtender was dynamically setting this, and making it look like it was working fine, really threw me. It took some creative debugging to drill down and find this particular issue out, which I may highlight in the next post.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3805466" 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/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/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/Control+Toolkit/default.aspx">Control Toolkit</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Performance/default.aspx">Performance</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/AJAX+Control+toolkit/default.aspx">AJAX Control toolkit</category></item><item><title>Beginning ASP.NET 2.0 AJAX Book is out!</title><link>http://weblogs.asp.net/pglavich/archive/2007/07/13/beginning-asp-net-2-0-ajax-book-is-out.aspx</link><pubDate>Fri, 13 Jul 2007 02:12:33 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:3125902</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=3125902</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2007/07/13/beginning-asp-net-2-0-ajax-book-is-out.aspx#comments</comments><description>&lt;p&gt;The past year or so I have been working with a number of excellent co-authors on another book called &lt;a href="http://www.amazon.com/Beginning-ASP-NET-AJAX-Wallace-McClure/dp/0470112832/ref=pd_bbs_sr_2/103-6691701-3707058?ie=UTF8&amp;amp;s=books&amp;amp;qid=1184269154&amp;amp;sr=8-2"&gt;Beginning ASP.NET 2.0 AJAX&lt;/a&gt; and as you can imagine, is solely devoted to the topic of the Microsoft &lt;a href="http://ajax.asp.net/"&gt;ASP.NET 2.0 AJAX Extensions&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Well its out and you can go and &lt;a href="http://www.amazon.com/Beginning-ASP-NET-AJAX-Wallace-McClure/dp/0470112832/ref=pd_bbs_sr_2/103-6691701-3707058?ie=UTF8&amp;amp;s=books&amp;amp;qid=1184269154&amp;amp;sr=8-2"&gt;grab yourself a copy&lt;/a&gt;. You probably want at least 2, perhaps 3 or 4. If you can tear yourself away from looking at the stunningly handsome authors on the front cover, you will be graced by the excellent technical coverage of all things related to the &lt;a href="http://ajax.asp.net/"&gt;ASP.NET AJAX Extensions&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The Amazon link to the book is &lt;a href="http://www.amazon.com/Beginning-ASP-NET-AJAX-Wallace-McClure/dp/0470112832/ref=pd_bbs_sr_2/103-6691701-3707058?ie=UTF8&amp;amp;s=books&amp;amp;qid=1184269154&amp;amp;sr=8-2"&gt;here&lt;/a&gt; or you can find out more about the book from &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470112832.html"&gt;Wiley's site here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;An excerpt from Wiley's site about the book:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Written by a high-power team of Microsoft MVP's, this book provides a comprehensive introduction to the ASP.NET AJAX features  &lt;li&gt;After a quick overview of the architecture and features of ASP.NET 2.0 AJAX, coverage then goes on to show developers how to build richer, more responsive dynamic Web sites and Web applications  &lt;li&gt;Dives into such topics as ASP.NET 2.0 AJAX user interface design issues, JavaScript enhancements with AJAX, how to use the UpdatePanel for implementing server-side controls, and XML scripting in AJAX  &lt;li&gt;Also offers an outline of the ASP.NET 2.0 AJAXControl Toolkit, and discusses implementing drag and drop functions, databinding, debugging and security, ASP.NET services, and bridging and gadgets  &lt;li&gt;The companion Web site provides readers with a rich set of code examples &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I think fellow co-author &lt;a href="http://aspadvice.com/blogs/ssmith/archive/2007/07/12/Wait-for-ASP.NET-AJAX-Book-Finally-Over.aspx"&gt;Steve Smith&lt;/a&gt; did an excellent job of promoting the book&amp;nbsp;by his completely unbiased and absolutely 100%&amp;nbsp;true (would I lie to you?&amp;nbsp;) &lt;a href="http://aspadvice.com/blogs/ssmith/archive/2007/07/12/Wait-for-ASP.NET-AJAX-Book-Finally-Over.aspx"&gt;comparison to the release of the iPhone&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Seriously though, go grab it. I am quite proud of it and think it has a huge amount of great content.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3125902" 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/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/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Extender+Controls/default.aspx">Extender Controls</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/Windows/default.aspx">Windows</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/AJAX+Control+toolkit/default.aspx">AJAX Control toolkit</category></item><item><title>Web Client Software Factory and Enterprise Library. I want to Opt-in, not Opt-out.</title><link>http://weblogs.asp.net/pglavich/archive/2007/05/28/web-client-software-factory-and-enterprise-library-i-want-to-opt-in-not-opt-out.aspx</link><pubDate>Sun, 27 May 2007 13:34:36 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2665897</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=2665897</wfw:commentRss><comments>http://weblogs.asp.net/pglavich/archive/2007/05/28/web-client-software-factory-and-enterprise-library-i-want-to-opt-in-not-opt-out.aspx#comments</comments><description>&lt;p&gt;I am a fan of the &lt;a href="http://www.codeplex.com/websf"&gt;Web Client Software factory&lt;/a&gt;. Its a pretty good implementation of the &lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/08/DesignPatterns/"&gt;MVP&lt;/a&gt; pattern within ASP.NET. Pretty lean and clean and doesn't involve lots of effort to get the simple stuff done, unlike a lot of other MVC based implementations/frameworks.&lt;/p&gt; &lt;p&gt;One of the things I don't like about it is the automatic inclusion of the &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480453.aspx"&gt;Enterprise Library&lt;/a&gt; pieces. I know that &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480453.aspx"&gt;Entlib&lt;/a&gt; integration has been a requested feature of &lt;a href="http://www.codeplex.com/websf"&gt;WCSF&lt;/a&gt;, but not all of us want it integrated all the time, by default. Ideally I'd like the recipe to prompt whether that support/integration should be included.&lt;/p&gt; &lt;p&gt;Why?&lt;/p&gt; &lt;p&gt;Well Entlib comes with a lot of weight. Its feature heavy but also heavy in complexity and has a large dependency on its myriad of assemblies. Usually migrating from one version to another comes with a degree of pain and in my current crop of projects, not something I wish to entertain. Things like logging and exception management can be better managed by simpler, lightweight implementations specifically designed for my project/solution, in a simpler, leaner way. There is also nothing preventing me from re-adding it back into the solution if I need to.&lt;/p&gt; &lt;p&gt;Its kind of like taking the &lt;a href="http://wcf.netfx3.com/"&gt;WCF&lt;/a&gt; mantra where you need to "opt-in" for features rather than all the features are there/on by default and you need to remove/disable them (think DataContracts/DataMembers where you need to explicitly include a DataMember before its included as part of the serialization - Opt-in, not just mark a class as Serializable and everything is included - Opt-out).&lt;/p&gt; &lt;p&gt;There has been some discussion around the use and/or recommendation of &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480453.aspx"&gt;Entlib&lt;/a&gt; on projects, internally on the &lt;a href="http://www.readify.net/"&gt;readify&lt;/a&gt; tech lists. A number opposed to its use, others in favor, some on the middle ground in between. The point being, clearly its not for everyone.&lt;/p&gt; &lt;p&gt;I want to Opt-in.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2665897" 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/readify/default.aspx">readify</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/MVP/default.aspx">MVP</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/MVC/default.aspx">MVC</category><category domain="http://weblogs.asp.net/pglavich/archive/tags/Architecture/default.aspx">Architecture</category></item></channel></rss>