<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnet.org.za/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>Jean-Pierre under the Guru Meditation Tree</title><link>http://dotnet.org.za/jpfouche/default.aspx</link><description>Microsoft Development,  .NET.  VSTS, WF, VSTO, Sharepoint, SQL Server</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Silverlight, WCF and Out Parameters</title><link>http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx</link><pubDate>Wed, 16 Dec 2009 05:57:27 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:1252651</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Yesterday we stayed late trying to figure out why my service reference was not updating.&amp;#160; I added a method with an out parameter, generated a service reference, and could not&amp;#160; see the newly added out parameter in the generated code.&amp;#160; After about an hour of thinking that my code was reading from old binaries, and trying to hunt down a rogue old service, the light switched on inside, and we went home.&amp;#160; &lt;/p&gt;  &lt;p&gt;When using out parameters in a WCF service consumed by a Silverlight client, beware of the following usage:&lt;/p&gt;  &lt;p&gt;My Solution contains a standard WCF service with two clients – a Silverlight client and a .NET console aplication client.&amp;#160; Notice the two ways of consuming the same service – In the case of Silverlight, the out parameter is not part of the proxy (service reference).&amp;#160; In the case of the regular .NET client, the out parameter is called in the same way as we do with non-serviced applications in C# i.e. new up an instance in the calling app and pass it in.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;1.&amp;#160;&amp;#160; Notice the method signature on the service:    &lt;br /&gt;    &lt;br /&gt;public string GetData(out string value)    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;2.&amp;#160;&amp;#160; Notice that in the Silverlight proxy, you do not get the output parameter as part of the moethod signature i,e. you call it like this: &lt;/p&gt;  &lt;p&gt;client.GetDataAsync();&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;3.&amp;#160; Notice that in the regular .NET client, you call the method like this:&lt;/p&gt;  &lt;p&gt;client.GetData(out value);&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;4.&amp;#160;&amp;#160; Notice that in the Silverlight client, it has to be an asynchronous operation, whereas in the regular .NET client, it can be synchronous.   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Code extracts, below.&amp;#160; You can set this up in a few minutes, using the Visual Studio templates.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Service:     &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;using System;   &lt;br /&gt;using System.Collections.Generic;    &lt;br /&gt;using System.Linq;    &lt;br /&gt;using System.Runtime.Serialization;    &lt;br /&gt;using System.ServiceModel;    &lt;br /&gt;using System.Text; &lt;/p&gt;  &lt;p&gt;// NOTE: If you change the class name &amp;quot;Service&amp;quot; here, you must also update the reference to &amp;quot;Service&amp;quot; in Web.config and in the associated .svc file.   &lt;br /&gt;public class Service : IService    &lt;br /&gt;{    &lt;br /&gt;&lt;em&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; public string GetData(out string value)       &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; value = &amp;quot;Hello Out Parameters!&amp;quot;;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return string.Format(&amp;quot;The value is: {0}&amp;quot;, value);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public CompositeType GetDataUsingDataContract(CompositeType composite)   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (composite.BoolValue)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; composite.StringValue += &amp;quot;Suffix&amp;quot;;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return composite;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Silverlight Client (Stick this in MainPage.xaml.cs)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;public MainPage()   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WCFOutParametersProxy.ServiceClient client = new SilverlightClient.WCFOutParametersProxy.ServiceClient();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; client.GetDataCompleted += (source, args) =&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MessageBox.Show(args.value);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; client.GetDataAsync();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Normal .NET Client&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;using System;   &lt;br /&gt;using System.Collections.Generic;    &lt;br /&gt;using System.Linq;    &lt;br /&gt;using System.Text; &lt;/p&gt;  &lt;p&gt;namespace Client   &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; class Program    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; static void Main(string[] args)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WCFOutParametersProxy.ServiceClient client = new Client.WCFOutParametersProxy.ServiceClient();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string value = string.Empty;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; client.GetData(out value);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(value);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.ReadKey();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;}&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx&amp;amp;;subject=Silverlight%2c+WCF+and+Out+Parameters" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx&amp;amp;;title=Silverlight%2c+WCF+and+Out+Parameters" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx&amp;amp;title=Silverlight%2c+WCF+and+Out+Parameters" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx&amp;amp;;title=Silverlight%2c+WCF+and+Out+Parameters" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx&amp;amp;;title=Silverlight%2c+WCF+and+Out+Parameters&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/12/16/silverlight-wcf-and-out-parameters.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=1252651" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/jpfouche/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>How to Authenticate Silverlight against WCF</title><link>http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx</link><pubDate>Fri, 27 Nov 2009 05:16:57 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:1251419</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;strong&gt;Approach 1 (Does not work for me): Use the guidance on MSDN, entitled &amp;quot;How to: Use Username Authentication with Transport Security in WCF Calling from Windows Forms&amp;quot;&lt;/strong&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/cc949025.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc949025.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After a thorough examination of the above implementation&amp;#160; - I have been unable to get around the problem of the browser popping up a security credentials prompt.&amp;#160; It appears that the proxy operates by sending an initial request, &lt;strong&gt;&lt;em&gt;without the Authorization headers&lt;/em&gt;&lt;/strong&gt;, after which the server sends a 401 response with a header to indicate that the client needs to provide credentials.&amp;#160; At this point, the browser jumps in and pops up the unwanted dialog.&amp;#160; What I am looking for is for the browser not to do this - Silverlight should handle the response.&amp;#160; This approach works for a Windows client, but not for a Silverlight one - the Browser gets in the way.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Approach 2 (It works for me):&amp;#160; ASP.NET Application Services.&amp;#160; &lt;/strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb547119.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb547119.aspx&lt;/a&gt;    &lt;br /&gt;This one works!&amp;#160; I had a little issue with this, because the user was being persisted across sessions - i.e. if I closed the browser, I would be logged in automatically with the credentials used in the previous session (aargh!).&amp;#160; I think I have resolved this by loggin in with isPersisten= false.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;authClient.LoginAsync(&amp;quot;ASPAppServices&amp;quot;, &amp;quot;p@ssword&amp;quot;, &amp;quot;&amp;quot;, false);&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx&amp;amp;;subject=How+to+Authenticate+Silverlight+against+WCF" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx&amp;amp;;title=How+to+Authenticate+Silverlight+against+WCF" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx&amp;amp;title=How+to+Authenticate+Silverlight+against+WCF" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx&amp;amp;;title=How+to+Authenticate+Silverlight+against+WCF" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx&amp;amp;;title=How+to+Authenticate+Silverlight+against+WCF&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/11/27/how-to-authenticate-silverlight-against-wcf.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=1251419" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/jpfouche/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Silverlight Unit Testing - Searching for the Holy Grail (Again)</title><link>http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx</link><pubDate>Tue, 27 Oct 2009 06:01:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:1245136</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>1. From my research, I have identified a number of approaches you can take towards testing:&lt;br /&gt;&lt;br /&gt;

a. Test Domain Services - Mock out the repository, using the repository pattern. See Vijay&amp;#39;s blog, below. I could not get this to work - it would not update, using the LinqToSqlRepository class - the attach method would not update the database.&lt;br /&gt;
b. Test the UI without calling the Domain Services: Check out Nikhil&amp;#39;s blog. Search msdn forums for an update to this one - there seem to have been some issues in the code. I have not tried this yet.&lt;br /&gt;
c. Test the View-Model - mock out the Model using Rhino Mocks and the Unity framework Inversion of Control Container - see Justin Angel&amp;#39;s blog. This one worked well for me.&lt;br /&gt;
d. Test the UI Controls directly by using the MS Automation Framework - see &amp;quot;The Problem Solver&amp;quot; - a great start, but you will need to source in-depth documentation on how to get access to all the UI controls you need. I am working on this. &lt;br /&gt;
&lt;br /&gt;
All in all, I found the Unit Test Framework &amp;quot;promising&amp;quot;, but not DELIVERING. Being a newbie to automated testing, I am looking for something that goes all the way. I am really stumped when it comes to finding out how to use the Automation Framework, as this seems to be the heart of automating the UI for testing, irrespective of the Unit Testing framework (which seems to offer very little value). The blogs out there are somewhat helpful, but I have the sense that the authors are not currently implementing testing in the Enterprise environment. Sorely needed, is a book/website devoted to testing the UI, Domain Services and, in particular, Silverlight applications. I am particularly excited about Test Driven Development, but without an easy way in - a central reference to discover how to write tests simply, effectively and quickly - I cannot proceed along this path.
&lt;br /&gt;
2. Here are some links to Silverlight Testing:&lt;br /&gt;
&lt;br /&gt;
a. Unit Testing Home Page (Get all the Stuff for the MS Testing Framework Here) : http://code.msdn.microsoft.com/silverlightut/&lt;br /&gt;
&lt;br /&gt;
b. The Problem Solver: http://msmvps.com/blogs/theproblemsolver/archive/2008/12/02/unit-testing-in-silverlight-part-1.aspx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
c. ZenThought (Eric Litovsky): A very promising blog, with video how-to&amp;#39;s on Unit Testing / Integration Testing here... &lt;br /&gt;http://zenthought.com. Unfortunately, I think the video is a bit out of date - I could not follow all of the steps, and obtained assembly-reference problems! Sad, as this looked like an excellent starter. See the help below, on installing the Templates for Visual Studio.&lt;br /&gt;
&lt;br /&gt;
d. Help on Installing the Unit Testing Templates (Test Class/Test Project) for Visual Studio: &lt;br /&gt;
http://msmvps.com/blogs/theproblemso.../02/82367.aspx&lt;br /&gt;
http://geekswithblogs.net/ehammersle.../08/59451.aspx&lt;br /&gt;
&lt;br /&gt;
The best blog - it works! (how to do unit tests using Unity Framework, Rhino Mocks and A View-Model approach.) &lt;br /&gt;http://blogs.silverlight.net/blogs/j...e/2009/02.aspx
&lt;br /&gt;
A good overview of the options: http://russellmyers.com/?p=21&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
e. Nikhil Kothari&amp;#39;s blog: How to Mock Out the Server: http://www.nikhilk.net/NET-RIA-Servi...Pattern-2.aspx &lt;br /&gt;
&lt;br /&gt;
f. Vijay&amp;#39;s Blog: How to Mock out the Repository using Domain Service Testing with the Repository Pattern:&lt;br /&gt; http://blogs.msdn.com/vijayu/archive...-services.aspx&lt;br /&gt;
&lt;br /&gt;
g. How to automate your application testing (the easy way). Try it out - I am busy looking at this.: &lt;br /&gt;http://blogs.msdn.com/gisenberg/arch...commentmessage

&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx&amp;amp;;subject=Silverlight+Unit+Testing+-+Searching+for+the+Holy+Grail+(Again)" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx&amp;amp;;title=Silverlight+Unit+Testing+-+Searching+for+the+Holy+Grail+(Again)" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx&amp;amp;title=Silverlight+Unit+Testing+-+Searching+for+the+Holy+Grail+(Again)" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx&amp;amp;;title=Silverlight+Unit+Testing+-+Searching+for+the+Holy+Grail+(Again)" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx&amp;amp;;title=Silverlight+Unit+Testing+-+Searching+for+the+Holy+Grail+(Again)&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/10/27/silverlight-unit-testing-searching-for-the-holy-grail-again.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=1245136" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/jpfouche/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Working Effectively With Legacy Code (Summarised from Article by Michael Feathers)</title><link>http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx</link><pubDate>Sun, 13 Sep 2009 20:10:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:1189182</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I am reading an article entitled &amp;quot;&lt;a title="Working Effectively with Legacy Code" href="http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf"&gt;Working Effectively With Legacy Code&lt;/a&gt;&amp;quot; by Michael Feathers, which is very useful if you want to find out about implementing unit tests on existing code. The article is referenced in the Learn ASP.NET MVC tutorials     &lt;br /&gt;    &lt;br /&gt;I thought it would be useful to summarise some of the points he makes about legacy code, &amp;quot;for the lazy guys out there&amp;quot; who want a quick way into the stuff...&lt;/p&gt; &lt;font face="Times New Roman"&gt;   &lt;p align="left"&gt;&lt;strong&gt;In the article, he identifies a &amp;quot;legacy management strategy&amp;quot;: &lt;/strong&gt;&lt;/p&gt;    &lt;p align="left"&gt;&lt;strong&gt;1. Identify change points       &lt;br /&gt;2. Find an inflection point        &lt;br /&gt;3. Cover the inflection point        &lt;br /&gt;&amp;#160; a. Break external dependencies        &lt;br /&gt;&amp;#160; b. Break internal dependencies        &lt;br /&gt;&amp;#160; c. Write tests&lt;/strong&gt;&lt;/p&gt;    &lt;p align="left"&gt;&lt;strong&gt;4. Make changes       &lt;br /&gt;5. Refactor the covered code.&lt;/strong&gt;&lt;/p&gt;    &lt;p align="left"&gt;&lt;a href="http://dotnet.org.za/blogs/jpfouche/LegacyCode_6D051D07.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="LegacyCode" border="0" alt="LegacyCode" src="http://dotnet.org.za/blogs/jpfouche/LegacyCode_thumb_3676B01C.gif" width="543" height="314" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/font&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Legacy Code?     &lt;br /&gt;&lt;/strong&gt;This is code already developed, which is usually characterised by a lack, or absence of, unit tests. The problem we are dealing with is how to implement unit tests on     &lt;br /&gt;such systems.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Test Coverings     &lt;br /&gt;&lt;/strong&gt;A Test Covering is a series of tests which serve the purpose of validating that our system has not changed its behaviour. This is distinguished from a non-legacy system,     &lt;br /&gt;in which tests often serve three purposes:     &lt;br /&gt;- to seed the design    &lt;br /&gt;- to express the requirements    &lt;br /&gt;- to validate that the system has not changed its behaviour    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Legacy Management Strategy&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;1.&amp;#160; Identify Change Points;     &lt;br /&gt;&lt;/strong&gt;- When you have to amend functionality in legacy code, it is best to consider a method which effects the fewest possible changes to the existing code (not necessarily the &amp;#39;right&amp;#39; way, but simply the way which offers the fewest changes.) The more coverage tests you have, the more confidence you can have in making these changes, and therefore you will be more able to use the &amp;quot;right&amp;quot; method.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;2.&amp;#160; Find an Inflection Point:     &lt;br /&gt;&lt;/strong&gt;An inflection point is a place in your code, for example a superclass, on which a lot of other code in your system depends. You can use a test against this superclass as a benchmark to see whether code has changed in the system. For example, the project I am currently working on has a &amp;quot;SaveEntity&amp;quot; method, which all of the user interface screens call in order to put data into the back end database. We could use this as an &amp;quot;inflection point&amp;quot;, because almost the entire system depends upon this method.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;3.&amp;#160; &amp;quot;Cover&amp;quot; an inflection point:     &lt;br /&gt;&lt;/strong&gt;Here there are techniques to use in order to make you code more &amp;quot;test friendly&amp;quot;:    &lt;br /&gt;a. External Dependencies --&amp;gt; Use interfaces (code sample provided in the article) and &amp;quot;mocks&amp;quot; (he does not mention these) to replace calls to external methods.    &lt;br /&gt;b. Internal Dependencies --&amp;gt; He shows way to override expensive internal methods, by converting them into virtual methods, creating a subclass, and overriding the behavior. Effectively, this cancels out the behaviour when the test is called.     &lt;br /&gt;c. Write Tests:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - Look at the system boundaries to determine parameters for measuring whether the system has changed.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - Consider automating test generation.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.&amp;#160; Make Changes     &lt;br /&gt;&lt;/strong&gt;- More coverage --&amp;gt; Easier to make changes! (You have more confidence)    &lt;br /&gt;&lt;strong&gt;     &lt;br /&gt;5.&amp;#160; Refactoring your code      &lt;br /&gt;&lt;/strong&gt;- Once you have the coverage in place, it is easier to refactor code.    &lt;br /&gt;- Legacy code is often characterised by large functions and large methods:    &lt;br /&gt;- Use the &amp;quot;Extract Method&amp;quot; pattern to factor out large methods into smaller, more testable ones    &lt;br /&gt;- Use the for &amp;quot;Extract Class&amp;quot; pattern for the same reason as above.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusion     &lt;br /&gt;&lt;/strong&gt;- Sometimes, you cannot find an &amp;quot;easy&amp;quot; inflection point - in this case, you can gear down, and just write &amp;quot;smoke&amp;quot; tests against points in the system.    &lt;br /&gt;- It is often easier to find inflection points in poorly structured code, due to lack of re-use --&amp;gt; large classes and methods have a lot of dependencies.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx&amp;amp;;subject=Working+Effectively+With+Legacy+Code+(Summarised+from+Article+by+Michael+Feathers)" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx&amp;amp;;title=Working+Effectively+With+Legacy+Code+(Summarised+from+Article+by+Michael+Feathers)" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx&amp;amp;title=Working+Effectively+With+Legacy+Code+(Summarised+from+Article+by+Michael+Feathers)" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx&amp;amp;;title=Working+Effectively+With+Legacy+Code+(Summarised+from+Article+by+Michael+Feathers)" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx&amp;amp;;title=Working+Effectively+With+Legacy+Code+(Summarised+from+Article+by+Michael+Feathers)&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2009/09/13/working-effectively-with-legacy-code.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=1189182" width="1" height="1"&gt;</description></item><item><title>Downloading/Streaming Documents whilst Setting Control Values using an ASP.NET 'Download' button</title><link>http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx</link><pubDate>Tue, 19 Aug 2008 15:42:57 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:533694</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Ok, have you ever tried downloading a document using a server-side Click event on a button?&amp;#160; You probably did something like sending the content in the response as a stream, like this?:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;private void DownloadDocument(int documentId)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string filePath = Server.MapPath(String.Concat(&amp;quot;Document_&amp;quot;, documentId, &amp;quot;.pdf&amp;quot;));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.IO.FileInfo file = new System.IO.FileInfo(filePath);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(file.Exists)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Clear();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;attachment; filename=&amp;quot; + file.Name);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.AddHeader(&amp;quot;Content-Length&amp;quot;, file.Length.ToString());       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.ContentType = &amp;quot;application/octet-stream&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.WriteFile(file.FullName);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.End();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Write(&amp;quot;This file does not exist.&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.DocumentFiledCheckBox.Enabled = false;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), &amp;quot;AsyncCallbacks&amp;quot;, &amp;quot;&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now what if you wanted to set the values of certain controls on the form, in addition to sending the&amp;#160; pdf stream? (e.g. you wanted to enable a check box, so the user can indicate whether she has filed the document, but this check box should only be available if she has downloaded it)&lt;/p&gt;  &lt;p&gt;Maybe you had something like this:&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&amp;#160;&amp;#160; &lt;strong&gt;protected void DownloadButton_Click(object sender, EventArgs e)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Enable the check box, as per requirement       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.DocumentFiledCheckBox.Enabled = true;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DownloadDocument(101);&lt;/strong&gt;&lt;strong&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Problem is that you won&amp;#39;t be able to set the control values in this way, probably because you are streaming an entirely different response.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Scratch your head for a day and a half on this, and then try the following solution:    &lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;MY SOLUTION&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;In the aspx file&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeFile=&amp;quot;Default.aspx.cs&amp;quot; Inherits=&amp;quot;Default&amp;quot; ValidateRequest=&amp;quot;false&amp;quot;&amp;#160; EnableEventValidation=&amp;quot;false&amp;quot; %&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;&lt;a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/a&gt;&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;lt;html xmlns=&amp;quot;&lt;a href="http://www.w3.org/1999/xhtml"&gt;http://www.w3.org/1999/xhtml&amp;quot;&lt;/a&gt; &amp;gt;     &lt;br /&gt;&amp;lt;head id=&amp;quot;Head1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title&amp;gt;Download a Document&amp;lt;/title&amp;gt;     &lt;br /&gt;&amp;lt;/head&amp;gt;     &lt;br /&gt;&amp;lt;body&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:TextBox ID=&amp;quot;DocumentIdTextBox&amp;quot; Text = &amp;quot;101&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:Button ID=&amp;quot;DownloadButton&amp;quot; runat=&amp;quot;server&amp;quot; OnClick=&amp;quot;DownloadButton_Click&amp;quot; Text=&amp;quot;Download Document&amp;quot; /&amp;gt;&amp;amp;nbsp;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;br /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;br /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:CheckBox ID=&amp;quot;DocumentFiledCheckBox&amp;quot; Text=&amp;quot;Document Filed&amp;quot; Enabled=&amp;quot;false&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:Button ID=&amp;quot;CallbackButton&amp;quot; runat=&amp;quot;server&amp;quot; OnClick=&amp;quot;CallbackButton_Click&amp;quot; Text=&amp;quot;DownloadDocumentCallbackPlaceholderButton&amp;quot; UseSubmitBehavior=&amp;quot;False&amp;quot; Visible=&amp;quot;True&amp;quot; /&amp;gt;&amp;lt;/div&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/form&amp;gt;     &lt;br /&gt;&amp;lt;/body&amp;gt;     &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We have a simple form containing:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;- a &lt;strong&gt;DocumentIdTextBox&lt;/strong&gt; Text Box control for the document ID you want to download.&lt;/p&gt;    &lt;p&gt;-a hidden &lt;strong&gt;CallbackButton&lt;/strong&gt; Text Box controls which you are going to use to do an automated post back when the response has been downloaded from the server.&lt;/p&gt;    &lt;p&gt;- a &lt;strong&gt;DocumentFiledCheckBox&lt;/strong&gt; which will be enabled when you click the download button, otherwise its initial state is disabled.&lt;/p&gt;    &lt;p&gt;- Notice that the &lt;strong&gt;UseSubmitBehavior&lt;/strong&gt; property for each of the buttons above is set to false.&amp;#160; This will enable ASP.NET to render the __doPostBack functions.&amp;#160; If you do not set this property, you may not get a __doPostBack function in your browser.&amp;#160; This is presumably because a submit button will post to the server as part of the behaviour provided by HTML.&amp;#160; See point 5 of the .cs file notes below, for more on this...&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;In the .cs file:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Handle the initial click event:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //1. Download button is clicked    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected void DownloadButton_Click(object sender, EventArgs e)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Enable the check box, as per requirement     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.DocumentFiledCheckBox.Enabled = true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Cause the browser to download the document     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;SetUpClientSideScriptToDownloadDocument(int.Parse(this.DocumentIdTextBox.Text));      &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;Notice that the key bit here is to send a client-side callback which fires as soon as the response is received&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.&amp;#160; Fire a client-side callback:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Notice that we need to set a timeout, and attach to the onload event of the window.&amp;#160; Otherwise, you may find that your code breaks every so often, in search of your mystery client-side control, which has not loaded yet.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You are welcome to try raising the click event of our hidden control by using __doPostBack... This didn&amp;#39;t work for me.&amp;#160; I could not get the server to fire the Click event.&amp;#160; Instead, it just went wizzing by my Click event handler.&amp;#160;&amp;#160; It did do a postback, though.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;// 2.&amp;#160;&amp;#160; Browser receives this code --&amp;gt; we use __doPostBack as an alternative to window.open()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //to avoid Popup blockers, used by most browsers these days.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private void SetUpClientSideScriptToDownloadDocument(int documentId)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Defer tag should make this fire only after the full response has been received      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //This didn&amp;#39;t work for me       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string javaScript = @&amp;quot;&amp;lt;script language=&amp;#39;JavaScript&amp;#39; defer=&amp;#39;defer&amp;#39;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; __doPostBack(&amp;#39;CallbackButton&amp;#39;,&amp;#39;onclick&amp;#39;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/script&amp;gt;&amp;quot;; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Set a timeout so that this fires timeously i.e. AFTER entire response has been received      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string javaScript = @&amp;quot;&amp;lt;script language=&amp;#39;javascript&amp;#39; type=&amp;#39;text/javascript&amp;#39;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; window.attachEvent(&amp;#39;onload&amp;#39;,function(){setTimeout(&amp;#39;DownloadKeyFactsDocument()&amp;#39;,50);}); &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; function DownloadKeyFactsDocument()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //__doPostBack(&amp;#39;CallbackButton&amp;#39;,&amp;#39;onclick&amp;#39;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; document.getElementById(&amp;#39;&amp;quot; + this.CallbackButton.ClientID + @&amp;quot;&amp;#39;).click();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/script&amp;gt;&amp;quot;; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!Page.ClientScript.IsClientScriptBlockRegistered(&amp;quot;AsyncCallbacks&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), &amp;quot;AsyncCallbacks&amp;quot;, javaScript); &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.&amp;#160;&amp;#160; Handle the Callback on the server:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Our server-side function handles the click event of our invisible button.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; //3.&amp;#160; Browser calls this function(browser calls __doPostBack(&amp;#39;CallbackButton&amp;#39;, &amp;#39;onclick&amp;#39;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected void CallbackButton_Click(object sender, EventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.DownloadDocument(int.Parse(this.DocumentIdTextBox.Text));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.&amp;#160; Download the document&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The rest is history...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; //4.&amp;#160;&amp;#160;&amp;#160; Stream the document to the browser from the server      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private void DownloadDocument(int documentId)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string filePath = Server.MapPath(String.Concat(&amp;quot;Document_&amp;quot;, documentId, &amp;quot;.pdf&amp;quot;));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.IO.FileInfo file = new System.IO.FileInfo(filePath);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(file.Exists)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Clear();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;attachment; filename=&amp;quot; + file.Name);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.AddHeader(&amp;quot;Content-Length&amp;quot;, file.Length.ToString());       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.ContentType = &amp;quot;application/octet-stream&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.WriteFile(file.FullName);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.End();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Write(&amp;quot;This file does not exist.&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.DocumentFiledCheckBox.Enabled = false;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), &amp;quot;AsyncCallbacks&amp;quot;, &amp;quot;&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;}&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5. Make sure you get a __doPostBack function as part of the response&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The following code in Page_Load ensures that the browser gets a __doPostBack function:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;protected void Page_Load(object sender, EventArgs e)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Must always render __doPostBack       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // (even when callback button is invisible, and/or when &amp;#39;UseSubmitBehavior&amp;#39; is true)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Notice that these two conditions (invisible and UseSubmitBehavior=true) will cause&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;&lt;strong&gt;//ASP.Net not to render the __doPostBack function      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Page.ClientScript.GetPostBackClientHyperlink(this, &amp;quot;&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.CallbackButton.Attributes.Add(&amp;quot;style&amp;quot;, &amp;quot;display:none&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;6.&amp;#160; Make sure you hide your control correctly&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Just in case you don&amp;#39;t want to see the dummy control, you will also use this code in Page Load:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;this.CallbackButton.Attributes.Add(&amp;quot;style&amp;quot;, &amp;quot;display:none&amp;quot;);&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Why don&amp;#39;t we just use server side code, and set the Visible property of the button to false?&amp;#160; The answer is that if you do this, ASP&amp;gt;NET won&amp;#39;t render the control.&amp;#160; So trying this will make our infrastructure will fall over!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Here is a complete code listing for you:&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeFile=&amp;quot;Default.aspx.cs&amp;quot; Inherits=&amp;quot;Default&amp;quot; ValidateRequest=&amp;quot;false&amp;quot;&amp;#160; EnableEventValidation=&amp;quot;false&amp;quot; %&amp;gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;&lt;/strong&gt;&lt;a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;strong&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;lt;html xmlns=&amp;quot;&lt;/strong&gt;&lt;a href="http://www.w3.org/1999/xhtml"&gt;&lt;strong&gt;http://www.w3.org/1999/xhtml&amp;quot;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &amp;gt;      &lt;br /&gt;&amp;lt;head id=&amp;quot;Head1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title&amp;gt;Download a Document&amp;lt;/title&amp;gt;       &lt;br /&gt;&amp;lt;/head&amp;gt;       &lt;br /&gt;&amp;lt;body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:TextBox ID=&amp;quot;DocumentIdTextBox&amp;quot; Text = &amp;quot;101&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:Button ID=&amp;quot;DownloadButton&amp;quot; runat=&amp;quot;server&amp;quot; OnClick=&amp;quot;DownloadButton_Click&amp;quot; Text=&amp;quot;Download Document&amp;quot; /&amp;gt;&amp;amp;nbsp;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;br /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;br /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:CheckBox ID=&amp;quot;DocumentFiledCheckBox&amp;quot; Text=&amp;quot;Document Filed&amp;quot; Enabled=&amp;quot;false&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:Button ID=&amp;quot;CallbackButton&amp;quot; runat=&amp;quot;server&amp;quot; OnClick=&amp;quot;CallbackButton_Click&amp;quot; Text=&amp;quot;DownloadDocumentCallbackPlaceholderButton&amp;quot; UseSubmitBehavior=&amp;quot;False&amp;quot; Visible=&amp;quot;True&amp;quot; /&amp;gt;&amp;lt;/div&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/form&amp;gt;       &lt;br /&gt;&amp;lt;/body&amp;gt;       &lt;br /&gt;&amp;lt;/html&amp;gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;using System;      &lt;br /&gt;using System.Data;       &lt;br /&gt;using System.Configuration;       &lt;br /&gt;using System.Collections;       &lt;br /&gt;using System.Web;       &lt;br /&gt;using System.Web.Security;       &lt;br /&gt;using System.Web.UI;       &lt;br /&gt;using System.Web.UI.WebControls;       &lt;br /&gt;using System.Web.UI.WebControls.WebParts;       &lt;br /&gt;using System.Web.UI.HtmlControls; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;public partial class Default : System.Web.UI.Page      &lt;br /&gt;{ &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; protected void Page_Load(object sender, EventArgs e)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Must always render __doPostBack       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // (even when callback button is invisible, and/or when &amp;#39;UseSubmitBehavior&amp;#39; is true)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Notice that these two conditions (invisible and UseSubmitBehavior=true) will cause&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;&lt;strong&gt;//ASP.Net not to render the __doPostBack function      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Page.ClientScript.GetPostBackClientHyperlink(this, &amp;quot;&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.CallbackButton.Attributes.Add(&amp;quot;style&amp;quot;, &amp;quot;display:none&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; //1. Download button is clicked      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected void DownloadButton_Click(object sender, EventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Enable the check box, as per requirement       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.DocumentFiledCheckBox.Enabled = true;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Cause the browser to download the document       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SetUpClientSideScriptToDownloadDocument(int.Parse(this.DocumentIdTextBox.Text));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; //2.&amp;#160; Browser receives this code --&amp;gt; we use __doPostBack as an alternative to window.open()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //to avoid Popup blockers, used by most browsers these days.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private void SetUpClientSideScriptToDownloadDocument(int documentId)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Defer tag should make this fire only after the full response has been received      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //This didn&amp;#39;t work for me       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string javaScript = @&amp;quot;&amp;lt;script language=&amp;#39;JavaScript&amp;#39; defer=&amp;#39;defer&amp;#39;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; __doPostBack(&amp;#39;CallbackButton&amp;#39;,&amp;#39;onclick&amp;#39;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/script&amp;gt;&amp;quot;; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Set a timeout so that this fires timeously i.e. AFTER entire response has been received      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string javaScript = @&amp;quot;&amp;lt;script language=&amp;#39;javascript&amp;#39; type=&amp;#39;text/javascript&amp;#39;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; window.attachEvent(&amp;#39;onload&amp;#39;,function(){setTimeout(&amp;#39;DownloadKeyFactsDocument()&amp;#39;,50);}); &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; function DownloadKeyFactsDocument()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //__doPostBack(&amp;#39;CallbackButton&amp;#39;,&amp;#39;onclick&amp;#39;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; document.getElementById(&amp;#39;&amp;quot; + this.CallbackButton.ClientID + @&amp;quot;&amp;#39;).click();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/script&amp;gt;&amp;quot;; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!Page.ClientScript.IsClientScriptBlockRegistered(&amp;quot;AsyncCallbacks&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), &amp;quot;AsyncCallbacks&amp;quot;, javaScript); &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; //3.&amp;#160; Browser calls this function(browser calls __doPostBack(&amp;#39;CallbackButton&amp;#39;, &amp;#39;onclick&amp;#39;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected void CallbackButton_Click(object sender, EventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.DownloadDocument(int.Parse(this.DocumentIdTextBox.Text));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; //4.&amp;#160;&amp;#160;&amp;#160; Stream the document to the browser from the server      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private void DownloadDocument(int documentId)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string filePath = Server.MapPath(String.Concat(&amp;quot;Document_&amp;quot;, documentId, &amp;quot;.pdf&amp;quot;));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.IO.FileInfo file = new System.IO.FileInfo(filePath);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(file.Exists)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Clear();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;attachment; filename=&amp;quot; + file.Name);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.AddHeader(&amp;quot;Content-Length&amp;quot;, file.Length.ToString());       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.ContentType = &amp;quot;application/octet-stream&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.WriteFile(file.FullName);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.End();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Write(&amp;quot;This file does not exist.&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.DocumentFiledCheckBox.Enabled = false;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), &amp;quot;AsyncCallbacks&amp;quot;, &amp;quot;&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;}&lt;/strong&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx&amp;amp;;subject=Downloading%2fStreaming+Documents+whilst+Setting+Control+Values+using+an+ASP.NET+%27Download%27+button" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx&amp;amp;;title=Downloading%2fStreaming+Documents+whilst+Setting+Control+Values+using+an+ASP.NET+%27Download%27+button" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx&amp;amp;title=Downloading%2fStreaming+Documents+whilst+Setting+Control+Values+using+an+ASP.NET+%27Download%27+button" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx&amp;amp;;title=Downloading%2fStreaming+Documents+whilst+Setting+Control+Values+using+an+ASP.NET+%27Download%27+button" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx&amp;amp;;title=Downloading%2fStreaming+Documents+whilst+Setting+Control+Values+using+an+ASP.NET+%27Download%27+button&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/19/downloading-streaming-documents-whilst-setting-control-values-using-an-asp-net-download-button.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=533694" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/jpfouche/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>VSTS Source Control Problem - No "Add to Source Control" menu item</title><link>http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx</link><pubDate>Fri, 08 Aug 2008 10:34:10 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:516363</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Problem Description:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&amp;#8220;Add to source control&amp;#8221; item is missing in Solution Explorer, for a particular project.&lt;/p&gt;  &lt;p&gt;We did the following:&lt;/p&gt;  &lt;p&gt;1. Ensure that workspace folders are the same structure as on the server.&amp;#160; The folder on the workspace did not exist on the server.&amp;#160; &lt;/p&gt;  &lt;p&gt;2. Add the folder on the server using source control explorer (Team Explorer).&amp;#160; &lt;/p&gt;  &lt;p&gt;3. Adjust local workspace to reflect server structure.&amp;#160; We needed to remove the project from the solution in order to do this.&lt;/p&gt;  &lt;p&gt;4. File|Source Control | Change Source Control --&amp;gt;&amp;#160; the binding for our naughty project&amp;#160; was marked &amp;#8220;invalid&amp;#8221; --&amp;gt; unbind and then rebind this project&amp;#160; --&amp;gt; project now &amp;#8220;Valid&amp;#8221;&lt;/p&gt;  &lt;p&gt;5. Add solution to source control (you now see the menu item in solution explorer&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx&amp;amp;;subject=VSTS+Source+Control+Problem+-+No+%26quot%3bAdd+to+Source+Control%26quot%3b+menu+item" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx&amp;amp;;title=VSTS+Source+Control+Problem+-+No+%26quot%3bAdd+to+Source+Control%26quot%3b+menu+item" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx&amp;amp;title=VSTS+Source+Control+Problem+-+No+%26quot%3bAdd+to+Source+Control%26quot%3b+menu+item" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx&amp;amp;;title=VSTS+Source+Control+Problem+-+No+%26quot%3bAdd+to+Source+Control%26quot%3b+menu+item" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx&amp;amp;;title=VSTS+Source+Control+Problem+-+No+%26quot%3bAdd+to+Source+Control%26quot%3b+menu+item&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/08/08/vsts-source-control-problem-no-quot-add-to-source-control-quot-menu-item.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=516363" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/jpfouche/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>Developer Express v 7.2 issue - Properties missing in property editor on VGrid Control</title><link>http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx</link><pubDate>Tue, 22 Jul 2008 08:31:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:487775</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoPlainText" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Consolas" size="3"&gt;If you are having problems with the VGrid control in DevExpress i.e. your properties do not display on the Row Editor, try removing the registry key below.&amp;nbsp; I am using Visual Studio 2005 on VIsta, Business edition.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoPlainText" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Consolas" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoPlainText" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Consolas" size="3"&gt;Here is the response from Developer Express support:&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoPlainText" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Consolas" size="3"&gt;&amp;quot;We fixed a similar bug in one of recent updates. Please upgrade your components to the most recent version.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoPlainText" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Consolas" size="3"&gt;Currently, to fix the problem on your machine, please delete the following key from the system registry:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoPlainText" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Consolas" size="3"&gt;HKEY_CURRENT_USER\Software\Developer Express\Designer\XtraVertGrid&amp;quot;&lt;/font&gt;&lt;/p&gt;&lt;font face="Consolas" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoPlainText" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Consolas" size="3"&gt;You can check the state of your issue at: &lt;/font&gt;&lt;a href="https://www.devexpress.com/issue=B32034"&gt;&lt;font face="Consolas" color="#800080" size="3"&gt;https://www.devexpress.com/issue=B32034&lt;/font&gt;&lt;/a&gt;&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx&amp;amp;;subject=Developer+Express+v+7.2+issue+-+Properties+missing+in+property+editor+on+VGrid+Control" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx&amp;amp;;title=Developer+Express+v+7.2+issue+-+Properties+missing+in+property+editor+on+VGrid+Control" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx&amp;amp;title=Developer+Express+v+7.2+issue+-+Properties+missing+in+property+editor+on+VGrid+Control" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx&amp;amp;;title=Developer+Express+v+7.2+issue+-+Properties+missing+in+property+editor+on+VGrid+Control" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx&amp;amp;;title=Developer+Express+v+7.2+issue+-+Properties+missing+in+property+editor+on+VGrid+Control&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/07/22/developer-express-v-7-2-issue-properties-missing-in-property-editor-on-vgrid-control.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=487775" width="1" height="1"&gt;</description></item><item><title>WPAD.dat and Visual Sudio 2008 Web Tests - problem</title><link>http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx</link><pubDate>Tue, 03 Jun 2008 07:23:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:445241</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Calibri" size="3"&gt;We are using Visual Studio 2008 Team Edition for Software Testers to run web tests against our test website.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Calibri" size="3"&gt;We find that our tests are failing on a particular request for a wpad.dat file.&amp;nbsp; No http error is reported.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Calibri" size="3"&gt;After some searching on the internet, we discovered just what a wpad.dat file is:&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;WPAD (Web Proxy Autodiscovery Protocol)&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l1 level1 lfo1;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Check &amp;nbsp;out a full description of what it is on &lt;/font&gt;&lt;a href="http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol"&gt;&lt;font face="Calibri" color="#800080" size="3"&gt;http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l1 level1 lfo1;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;This is simply a method used by browsers to auto-discover the location of a proxy auto-config (.pac) file.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l1 level1 lfo1;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;You can set this up in your network through one of two methods:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 1in;TEXT-INDENT:-0.25in;mso-list:l1 level2 lfo1;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;o&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;DHCP&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 1in;TEXT-INDENT:-0.25in;mso-list:l1 level2 lfo1;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;o&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;DNS&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l1 level1 lfo1;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;If your network is not configured for WPAD, you may have problems if your browsers are configured to “autodetect”.&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Solution to our problem&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l2 level1 lfo2;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Internet Explorer:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 1in;TEXT-INDENT:-0.25in;mso-list:l2 level2 lfo2;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;o&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;/ Internet Options / Connections / LAN Settings &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 1in;TEXT-INDENT:-0.25in;mso-list:l2 level2 lfo2;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;o&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Turn OFF the option to automatically detect proxy settings.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l2 level1 lfo2;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Contact network admin to see whether wpad is correctly configured.&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Calibri" size="3"&gt;The problem occurs for us ONLY when using the web test interface.&amp;nbsp; Through the browser, everything is OK.&amp;nbsp; We have decided to configure IE and consider the test to have passed.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Requirements to get WPAD to work properly (from WIKIPEDIA)&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Calibri" size="3"&gt;In order for WPAD to work, a few requirements have to be met:&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo3;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;If you want to use DHCP, then the DHCP must be configured to serve up the &amp;quot;site-local&amp;quot; option 252 (&amp;quot;auto-proxy-config&amp;quot;) with a string value of &amp;quot;&lt;/font&gt;&lt;a href="http://xxx.yyy.zzz.qqq/wpad.dat"&gt;&lt;font face="Calibri" color="#0000ff" size="3"&gt;http://xxx.yyy.zzz.qqq/wpad.dat&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri" size="3"&gt;&amp;quot; (without the quotes) where xxx.yyy.zzz.qqq is the address of a web server (either IP or DNS). &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo3;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;If you want to use DNS, then a DNS entry is needed for a host named WPAD. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo3;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;The host WPAD must be able to serve a web page. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo3;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;In both cases, the web server must be configured to set up dat files with a MIME type of &amp;quot;application/x-ns-proxy-autoconfig&amp;quot;. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo3;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;The file named wpad.dat must be located in the WPAD web site&amp;#39;s root directory. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo3;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Examples for PAC files are shown in Proxy auto-config. &lt;/font&gt;&lt;/p&gt;&lt;span style="BACKGROUND:yellow;FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-highlight:yellow;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="BACKGROUND:yellow;mso-highlight:yellow;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Use caution when configuring a WPAD server in a virtual hosting environment. When automatic proxy detection is used, Internet Explorer sends a &amp;quot;Host: &amp;lt;IP address&amp;gt;&amp;quot; header and Firefox sends a &amp;quot;Host: wpad&amp;quot; header. This is unexpected behavior, therefore, it is recommended that the wpad.dat file be hosted under the default Virtual Host rather than its own.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Calibri" size="3"&gt;Note the last point, which indicates potential problems when using virtual hosting.&amp;nbsp; What is “virtual hosting”?&amp;nbsp; It is the procedure of serving up the same website from multiple host header names or IP addresses – this has been employed in our project.&amp;nbsp; This indicates a potential source for our problem, which you might want to investigate if you experience the same problem.&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Calibri" size="3"&gt;Happy web testing!&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Calibri" size="3"&gt;Kind Regards&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri"&gt;&lt;font size="3"&gt;Jean-Pierre Fouche&lt;/font&gt;&lt;i&gt;&lt;span style="FONT-SIZE:8pt;COLOR:#1f497d;"&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="FONT-SIZE:8pt;COLOR:#1f497d;mso-ansi-language:EN-ZA;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/font&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx&amp;amp;;subject=WPAD.dat+and+Visual+Sudio+2008+Web+Tests+-+problem" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx&amp;amp;;title=WPAD.dat+and+Visual+Sudio+2008+Web+Tests+-+problem" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx&amp;amp;title=WPAD.dat+and+Visual+Sudio+2008+Web+Tests+-+problem" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx&amp;amp;;title=WPAD.dat+and+Visual+Sudio+2008+Web+Tests+-+problem" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx&amp;amp;;title=WPAD.dat+and+Visual+Sudio+2008+Web+Tests+-+problem&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/06/03/wpad-dat-and-visual-sudio-2008-web-tests-problem.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=445241" width="1" height="1"&gt;</description></item><item><title>Migrating Sharepoint 2007 List to Calendar</title><link>http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx</link><pubDate>Tue, 25 Mar 2008 14:47:35 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:394711</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Whew... That was a long and arduous process.&lt;/p&gt;  &lt;p&gt;If you have tried migrating lists in Sharepoint 2007, you have probably tried exporting the source list to Excel and then Exporting the Excel worksheet to the new list in Sharepoint.&amp;#160; The problem with this approach is that it doesn&amp;#39;t work for Calendars.&amp;#160; When you export a list from Excel, it creates a new List, which is not a Calendar type.&amp;#160; THis means that you cannot &amp;quot;Connect to Outlook&amp;quot;, resulting in a poor user experience.&lt;/p&gt;  &lt;p&gt;I tried numerous ways of migrating the content, but here&amp;#39;s my solution (using Access 2007 with linked tables).&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1.Open a new access database from the source list, and link a new table to the destination (My Source list was Readiness Sessions; my target was Readiness Sessions Calendar).&lt;/p&gt;    &lt;p&gt;2.In a Module, execute the following (rather horrible) algorithm:&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#39;This code is posted &amp;#39;as-is&amp;#39; and requires alteration...&lt;/p&gt;  &lt;p&gt;Function DoIt() &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Dim strValue    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim conn As New ADODB.Connection     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim rs As New ADODB.Recordset     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim strSql As String     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim fld As ADODB.Field     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim strFieldList As String     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim strValueList As String     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim n As Integer     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Set conn = CodeProject.Connection     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; conn.Execute &amp;quot;DELETE FROM [Readiness Sessions Calendar]&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sql = &amp;quot;select * from [readiness sessions]&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Set rs = conn.Execute(sql)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; strFieldList = &amp;quot;&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; strValueList = &amp;quot;&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; strSql = &amp;quot;&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; While Not rs.EOF     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; n = n + 1     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; For m = 1 To 17     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; If m &amp;lt; 13 Or m &amp;gt; 15 Then     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Set fld = rs.Fields(m)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; If Not IsNull(fld.Value) Then     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strValue = Replace(fld.Value, &amp;quot;&amp;#39;&amp;quot;, &amp;quot;&amp;#39;&amp;#39;&amp;quot;)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strValue = fld.Value     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End If     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; If strValue &amp;lt;&amp;gt; &amp;quot;&amp;#39;&amp;#39;&amp;quot; Then     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; If m = 1 Then &amp;#39;Event Name     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strSql = &amp;quot;INSERT INTO [Readiness Sessions Calendar] &amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strSql = strSql &amp;amp; &amp;quot;([&amp;quot; &amp;amp; fld.Name &amp;amp; &amp;quot;]) &amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strSql = strSql &amp;amp; &amp;quot;VALUES (&amp;#39;&amp;quot; &amp;amp; strValue &amp;amp; &amp;quot;&amp;#39;)&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Debug.Print strSql     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; conn.Execute strSql     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; If m &amp;lt;&amp;gt; 8 Then     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strSql = &amp;quot;UPDATE [Readiness Sessions Calendar] SET [&amp;quot; &amp;amp; fld.Name &amp;amp; &amp;quot;] = &amp;#39;&amp;quot; &amp;amp; Replace(rs.Fields(m).Value, &amp;quot;&amp;#39;&amp;quot;, &amp;quot;&amp;quot;) &amp;amp; &amp;quot;&amp;#39; WHERE [Event Name] = &amp;#39;&amp;quot; &amp;amp; Replace(rs(&amp;quot;Event Name&amp;quot;), &amp;quot;&amp;#39;&amp;quot;, &amp;quot;&amp;quot;) &amp;amp; &amp;quot;&amp;#39;&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; conn.Execute (strSql)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Debug.Print strSql     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End If     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End If     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End If     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End If     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Next     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rs.MoveNext     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Wend&lt;/p&gt;  &lt;p&gt;Exit Function&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx&amp;amp;;subject=Migrating+Sharepoint+2007+List+to+Calendar" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx&amp;amp;;title=Migrating+Sharepoint+2007+List+to+Calendar" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx&amp;amp;title=Migrating+Sharepoint+2007+List+to+Calendar" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx&amp;amp;;title=Migrating+Sharepoint+2007+List+to+Calendar" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx&amp;amp;;title=Migrating+Sharepoint+2007+List+to+Calendar&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/03/25/migrating-sharepoint-2007-list-to-calendar.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=394711" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/jpfouche/archive/tags/Sharepoint/default.aspx">Sharepoint</category></item><item><title>Tech Titbits</title><link>http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx</link><pubDate>Tue, 12 Feb 2008 17:56:42 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:284586</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Google Code Search     &lt;br /&gt;&lt;/strong&gt;Looking for a particular snippet of code?&amp;#160; Use &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.google.com/codesearch"&gt;http://www.google.com/codesearch&lt;/a&gt; (simple search) or    &lt;br /&gt;&lt;a title="http://www.google.com/codesearch/advanced_code_search?hl=en" href="http://www.google.com/codesearch/advanced_code_search?hl=en"&gt;http://www.google.com/codesearch/advanced_code_search?hl=en&lt;/a&gt; (advanced search)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotnet.org.za/blogs/jpfouche/WindowsLiveWriter/TechTitbits_111BC/image_6.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="189" alt="image" src="http://dotnet.org.za/blogs/jpfouche/WindowsLiveWriter/TechTitbits_111BC/image_thumb_2.png" width="551" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SQL Server&lt;/strong&gt; &lt;strong&gt;2005 Service Manager      &lt;br /&gt;&lt;/strong&gt;If you are looking for a &amp;quot;retro&amp;quot; look on your desktop, how about this nice tool from SQLDBATips.com - a Service Manager for SQL 2005, similar to the one used in Enterprise Manager for SQL 2000.&amp;#160; On my Vista OS, it comes with a curiosity - the message &amp;quot;Service Stoppe&amp;quot; at the bottom of the screen!&amp;#160; Use this aplication to manage all the SQL Server instances on your machine.&amp;#160;&amp;#160; Mine works only with local instances.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotnet.org.za/blogs/jpfouche/WindowsLiveWriter/TechTitbits_111BC/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="205" alt="image" src="http://dotnet.org.za/blogs/jpfouche/WindowsLiveWriter/TechTitbits_111BC/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.sqldbatips.com/showarticle.asp?ID=46" href="http://www.sqldbatips.com/showarticle.asp?ID=46"&gt;http://www.sqldbatips.com/showarticle.asp?ID=46&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;.iso Reader for Vista      &lt;br /&gt;&lt;/strong&gt;If you are looking for an .iso reader for &lt;strong&gt;&lt;em&gt;64-bit&lt;/em&gt;&lt;/strong&gt; Vista, use &lt;a href="http://www.magiciso.com/download.htm" target="_blank"&gt;MagicISO&lt;/a&gt;. The screenshot below shows you what it can do:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotnet.org.za/blogs/jpfouche/WindowsLiveWriter/TechTitbits_111BC/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="244" alt="image" src="http://dotnet.org.za/blogs/jpfouche/WindowsLiveWriter/TechTitbits_111BC/image_thumb.png" width="154" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Access &lt;em&gt;Manage Network Connections&lt;/em&gt; in Vista       &lt;br /&gt;&lt;/strong&gt;- Add a desktop/quick launch shortcut to C:\Windows\System32\ncpa.cpl     &lt;br /&gt;- Type &lt;strong&gt;ncpa.cpl&lt;/strong&gt; plus enter from the start menu.&amp;#160; Whew! :(     &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx&amp;amp;;subject=Tech+Titbits" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx&amp;amp;;title=Tech+Titbits" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx&amp;amp;title=Tech+Titbits" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx&amp;amp;;title=Tech+Titbits" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx&amp;amp;;title=Tech+Titbits&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/tech-titbits.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=284586" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/jpfouche/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Renaming your SharePoint Virtual Machine</title><link>http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx</link><pubDate>Tue, 12 Feb 2008 15:28:11 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:322688</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In my previous post entitled SharePoint Development Environment Scenarios, I posted a diagram recommending deployment using virtual machines on each developer&amp;#39;s desktop.&amp;#160; The practical upshot of this is that you will need to store a central &amp;quot;base&amp;quot; VM somewhere - perhaps on a file share - and copy this to each developer&amp;#39;s desktop whenever a new developer arrives.&amp;#160; &lt;br /&gt;    &lt;br /&gt;A problem you will encounter when doing this is that you will get an IP / Name conflict when you first boot the server - you now have two machines trying to access the same network resource, and they have the same name!&amp;#160; Clinton Cherry outlines a procedure to solve this problem &lt;a href="http://clintcherry.spaces.live.com/Blog/cns!AEC0DCBC460E45B9!396.entry?action=post&amp;amp;wa=wsignin1.0" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;The simple procedure I followed was:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1.Run the command line indicated i.e. stsadm -o setconfigdb -databaseserver &amp;quot;nameofdatabaseserver\instance&amp;quot; -farmuser &amp;quot;networkserviceaccount&amp;quot; -farmpassword &amp;quot;networkserviceaccountpassword&amp;quot; where I found that you had to remove the computer name if using a local account for the farmuser.&amp;#160; This is because the computer name has changed, and somewhere along the line the config wizard tries to use the old computer name.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;2.Grant access to the new farmuser account on the relevant databases in SQL Server. The wizard will fail if it cannot access the databases.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The method worked well for me.&amp;#160; Check it out on Clinton Cherry&amp;#39;s blog.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;An update to this post was presented to me by my colleague, Joseph Neimann, who recently tried the process again.&amp;#160; Here it is:&lt;/p&gt;  &lt;p&gt;&amp;quot;The final verdict was that inorder to effectively change a name you need to remove the domain from the user name before you can rename. &lt;/p&gt;  &lt;p&gt;So first run&lt;/p&gt;  &lt;p&gt;stsadm -o setconfigdb -databaseserver &amp;quot;Old_databaseserver\instance&amp;quot; -farmuser &amp;quot;networkserviceaccount&amp;quot; -farmpassword &amp;quot;networkserviceaccountpassword&amp;quot;&lt;/p&gt;  &lt;p&gt;Then Rename server&lt;/p&gt;  &lt;p&gt;Then Run &lt;/p&gt;  &lt;p&gt;stsadm -o setconfigdb -databaseserver &amp;quot;New_databaseserver\instance&amp;quot; -farmuser &amp;quot;networkserviceaccount&amp;quot; -farmpassword &amp;quot;networkserviceaccountpassword&amp;quot;&lt;/p&gt;  &lt;p&gt;Then run the wizard. &lt;/p&gt;  &lt;p&gt;Success.&amp;quot;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx&amp;amp;;subject=Renaming+your+SharePoint+Virtual+Machine" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx&amp;amp;;title=Renaming+your+SharePoint+Virtual+Machine" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx&amp;amp;title=Renaming+your+SharePoint+Virtual+Machine" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx&amp;amp;;title=Renaming+your+SharePoint+Virtual+Machine" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx&amp;amp;;title=Renaming+your+SharePoint+Virtual+Machine&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/renaming-your-sharepoint-virtual-machine.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=322688" width="1" height="1"&gt;</description></item><item><title>Giving "Performant" Presentations</title><link>http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx</link><pubDate>Tue, 12 Feb 2008 15:27:29 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:322687</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Here are some links to help you to deliver better presentations...&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.beyondbullets.com/" href="http://www.beyondbullets.com/"&gt;http://www.beyondbullets.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://headrush.typepad.com/creating_passionate_users/" href="http://headrush.typepad.com/creating_passionate_users/"&gt;http://headrush.typepad.com/creating_passionate_users/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I will be updating this page.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx&amp;amp;;subject=Giving+%26quot%3bPerformant%26quot%3b+Presentations" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx&amp;amp;;title=Giving+%26quot%3bPerformant%26quot%3b+Presentations" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx&amp;amp;title=Giving+%26quot%3bPerformant%26quot%3b+Presentations" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx&amp;amp;;title=Giving+%26quot%3bPerformant%26quot%3b+Presentations" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx&amp;amp;;title=Giving+%26quot%3bPerformant%26quot%3b+Presentations&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/12/giving-quot-performant-quot-presentations.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=322687" width="1" height="1"&gt;</description></item><item><title>IIS Redirection [with Sharepoint 2007] - URL and Wildcard Redirection</title><link>http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx</link><pubDate>Fri, 08 Feb 2008 19:45:10 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:316813</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;If you are thinking of using redirection on your sharepoint site - e.g. you want to redirect all http requests to https, or perhaps you want to retire an old URL, you have perhaps considered some of these options:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;1.&amp;#160; USE A QUICK AND DIRTY SCRIPT&lt;/strong&gt;       &lt;br /&gt;Redirect using a script such as this one in .asp (I am using .asp for ease of scripting):&lt;/p&gt;    &lt;p&gt;&amp;lt;% &lt;/p&gt;    &lt;p&gt;Response.Redirect(&lt;a href="https://mysite.co.za"&gt;https://mysite.co.za&lt;/a&gt; &amp;amp; Request.ServerVariables(&amp;quot;URL&amp;quot;) )&lt;/p&gt;    &lt;p&gt;%&amp;gt;&lt;/p&gt;    &lt;p&gt;You might even consider using the HTTP_REFERER Server Variable, and try to transform this into your new site&amp;#39;s URL.&lt;/p&gt;    &lt;p&gt;You save this script as default.asp, and set it as the default document in IIS.&lt;/p&gt;    &lt;p&gt;Problem with this approach?&amp;#160; &lt;/p&gt;    &lt;p&gt;a.Works great on your site if you only want to access the root!&amp;#160; What about &lt;a href="http://mysite/mypage01.aspx"&gt;http://mysite/mypage01.aspx&lt;/a&gt;?       &lt;br /&gt;b.&amp;#160; HTTP_REFERER is dangerously unreliable - e.g. it does not work if you enter the address into the browser and hit enter - you have to click a link!&amp;#160; It will return an empty value.       &lt;br /&gt;c:&amp;#160; URL will return the current URL, when what you really want is the URL that the user typed into the browser (see point 2 for trouble with this)       &lt;br /&gt;&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;2.&amp;#160; CUSTOM ERROR PAGES        &lt;br /&gt;&lt;/strong&gt;You have failed on point 1, so what about using custom error pages to specify a handler on 404 errors - say you redirect to redirect.asp every time you have a 404.&amp;#160; You can configure this in IIS in the Custom Errors tab - and also in web.config (I could not get this to work).&amp;#160; Problems with this are as follows:&lt;/p&gt;    &lt;p&gt;a.You find that your script cannot access the original URL that the user typed in - if you try HTTP_REFERER, you get an empty value, and if you use URL, you get the current URL i.e. redirect.asp!&amp;#160; Next option...&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;3.&amp;#160; IHttpHandler&lt;/strong&gt;       &lt;br /&gt;Try writing an IHttpHandler to handle all requests to the sharepoint site, and do the transform in C# code.&amp;#160; This sounds like an excellent idea, and it ALMOST worked for me.&amp;#160; Then I read an article stating that the handler cannot work on ANY extension - you have to configure IIS and the handler for a specific extension.&amp;#160; I also found that I was having trouble when I deployed my &amp;quot;working&amp;quot; solution (file system based) to an IIS-deployed website.&amp;#160; The file system based one worked, whereas the IIS-based one did not.&amp;#160; I believe this might work, and this approach needs more investigation.&amp;#160; But this took a lot of coding!&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;4.&amp;#160; CONFIGURE IIS&lt;/strong&gt;       &lt;br /&gt;Now, the approach that worked for me... Set it up in IIS there is a setting to get content from &amp;quot;a redirection to a URL&amp;quot;.&amp;#160; Here, you can specify the following:&lt;/p&gt;    &lt;p&gt;- the &amp;quot;target&amp;quot; URL is the domain of the new site you want to direct to e.g. &lt;a href="https://mysite.co.za"&gt;https://mysite.co.za&lt;/a&gt;.       &lt;br /&gt;- specify an EXACT MATCH (it is a check box)       &lt;br /&gt;- specify wildcard patterns to force querystrings to be used.&amp;#160; My URL in the target textbox was : &lt;a href="https://mysite.com$Q"&gt;https://mysite.com$Q&lt;/a&gt; (the $Q means &amp;quot;include the querystring)!       &lt;br /&gt;      &lt;br /&gt;The site you need to visit in order to understand redirection strings is here &lt;a title="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/6b855a7a-0884-4508-ba95-079f38c77017.mspx?mfr=true" href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/6b855a7a-0884-4508-ba95-079f38c77017.mspx?mfr=true"&gt;http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/6b855a7a-0884-4508-ba95-079f38c77017.mspx?mfr=true&lt;/a&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;strong&gt;5.&amp;#160; DISABLE SHAREPOINT ON YOUR OLD SITE        &lt;br /&gt;&lt;/strong&gt;Note that if you want a Sharepoint site to stop being a Sharepoint site, and to start serving up your scripts, you need to do but one small change - rename global.asax to global.asax.backup. If you do this, Sharepoint no longer implements an ApplicationHandler (which is specfied in global.asax) as Sharepoint can no linger find the global.asax file!&amp;#160; IIS will then process scripts as usual.&lt;/p&gt;    &lt;p&gt;I would not say that this was a &amp;quot;painless&amp;quot; exercise, but it is a few minutes of work when you know how to set it up!&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx&amp;amp;;subject=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx&amp;amp;;title=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx&amp;amp;title=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx&amp;amp;;title=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx&amp;amp;;title=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-with-sharepoint-2007-url-and-wildcard-redirection.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=316813" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/jpfouche/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://dotnet.org.za/jpfouche/archive/tags/Sharepoint/default.aspx">Sharepoint</category></item><item><title>IIS Redirection [with Sharepoint 2007] - URL and Wildcard Redirection</title><link>http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx</link><pubDate>Fri, 08 Feb 2008 19:43:43 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:316812</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;If you are thinking of using redirection on your sharepoint site - e.g. you want to redirect all http requests to https, or perhaps you want to retire an old URL, you have perhaps considered some of these options:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;1.&amp;#160; USE A QUICK AND DIRTY SCRIPT&lt;/strong&gt;      &lt;br /&gt;Redirect using a script such as this one in .asp (I am using .asp for ease of scripting):&lt;/p&gt;    &lt;p&gt;&amp;lt;% &lt;/p&gt;    &lt;p&gt;Response.Redirect(&lt;a href="https://mysite.co.za"&gt;https://mysite.co.za&lt;/a&gt; &amp;amp; Request.ServerVariables(&amp;quot;URL&amp;quot;) )&lt;/p&gt;    &lt;p&gt;%&amp;gt;&lt;/p&gt;    &lt;p&gt;You might even consider using the HTTP_REFERER Server Variable, and try to transform this into your new site&amp;#39;s URL.&lt;/p&gt;    &lt;p&gt;You save this script as default.asp, and set it as the default document in IIS.&lt;/p&gt;    &lt;p&gt;Problem with this approach?&amp;#160; &lt;/p&gt;    &lt;p&gt;a.Works great on your site if you only want to access the root!&amp;#160; What about &lt;a href="http://mysite/mypage01.aspx"&gt;http://mysite/mypage01.aspx&lt;/a&gt;?      &lt;br /&gt;b.&amp;#160; HTTP_REFERER is dangerously unreliable - e.g. it does not work if you enter the address into the browser and hit enter - you have to click a link!&amp;#160; It will return an empty value.      &lt;br /&gt;c:&amp;#160; URL will return the current URL, when what you really want is the URL that the user typed into the browser (see point 2 for trouble with this)      &lt;br /&gt;&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;2.&amp;#160; CUSTOM ERROR PAGES       &lt;br /&gt;&lt;/strong&gt;You have failed on point 1, so what about using custom error pages to specify a handler on 404 errors - say you redirect to redirect.asp every time you have a 404.&amp;#160; You can configure this in IIS in the Custom Errors tab - and also in web.config (I could not get this to work).&amp;#160; Problems with this are as follows:&lt;/p&gt;    &lt;p&gt;a.You find that your script cannot access the original URL that the user typed in - if you try HTTP_REFERER, you get an empty value, and if you use URL, you get the current URL i.e. redirect.asp!&amp;#160; Next option...&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;3.&amp;#160; IHttpHandler&lt;/strong&gt;      &lt;br /&gt;Try writing an IHttpHandler to handle all requests to the sharepoint site, and do the transform in C# code.&amp;#160; This sounds like an excellent idea, and it ALMOST worked for me.&amp;#160; Then I read an article stating that the handler cannot work on ANY extension - you have to configure IIS and the handler for a specific extension.&amp;#160; I also found that I was having trouble when I deployed my &amp;quot;working&amp;quot; solution (file system based) to an IIS-deployed website.&amp;#160; The file system based one worked, whereas the IIS-based one did not.&amp;#160; I believe this might work, and this approach needs more investigation.&amp;#160; But this took a lot of coding!&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;4.&amp;#160; CONFIGURE IIS&lt;/strong&gt;      &lt;br /&gt;Now, the approach that worked for me... Set it up in IIS there is a setting to get content from &amp;quot;a redirection to a URL&amp;quot;.&amp;#160; Here, you can specify the following:&lt;/p&gt;    &lt;p&gt;- the &amp;quot;target&amp;quot; URL is the domain of the new site you want to direct to e.g. &lt;a href="https://mysite.co.za"&gt;https://mysite.co.za&lt;/a&gt;.      &lt;br /&gt;- specify an EXACT MATCH (it is a check box)      &lt;br /&gt;- specify wildcard patterns to force querystrings to be used.&amp;#160; My URL in the target textbox was : &lt;a href="https://mysite.com$Q"&gt;https://mysite.com$Q&lt;/a&gt; (the $Q means &amp;quot;include the querystring)!      &lt;br /&gt;      &lt;br /&gt;The site you need to visit in order to understand redirection strings is here &lt;a title="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/6b855a7a-0884-4508-ba95-079f38c77017.mspx?mfr=true" href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/6b855a7a-0884-4508-ba95-079f38c77017.mspx?mfr=true"&gt;http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/6b855a7a-0884-4508-ba95-079f38c77017.mspx?mfr=true&lt;/a&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;strong&gt;5.&amp;#160; DISABLE SHAREPOINT ON YOUR OLD SITE       &lt;br /&gt;&lt;/strong&gt;Note that if you want a Sharepoint site to stop being a Sharepoint site, and to start serving up your scripts, you need to do but one small change - rename global.asax to global.asax.backup. If you do this, Sharepoint no longer implements an ApplicationHandler (which is specfied in global.asax) as Sharepoint can no linger find the global.asax file!&amp;#160; IIS will then process scripts as usual.&lt;/p&gt;    &lt;p&gt;I would not say that this was a &amp;quot;painless&amp;quot; exercise, but it is a few minutes of work when you know how to set it up!&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx&amp;amp;;subject=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx&amp;amp;;title=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx&amp;amp;title=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx&amp;amp;;title=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx&amp;amp;;title=IIS+Redirection+%5bwith+Sharepoint+2007%5d+-+URL+and+Wildcard+Redirection&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/iis-redirection-url-and-wildcard-redirection.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=316812" width="1" height="1"&gt;</description></item><item><title>Sharepoint Quibbles - Developer Readiness Training Adventures</title><link>http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx</link><pubDate>Fri, 08 Feb 2008 19:19:27 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:316784</guid><dc:creator>virasana</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I am providing Sharepoint training (&amp;quot;Deep Dive&amp;quot;) this week (28th January 2008).&amp;#160;&amp;#160; Here, in note form,&amp;#160; are some of the questions and problems we have been experiencing:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;1.&amp;#160;&amp;#160;&amp;#160;&amp;#160; Features.&amp;#160; &lt;br /&gt;&lt;/strong&gt;We find that multiple instances of our feature are being deployed!&amp;#160; Why is this happening?&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Learning:        &lt;br /&gt;&lt;/strong&gt;The feature we are trying to deploy was already installed on the virtual machine.&amp;#160; We did not uninstall the original feature, but rather added a new one, with a different GUID, and the same title.&amp;#160; Hence, we have multiple &amp;quot;HelloWorld&amp;quot; features.&lt;/p&gt;    &lt;p&gt;Remember that a feature is defined by the following:      &lt;br /&gt;-&amp;#160;&amp;#160;&amp;#160; A GUID which causes a unique &lt;strong&gt;feature installation&lt;/strong&gt; in Sharepoint.       &lt;br /&gt;-&amp;#160;&amp;#160;&amp;#160; Feature.xml, elements.xml fand other &lt;strong&gt;resource files&lt;/strong&gt; which are copied to the &amp;quot;12&amp;quot; hive during deployment.&amp;#160; These can be cross-referenced by multiple installed features.&amp;#160; We noticed that certain students were changing the title in feature.xml, whereas multiple features reflected the change in Sharepoint!&amp;#160; This is to do with cross-referencing.       &lt;br /&gt;-&amp;#160;&amp;#160;&amp;#160;&amp;#160; An optional feature receiver &lt;strong&gt;assembly&lt;/strong&gt; which is installed to the GAC . If you lose this assembly, and you still define a feature receiver in feature.xml, you will have problems activating and deactivating the feature, as Sharepoint will be looking for a missing assembly in order to fire feature-related events.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;2.&amp;#160;&amp;#160;&amp;#160;&amp;#160; Page Templates.&lt;/strong&gt;       &lt;br /&gt;A badly formed .aspx page does not get deployed when using a Module element in elements.xml.&amp;#160; In this case, we had a &amp;lt;!-- Comment -&amp;gt; (notice the missing closing tag!) in our page template which caused much confusion.&amp;#160; Initially, our page templates were successfully copied when activating our feature.&amp;#160; Later, however, after we had inserted the comment, the changes were not propagated to the site.&amp;#160; This all happened without any error notifications.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Learning:        &lt;br /&gt;&lt;/strong&gt;Check very carefully that your page templates are properly formed when you find that changes are not being propagated whenever a feature with a &amp;lt;Module&amp;gt; element in elements.xml is activated.&amp;#160; &lt;/p&gt;    &lt;p&gt;Always close comments!&amp;#160; &amp;lt;!-- Close me -&amp;gt; (where&amp;#39;s the missing dash?)&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;3.&amp;#160;&amp;#160;&amp;#160;&amp;#160; Sharepoint or SharePoint?        &lt;br /&gt;&lt;/strong&gt;Some of us write Sharepoint, and others write SharePoint.&amp;#160; Sharepoint gives us errors.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Learning:        &lt;br /&gt;&lt;/strong&gt;Always refer to SharePoint, and not Sharepoint.&amp;#160; (notice the Captialisation!)&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;4.&amp;#160;&amp;#160;&amp;#160;&amp;#160; Installing to GAC - authentication issue (have to build twice)        &lt;br /&gt;&lt;/strong&gt;When working on the Virtual machine, we sometimes have to build twice in order for our build script to install to the GAC.&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Learning:&lt;/strong&gt;&amp;#160; Currently, our only learning is that &amp;quot;you have to build twice&amp;quot; :(&amp;#160; Is Sharepoint locking access to the assembly?&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;5.&amp;#160;&amp;#160;&amp;#160;&amp;#160; Working With Sharepoint Pages - Feedback        &lt;br /&gt;&lt;/strong&gt;Development environment is not complete. It is very frustrating to work with xml files - it is like going back 20 years in code history.&lt;/p&gt;    &lt;p&gt;Debugging is difficult - no errors thrown.&amp;#160; Log files are a mystery,      &lt;br /&gt;      &lt;br /&gt;Sharepoint as a server is good.&amp;#160; We are concerned about the lack of development environment.       &lt;br /&gt;      &lt;br /&gt;Errors are mostly due to syntax - very difficult!       &lt;br /&gt;      &lt;br /&gt;Architecture is nevertheless sound.       &lt;br /&gt;      &lt;br /&gt;We prefer the object model to CAML/XML. &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;6.&amp;#160;&amp;#160;&amp;#160;&amp;#160; Lists&lt;/strong&gt;       &lt;br /&gt;&lt;strong&gt;Use of Object Model        &lt;br /&gt;&lt;/strong&gt;The team prefers using the object model to CAML!&amp;#160; &lt;br /&gt;Team liked the query mechanism.&amp;#160; We need a Query Designer.       &lt;br /&gt;Writing a query designer will be easier because it is all defined in XML.&amp;#160; &lt;br /&gt;XML is great, but we need tools on top of XML.&amp;#160; XML is NOT human readable!       &lt;br /&gt;We spent hours trying to debug XML!       &lt;br /&gt;Sometimes our GUIDs needed curly braces, and other times not.&amp;#160; This is inconsistent.       &lt;br /&gt;No debugging tools.       &lt;br /&gt;A lot of &amp;quot;fiddling&amp;quot; and manual work required to get things working.       &lt;br /&gt;Wizards and snippets are needed because &amp;quot;our fingers hurt!&amp;quot; &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;7.&amp;#160;&amp;#160;&amp;#160;&amp;#160; Sharepoint Workflow        &lt;br /&gt;&lt;/strong&gt;InfoPath is easy to use.       &lt;br /&gt;Saving source files is difficult.       &lt;br /&gt;Creating cs class - need to have in-depth knowledge of WF.       &lt;br /&gt;You have to have in-depth knowledge of WF, not just Sharepoint.&amp;#160; &lt;br /&gt;You have to DESIGN your workflow properly, otherwise you will have problems if you just code it ad hoc.       &lt;br /&gt;      &lt;br /&gt;Nice to have common deployment architecture - features, elements et.       &lt;br /&gt;Forgot to enable browser-compatible features       &lt;br /&gt;Forgot to clear the alternate path property in InfoPath when publishing.&amp;#160; Why did this cause the solution to bomb?       &lt;br /&gt;Code needs to be more intuitive... Need knowledge of WF!       &lt;br /&gt;Visual Studio extensions were very helpful - less bugs on your server!       &lt;br /&gt;Debugging was nitty-gritty (not logical).&amp;#160; &lt;br /&gt;The whole process was &amp;quot;confusing&amp;quot; - nitty gritty, a lot of pieces all over the place.&amp;#160; Compared to WCF, this is difficult.       &lt;br /&gt;Debugging seems to indicate that we need to write a whole lot of Console.Writeline statements... where is the bug?       &lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx&amp;amp;;subject=Sharepoint+Quibbles+-+Developer+Readiness+Training+Adventures" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx&amp;amp;;title=Sharepoint+Quibbles+-+Developer+Readiness+Training+Adventures" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx&amp;amp;title=Sharepoint+Quibbles+-+Developer+Readiness+Training+Adventures" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx&amp;amp;;title=Sharepoint+Quibbles+-+Developer+Readiness+Training+Adventures" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx&amp;amp;;title=Sharepoint+Quibbles+-+Developer+Readiness+Training+Adventures&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/jpfouche/archive/2008/02/08/sharepoint-quibbles-developer-readiness-training-adventures.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=316784" width="1" height="1"&gt;</description></item></channel></rss>