tag:blogger.com,1999:blog-5764708389488508612023-11-16T01:07:23.036+11:00Antony Francis's BlogTips and Techniques I used in various .net based projects.Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.comBlogger65125tag:blogger.com,1999:blog-576470838948850861.post-87995398937191162862014-01-31T00:07:00.002+11:002014-06-14T22:43:28.630+10:00Automated installation and configuration of IIS Advanced logging module using PowershellRecently I had a chance to work on a web application which is hosted in the AWS environment. Throughout the development life cycle we have built an automated deployment process using Powershell. The automated build and deploy process takes care of spinning up new EC2 instances using Windows 2012 base AMI and installs both runtime requirements and application itself.<br />
<br />
<div>
During this process, I had a chance to build few automation modules in Powershell. I am going to share some snippets of the modules in upcoming posts which I found not so straight forward to build. So that it would be useful to someone who is trying perform the same task.</div>
<div>
In this post I am going to cover the automated installation and configuration of IIS Advanced logging module.<br />
<br /></div>
<div>
<b>Why Advanced Logging module?</b></div>
<div>
Since all of our web servers are behind Elastic Load Balancers (ELB), the remote host address is always set to the internal IP address of the load balancer. ELB puts the actual client IP address is in the <b>X-Forwarded-For</b> request header. The stock standard IIS HTTP logging module doesn't have access to these custom headers therefore we chose to use Advanced Logging module to capture and log additional customer headers.<br />
<br />
We only need Advanced Logging module for IIS 7, IIS 7.5 and IIS 8.0. In IIS 8.5 (i.e.: In Windows 2012 R2) the HTTP logging has native support to capture custom fields as part of stock standard HTTP logging.<br />
<br />
It was pretty straight forward to install and configure manually but not so easy through Powershell because installation and configuration not fully supported through Powershell alone I had to use <b>appcmd.exe</b> as well.</div>
<div>
<b><br /></b><b>The Goal</b></div>
<div>
<ol>
<li>Install Advanced Logging module </li>
<li>Create custom logging folder and assign permissions </li>
<li>Disable stock standard IIS logging </li>
<li>Add additional headers like X-Forwarded-For, X-Forwarded-Proto to the available logging fields </li>
<li>Disable server level Advanced logging </li>
<li>Enable Advanced logging </li>
<li>Configure custom log directory at server level and default site level </li>
<li>Configure Advanced Logging by site on the server</li>
</ol>
<div>
Lets dive into detail.....</div>
</div>
<div>
<br /></div>
<div>
<b>1. Install Advanced Logging module</b></div>
<blockquote>
<pre class="csharpcode">msiexec.exe /i C:\data\AdvancedLogging64.msi /passive /log C:\Data\advancedlogging.log
Start-Sleep -Seconds 10</pre>
</blockquote>
<strong>2. Create custom logging folder and assign permissions<br /> </strong>Give Read & Write access to IIS_IUSERS group (I found out about this in the hard way)<br />
<blockquote>
<pre class="csharpcode"><span class="rem">#grant permission to IIS_IUSERS group to the log directory</span>
$Command = <span class="str">"icacls C:\logs /grant BUILTIN\IIS_IUSRS:(OI)(CI)RXMW"</span>
cmd.exe /c $Command</pre>
</blockquote>
<strong>3. Disable stock standard IIS logging</strong> <br />
<blockquote>
<pre class="csharpcode">Import-Module WebAdministration
<span class="rem"># Disables http logging module</span>
Set-WebConfigurationProperty -Filter system.webServer/httpLogging -PSPath machine/webroot/apphost -Name dontlog -Value true</pre>
</blockquote>
<strong>4. Add additional headers like X-Forwarded-For, X-Forwarded-Proto to the available logging fields</strong><br />
<blockquote>
<pre class="csharpcode"><span class="rem"># Adds AWS ELB aware X-Forwarded-For logging field</span>
Add-WebConfiguration <span class="str">"system.webServer/advancedLogging/server/fields"</span> -value @{id=<span class="str">"X-Forwarded-For"</span>;sourceName=<span class="str">"X-Forwarded-For"</span>;sourceType=<span class="str">"RequestHeader"</span>;logHeaderName=<span class="str">"X-Forwarded-For"</span>;category=<span class="str">"Default"</span>;loggingDataType=<span class="str">"TypeLPCSTR"</span>}
<span class="rem"># Adds AWS ELB aware X-Forwarded-Proto logging field</span>
Add-WebConfiguration <span class="str">"system.webServer/advancedLogging/server/fields"</span> -value @{id=<span class="str">"X-Forwarded-Proto"</span>;sourceName=<span class="str">"X-Forwarded-Proto"</span>;sourceType=<span class="str">"RequestHeader"</span>;logHeaderName=<span class="str">"X-Forwarded-Proto"</span>;category=<span class="str">"Default"</span>;loggingDataType=<span class="str">"TypeLPCSTR"</span>} </pre>
</blockquote>
<strong>5. Disable default server level Advanced logging</strong><br />
<blockquote>
<pre class="csharpcode"><span class="rem"># Disables the default advanced logging config</span>
Set-WebConfigurationProperty -Filter <span class="str">"system.webServer/advancedLogging/server/logDefinitions/logDefinition[@baseFileName='%COMPUTERNAME%-Server']"</span> -name enabled -value false</pre>
</blockquote>
<strong>6. Enable Advanced logging<br /> </strong>By default the Advanced Logging is disabled.<br />
<blockquote>
<pre class="csharpcode"><span class="rem"># Enable Advanced Logging</span>
Set-WebConfigurationProperty -Filter system.webServer/advancedLogging/server -PSPath machine/webroot/apphost -Name enabled -Value true</pre>
</blockquote>
<strong>7. Configure custom log directory at server level and default site level</strong><br />
<blockquote>
<pre class="csharpcode"><span class="rem"># Set log directory at server level</span>
Set-WebConfigurationProperty -Filter system.applicationHost/advancedLogging/serverLogs -PSPath machine/webroot/apphost -Name directory -Value $logDirectory
<span class="rem"># Set log directory at site default level</span>
Set-WebConfigurationProperty -Filter system.applicationHost/sites/siteDefaults/advancedLogging -PSPath machine/webroot/apphost -Name directory -Value $logDirectory</pre>
</blockquote>
<strong>8. Configure Advanced Logging by site on the server</strong><br />
<blockquote>
<pre class="csharpcode"><span class="kwrd">function</span> AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun()
{
<span class="kwrd">param</span>([string] $site)
<span class="rem">#Get current powershell execution folder</span>
$currentLocation = Get-Location
<span class="rem">#Create an empty bat which will be populated with appcmd instructions</span>
$stream = [System.IO.StreamWriter] <span class="str">"$currentLocation\$site.bat"</span>
<span class="rem">#Create site specific log definition</span>
$stream.WriteLine(<span class="str">"C:\windows\system32\inetsrv\appcmd.exe set config `"</span>$site`<span class="str">" -section:system.webServer/advancedLogging/server /+`"</span>logDefinitions.[baseFileName=<span class="str">'$site'</span>,enabled=<span class="str">'True'</span>,logRollOption=<span class="str">'Schedule'</span>,schedule=<span class="str">'Daily'</span>,publishLogEvent=<span class="str">'False'</span>]`<span class="str">" /commit:apphost"</span>)
<span class="rem">#Get all available fields for logging</span>
$availableFields = Get-WebConfiguration <span class="str">"system.webServer/advancedLogging/server/fields"</span>
<span class="rem">#Add appcmd instruction to add all the selected fields above to be logged as part of the logging</span>
<span class="rem">#The below section can be extended to filter out any unwanted fields</span>
<span class="kwrd">foreach</span> ($item <span class="kwrd">in</span> $availableFields.Collection)
{
$stream.WriteLine(<span class="str">"C:\windows\system32\inetsrv\appcmd.exe set config `"</span>$site`<span class="str">" -section:system.webServer/advancedLogging/server /+`"</span>logDefinitions.[baseFileName=<span class="str">'$site'</span>].selectedFields.[id=<span class="str">'$($item.id)'</span>,logHeaderName=<span class="str">'$($item.logHeaderName)'</span>]`<span class="str">" /commit:apphost"</span>)
}
$stream.close()
<span class="rem"># execute the batch file create to configure the site specific Advanced Logging</span>
Start-Process -FilePath $currentLocation\$site.bat
Start-Sleep -Seconds 10
}</pre>
</blockquote>
<blockquote>
<pre class="csharpcode"><span class="rem">#Call the above method by passing in the IIS site names</span>
AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun <span class="str">'foo.com'</span></pre>
</blockquote>
<br />
And that’s it :).<br />
<br />
I found following two posts to be helpful in building the above.<br />
<br />
<a href="http://forums.iis.net/t/1193633.aspx?Configure+Advanced+Logging+through+powershell" target="_blank">http://forums.iis.net/t/1193633.aspx?Configure+Advanced+Logging+through+powershell</a><br />
<a href="http://forums.iis.net/t/1161699.aspx?IIS+Advanced+Logging+1+0+Feedback" title="http://forums.iis.net/t/1161699.aspx?IIS+Advanced+Logging+1+0+Feedback">http://forums.iis.net/t/1161699.aspx?IIS+Advanced+Logging+1+0+Feedback</a><br />
<br />
Comments and suggestions are welcome.<br />
<style type="text/css">.csharpcode, .csharpcode pre<br />{<br /> font-size: small;<br /> color: black;<br /> font-family: consolas, "Courier New", courier, monospace;<br /> background-color: #ffffff;<br /> /*white-space: pre;*/<br />}<br />.csharpcode pre { margin: 0em; }<br />.csharpcode .rem { color: #008000; }<br />.csharpcode .kwrd { color: #0000ff; }<br />.csharpcode .str { color: #006080; }<br />.csharpcode .op { color: #0000c0; }<br />.csharpcode .preproc { color: #cc6633; }<br />.csharpcode .asp { background-color: #ffff00; }<br />.csharpcode .html { color: #800000; }<br />.csharpcode .attr { color: #ff0000; }<br />.csharpcode .alt <br />{<br /> background-color: #f4f4f4;<br /> width: 100%;<br /> margin: 0em;<br />}<br />.csharpcode .lnum { color: #606060; }<br /></style><br />Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com3tag:blogger.com,1999:blog-576470838948850861.post-15253054784554040132010-02-21T21:45:00.000+11:002010-02-21T21:45:54.944+11:00ASP.NET MVC Uploading and Downloading Files<div>Great article about file handling in MVC.</div><div><br /></div><a href="http://www.mikesdotnetting.com/Article/125/ASP.NET-MVC-Uploading-and-Downloading-Files">ASP.NET MVC Uploading and Downloading Files</a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-91504607116853265892010-02-21T21:38:00.001+11:002010-02-21T21:38:42.416+11:00Consuming WCF / ASMX / REST service using JQueryThis is a great article about how to consume WCF using Jquery.<div><br /></div><div><a href="http://www.c-sharpcorner.com/UploadFile/sridhar_subra/116/Default.aspx">http://www.c-sharpcorner.com/UploadFile/sridhar_subra/116/Default.aspx</a></div>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-65454764150168753922009-03-31T18:42:00.001+11:002009-03-31T18:44:46.889+11:00MVC chapter ebookScott Guthrie has released a chapter of the upcoming "Asp.net MVC 1.0" and it can be found on the following URL:<br /><br /><a href="http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf">http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf</a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-3447280177278154822008-02-26T19:54:00.002+11:002008-02-26T19:55:33.500+11:00TRULY Understanding ViewState, the comment indexThis article gives a very good coverage of the problems faced in usage of ViewState.<br /><a href="http://weblogs.asp.net/infinitiesloop/archive/2008/02/19/truly-understanding-viewstate-comment-index.aspx"><br />http://weblogs.asp.net/infinitiesloop/archive/2008/02/<br />19/truly-understanding-viewstate-comment-index.aspx</a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-77005796616776505582008-02-26T19:39:00.000+11:002008-02-26T19:49:04.185+11:00User Administration Tool (Part 3)In <a href="http://www.dotnetbips.com/articles/d0733f82-ebd9-4282-9fce-389c4257f870.aspx"> Part 2</a> of this series of the article covered <a target="_new" href="http://www.dotnetbips.com/articles/30775db7-379a-4b37-beff-cb32d3734a04.aspx#">user management</a> features. This final part will deal with role management and profile management.<br /><br /><a href="http://www.dotnetbips.com/articles/30775db7-379a-4b37-beff-cb32d3734a04.aspx">http://www.dotnetbips.com/articles/<br />30775db7-379a-4b37-beff-cb32d3734a04.aspx<br /></a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-18316450176994606882008-02-26T19:36:00.001+11:002008-02-26T19:39:28.081+11:00ASP.NET AJAX Controls and Extenders Tutorial<span id="intelliTXT">What are the differences between the Server Control, the ASP.NET AJAX Server Control and the ASP.NET AJAX </span><span id="intelliTXT">Server Control </span><span id="intelliTXT">Extender, and when should each be used?<br /><br />This article gives good comparison between each of them.<br /><br /><a href="http://www.codeproject.com/kb/ajax/ajaxcontrolsandextenders.aspx">http://www.codeproject.com/kb/<br />ajax/ajaxcontrolsandextenders.aspx<br /></a></span>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-25262747263194628212008-02-26T19:34:00.001+11:002008-02-26T19:36:12.226+11:00Best Practices to Improve ASP.Net Web Application Performance.This article gives some important points to consider for the performance improvement in asp.net applications.<br /><br /><a href="http://www.dotnetfunda.com/articles/article45.aspx">http://www.dotnetfunda.com/<br />articles/article45.aspx<br /><br /></a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-54666473620462988892008-02-26T19:32:00.000+11:002008-02-26T19:34:13.243+11:00Validate XSL Against XML<span id="abstractLabel">In this Article, Haissam Abdul Malak shows how to create a class library for validating a certain XSL file against an XML file. He examines the concept with the help of a series of steps with relevant source code and explanations. Finally, he describes how to test the class library which was created in the previous steps.<br /><br /><a href="http://aspalliance.com/1567_Validate_XSL_Against_XML.all">http://aspalliance.com/<br />1567_Validate_XSL_Against_XML.all<br /></a></span>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-72277127879417746122008-02-26T19:30:00.002+11:002008-02-26T19:32:29.441+11:00AJAX localization<span class="clsSearchBox">This article discusses:</span><div class="clsDiscuss"><ul><li class="clsInfoBox">Globalization support in ASP.NET AJAX </li><li class="clsInfoBox">Need for support in JavaScript </li><li class="clsInfoBox">Assembly-based AJAX localization </li><li class="clsInfoBox">File-based AJAX localization </li></ul><a href="http://msdn.microsoft.com/msdnmag/issues/08/01/InternationalizingASPNETAJAX/#S3">http://msdn.microsoft.com/msdnmag/issues/<br />08/01/InternationalizingASPNETAJAX/#S3<br /></a></div>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-11931111388262569922008-02-26T19:27:00.000+11:002008-02-26T19:30:06.343+11:00Adding a Build Banner to ASP.NET PagesThis article explains, and provides fully functional code, for a plugin to the HTTP pipeline which will render such a 'development banner' to any ASPX page in the website in question.<br />The only requirement is to add the appropriate configuration to the <em>Web.config</em> file, and ensure the banner assembly is in the sites <em>bin</em> directory.<br /><a href="http://www.codeproject.com/kb/aspnet/buildbanner.aspx"><br />http://www.codeproject.com/kb/<br />aspnet/buildbanner.aspx</a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-70836697656813644932008-02-26T19:26:00.000+11:002008-02-26T19:27:36.058+11:00Top 10 Best Practices for Production ASP.NET ApplicationsIn no particular order, here are the top ten things I've learned to pay attention to when dealing with production ASP.NET applications. Hopefully they will help you save you some time and headaches.<br /><br /><a href="http://daptivate.com/archive/2008/02/12/top-10-best-practices-for-production-asp-net-applications.aspx">http://daptivate.com/archive/2008/02/12/<br />top-10-best-practices-for-production-asp-net-applications.aspx<br /></a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-58849347693723400932008-02-26T18:53:00.001+11:002008-02-26T19:26:35.482+11:00ASP.NET Memory: If your application is in production… then why is debug=trueThis is another article which has some information about the impact of leaving debug=true in the production environment.<br /><br /><a href="http://blogs.msdn.com/tess/archive/2006/04/13/575364.aspx">http://blogs.msdn.com/tess/archive/<br />2006/04/13/575364.aspx<br /></a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-80887569914007867442008-02-26T18:50:00.002+11:002008-02-26T18:53:53.111+11:00App_Offline.htm and working around the "IE Friendly Errors" featureThis article gives a way to overcome the "IE Friendly Errors" feature interfering with the actual message coming from the server when the content length is less than 512 bytes.<br /><br /><br /><a href="http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx">http://weblogs.asp.net/scottgu/archive<br />/2006/04/09/442332.aspx<br /></a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-29016746085253219722008-02-19T09:35:00.001+11:002008-02-19T09:37:56.276+11:00Building a Web Message Board using Visual Studio 2008This article gives a practical example of using LINQ to develop a basic message board application.<br /><br /><a href="http://www.codeproject.com/kb/aspnet/vs2008messageboard1.aspx">http://www.codeproject.com/kb/<br />aspnet/vs2008messageboard1.aspx</a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-82175923492089632052008-02-18T09:25:00.004+11:002008-02-18T09:28:53.061+11:00Code Converters (C# to VB.Net)This is a nice tool to convert C# code to VB.net or wise versa.<br /><br /><ol><li><a href="http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx">Convert C# to VB.NET</a></li><li><a href="http://labs.developerfusion.co.uk/convert/vb-to-csharp.aspx">Convert VB.NET to C#</a><br /></li></ol>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-39931554223020717292008-02-15T09:47:00.000+11:002008-02-15T09:48:50.635+11:00Uncover Hidden Data to Optimize Application Performance<span class="clsSearchBox">This article discusses:</span><div class="clsDiscuss"><ul><li class="clsInfoBox">Dynamic management views and functions</li><li class="clsInfoBox">Causes of server waits </li><li class="clsInfoBox">Common index problems </li><li class="clsInfoBox">Problems associated with logical I/O </li></ul><a href="http://msdn.microsoft.com/msdnmag/issues/08/01/SqlDmvs/default.aspx">http://msdn.microsoft.com/msdnmag/<br />issues/08/01/SqlDmvs/default.aspx<br /></a></div>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-68644182214281574522008-02-13T14:03:00.003+11:002008-02-13T14:07:37.572+11:00JSON-Enabled WCF Services in ASP.NET 3.5This article gives a very good introduction to using WCF services with AJAX.<br /><br /><a href="http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx">http://dotnetslackers.com/articles/ajax/<br />JSON-EnabledWCFServicesInASPNET35.aspx<br /></a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-52098125227322283422008-02-13T12:48:00.000+11:002008-02-13T12:49:42.013+11:00An Overview of ASP.NET 3.5 and Visual Studio 2008This article provides an overview of the new features in ASP.NET 3.5 and the new web/ASP.NET-related features in Visual Studio 2008. Read on to learn more!<br /><br /><a href="http://aspnet.4guysfromrolla.com/articles/112107-1.aspx">http://aspnet.4guysfromrolla.com/<br />articles/112107-1.aspx</a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-28550698660907195152008-02-13T12:46:00.001+11:002008-02-13T12:48:02.224+11:00ASP.NET Application Life Cycle Overview for IIS 7.0This topic describes the application life cycle for ASP.NET applications that are running in IIS 7.0 in Integrated mode and with the .NET Framework 3.0 or later. The IIS 7.0 integrated pipeline is a unified request processing pipeline that supports both native-code and managed-code modules.<br /><a href="http://msdn2.microsoft.com/en-us/library/bb470252.aspx"><br />http://msdn2.microsoft.com/en-us/<br />library/bb470252.aspx</a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-74748364881781666242008-02-13T08:41:00.000+11:002008-02-13T08:43:56.898+11:00MS-Ajax Client Javascript integrated within the Aptana IDEAptana has a cool Eclipse-based IDE for writing AJAX-y websites. It's got built-in support, via plugins, for most of the major Javascript Libraries.<br /><br /><a href="http://www.aptana.com/studio">http://www.aptana.com/studio</a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-44123500287366939882008-02-12T07:57:00.000+11:002008-02-12T07:58:41.346+11:00Handling Data After Post BackThis article gives an introduction to maintaining the new data entered by the user across postback on custom controls.<br /><br /><a href="http://www.bipinjoshi.net/articles/522e2775-aa37-4ba4-b08f-828e2ae9c79a.aspx">http://www.bipinjoshi.net/articles/<br />522e2775-aa37-4ba4-b08f-828e2ae9c79a.aspx<br /></a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-53073045840462260732008-02-11T14:31:00.001+11:002008-02-11T14:31:59.842+11:00Don’t run production ASP.NET Applications with debug=”true” enabled<span style="font-family:Arial;font-size:85%;">One of the things you want to avoid when deploying an ASP.NET application into production is to accidentally (or deliberately) leave the <compilation debug="”true”/"> switch on within the application’s web.config file.<br /><br />This article gives what are the reasons for not doing it.<br /><br /><a href="http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx">http://weblogs.asp.net/scottgu/archive/<br />2006/04/11/442448.aspx<br /></a></span>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-63588726064156899012008-02-11T10:14:00.000+11:002008-02-11T10:31:06.800+11:00ASP.NET Code DebuggingThis article gives an introduction for debugging ASP.Net coding.<br /><br /><a href="http://www.beansoftware.com/ASP.NET-Tutorials/ASP.NET-Code-Debugging.aspx">http://www.beansoftware.com/<br />ASP.NET-Tutorials/ASP.NET-Code-Debugging.aspx<br /></a>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0tag:blogger.com,1999:blog-576470838948850861.post-51845904208136455522008-02-11T10:12:00.000+11:002008-02-11T10:14:31.386+11:00ASP.NET AJAX Extender for multicolumn drag & drop<span name="intelliTxt" id="intelliTXT">The Extender allows reordering of content on the same column and drag & drop content between columns. It also supports client side notification so that you can call web service and store the position of the content behind the scene without producing (async) postback.<br /><br />Implementation details can be found on <a href="http://www.codeproject.com/KB/ajax/multicolumndragdrop.aspx">http://www.codeproject.com/KB/<br />ajax/multicolumndragdrop.aspx</a><br /><br /></span>Antony Francishttp://www.blogger.com/profile/13014414558292835636noreply@blogger.com0