<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET</title>
        <link>http://geekswithblogs.net/rashid/category/5920.aspx</link>
        <description>.NET</description>
        <language>en-US</language>
        <copyright>Kazi Manzur Rashid</copyright>
        <managingEditor>kazimanzurrashid@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Performance Benchmark with an Handy Class</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/06/21/Performance-Benchmark-with-an-Handy-Class.aspx</link>
            <description>&lt;p&gt;Instrumentation and Logging is an essential part of Software Development. Generally, most of the developer thinks instrumentation and logging is all about exception logging in a text file, which is not correct at all. Certainly, exception takes a major part in the instrumentation and logging. However, how many of us really bother the way the log data is written, do we really bother to import this data in a software to further analysis? In the following, I will present a handy class, which will automatically benchmark the instrumented method, so that we can do further analysis on the overall performance of our application. &lt;/p&gt; &lt;p&gt;PerformanceLog.cs:&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Reflection;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Diagnostics;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Configuration;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;sealed&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PerformanceLog : IDisposable&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; _isPerformancelogEnabled = Convert.ToBoolean(ConfigurationManager.AppSettings[&lt;span class="str"&gt;"performanceLogEnabled"&lt;/span&gt;]);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _logFile = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings[&lt;span class="str"&gt;"performanceLogFile"&lt;/span&gt;];&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; _includeParameters = Convert.ToBoolean(ConfigurationManager.AppSettings[&lt;span class="str"&gt;"performanceLogIncludeParameters"&lt;/span&gt;]);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; Stopwatch _watch;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; PerformanceLog()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (_isPerformancelogEnabled)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            _watch = &lt;span class="kwrd"&gt;new&lt;/span&gt; Stopwatch();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            _watch.Start();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Dispose()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (_isPerformancelogEnabled)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            _watch.Stop();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            DateTime end = DateTime.Now;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            DateTime start = end.AddMilliseconds(-_watch.ElapsedMilliseconds);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; userName = System.Web.HttpContext.Current.User.Identity.Name;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; methodInfo = GetCallingMethodDetails(_includeParameters);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (FileStream fs = &lt;span class="kwrd"&gt;new&lt;/span&gt; FileStream(_logFile, FileMode.Append, FileAccess.Write, FileShare.None))&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                &lt;span class="kwrd"&gt;using&lt;/span&gt; (StreamWriter sw = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamWriter(fs, Encoding.ASCII))&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                    sw.Write(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\"\n"&lt;/span&gt;, userName, methodInfo, start, end, _watch.Elapsed));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetCallingMethodDetails(&lt;span class="kwrd"&gt;bool&lt;/span&gt; includeParameters)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        StringBuilder output = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        &lt;span class="rem"&gt;//Skipping two Frame, First one is the current method and second one is the dispose method.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;        StackTrace stackTrace = &lt;span class="kwrd"&gt;new&lt;/span&gt; StackTrace(2, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;        StackFrame stackFrame = stackTrace.GetFrame(0);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;        MethodBase method = stackFrame.GetMethod();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;        output.Append(method.Name);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;        output.Append(&lt;span class="str"&gt;"("&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (includeParameters)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;            ParameterInfo[] paramInfos = method.GetParameters();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; ((paramInfos != &lt;span class="kwrd"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (paramInfos.Length &amp;gt; 0))&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;                output.Append(paramInfos[0].ParameterType.ToString());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;                output.Append(&lt;span class="str"&gt;" "&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;                output.Append(paramInfos[0].Name);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (paramInfos.Length &amp;gt; 1)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; j = 1; j &amp;lt; paramInfos.Length; j++)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;                    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;                        output.AppendFormat(&lt;span class="str"&gt;", {0} {1}"&lt;/span&gt;, paramInfos[j].ParameterType.ToString(), paramInfos[j].Name);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;                    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  79:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  80:  &lt;/span&gt;        output.Append(&lt;span class="str"&gt;")"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  81:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  82:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; output.ToString();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  83:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  84:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Usage:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;Category&amp;gt; GetAllCategory()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;using&lt;/span&gt; (PerformanceLog log = &lt;span class="kwrd"&gt;new&lt;/span&gt; PerformanceLog())&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="rem"&gt;//Do your Processing over here&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Web/App.config:&lt;/p&gt;&lt;pre class="csharpcode"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="performanceLogEnabled"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="performanceLogFile"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="PerformanceLog.csv"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="performanceLogIncludeParameters"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Logging Data:&lt;/p&gt;&lt;pre&gt;"Amit-Dell\Kazi Manzur Rashid","GetAllCategory()","6/21/2007 11:26:06 PM","6/21/2007 11:26:08 PM","00:00:02.0282049"
"Amit-Dell\Kazi Manzur Rashid","GetProductList()","6/21/2007 11:26:08 PM","6/21/2007 11:26:09 PM","00:00:00.7225937"
"Amit-Dell\Kazi Manzur Rashid","GetProductList()","6/21/2007 11:26:12 PM","6/21/2007 11:26:12 PM","00:00:00.0400289"
"Amit-Dell\Kazi Manzur Rashid","GetProductList()","6/21/2007 11:26:43 PM","6/21/2007 11:26:43 PM","00:00:00.0012069"
"Amit-Dell\Kazi Manzur Rashid","GetProductList()","6/21/2007 11:26:43 PM","6/21/2007 11:26:44 PM","00:00:00.0463002"
"Amit-Dell\Kazi Manzur Rashid","GetCustomerList()","6/21/2007 11:26:49 PM","6/21/2007 11:26:49 PM","00:00:00.0952376"
"Amit-Dell\Kazi Manzur Rashid","GetAllSupplier()","6/21/2007 11:28:33 PM","6/21/2007 11:28:33 PM","00:00:00.0364298"
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;As you can see the class is simply dumping the User Name, The instrumented method(The Parameters info can be turned on from the web.config), start and end time of the method and the total elapsed time of the method in a csv format. The benefit of generating in csv format is we can easily import these data in Microsoft Excel to take full advantage of Excel such as finding the Longest and shortest call, Average call, Number of Average call of a User, Graph etc.&lt;/p&gt;
&lt;p&gt;The simplicity of the class is, we do not have to do anything fancy except creating an instance of the class. The class is responsible to discover the method name and its parameter, start/end/elapsed time, user name etc. &lt;/p&gt;
&lt;p&gt;In Pageflakes, we are doing the same but in a different twist, we are utilizing the &lt;a href="http://www.codeplex.com/EntLib" target="_blank"&gt;Enterprise Library&lt;/a&gt; (logging and Instrumentation Block) to generate this. If you are interested to see how the EntLib can be used to do the above let me know. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;: &lt;a href="http://www.box.net/shared/a0oycfapok" target="_blank"&gt;PerformanceLog.cs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?http://geekswithblogs.net/rashid/archive/2007/06/21/Performance-Benchmark-with-an-Handy-Class.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/rashid/archive/2007/06/21/Performance-Benchmark-with-an-Handy-Class.aspx" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113369"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113369" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/113369.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/06/21/Performance-Benchmark-with-an-Handy-Class.aspx</guid>
            <pubDate>Thu, 21 Jun 2007 17:47:30 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/113369.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/06/21/Performance-Benchmark-with-an-Handy-Class.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/113369.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/113369.aspx</trackback:ping>
        </item>
        <item>
            <title>Asp.net Ajax Grid and Pager Control</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/05/31/Asp.net-Ajax-Grid-and-Pager-Control.aspx</link>
            <description>&lt;p&gt;My recent article "&lt;a href="http://dotnetslackers.com/articles/ajax/ASPNETAjaxGridAndPager.aspx" target="_blank"&gt;ASP.NET Ajax Grid and Pager&lt;/a&gt;" has been published in &lt;a href="http://www.dotnetslackers.com" target="_blank"&gt;DotNetSlackers.com&lt;/a&gt;. A fully designer supported Ajax Control, which mimics the GridView Control in client side. Please vote for me if you find it useful.&lt;/p&gt; &lt;p&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://dotnetslackers.com/articles/ajax/ASPNETAjaxGridAndPager.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://dotnetslackers.com/articles/ajax/ASPNETAjaxGridAndPager.aspx" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112875"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112875" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/112875.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/05/31/Asp.net-Ajax-Grid-and-Pager-Control.aspx</guid>
            <pubDate>Thu, 31 May 2007 09:15:35 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/112875.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/05/31/Asp.net-Ajax-Grid-and-Pager-Control.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/112875.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/112875.aspx</trackback:ping>
        </item>
        <item>
            <title>Secure Cookie</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx</link>
            <description>&lt;p&gt;This my second post of almost same topic asp.net lacking. This time it is Cookie. Still Asp.net has the lacking of creating encrypted cookie. Here is another handy class which generates encrypted cookie.&lt;/p&gt; &lt;p&gt;Usage:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;//Writing Cookie&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;SecureCookie&lt;/span&gt;.Set(Response, &lt;span style="color: rgb(163,21,21)"&gt;"Key1"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"Value1"&lt;/span&gt;, &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.Now.AddDays(1));&lt;br /&gt;&lt;span style="color: rgb(43,145,175)"&gt;SecureCookie&lt;/span&gt;.Set(Response, &lt;span style="color: rgb(163,21,21)"&gt;"Key1"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"Value1"&lt;/span&gt;); &lt;span style="color: rgb(0,128,0)"&gt;//Overloaded &lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;//Reading Cookie&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key1Value = &lt;span style="color: rgb(43,145,175)"&gt;SecureCookie&lt;/span&gt;.Get(Request, &lt;span style="color: rgb(163,21,21)"&gt;"Key1"&lt;/span&gt;);&lt;/pre&gt;
&lt;p&gt;SecureCookie: &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web.UI;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Diagnostics;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Security.Cryptography;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;sealed&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SecureCookie&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span style="color: rgb(0,128,0)"&gt;//Rijndael Key size is 256 bit or 32 byte, Can also be mentioned in web.config instead of hardcoding&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;readonly&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] Key = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] {45, 236, 171, 7, 85, 6, 41, 34, 216, 14, 78, 156, 78, 3, 103, 154, 9, 150, 65, 54, 226, 95, 68, 79, 159, 36, 246, 57, 177, 107, 116, 8};&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Set(&lt;span style="color: rgb(43,145,175)"&gt;HttpResponse&lt;/span&gt; response,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; value,&lt;br /&gt;    &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt; expire)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(43,145,175)"&gt;HttpCookie&lt;/span&gt; cookie = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;HttpCookie&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlEncode(Encrypt(key)), &lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlEncode(Encrypt(value)));&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((expire != &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.MinValue) &amp;amp;&amp;amp; (expire != &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.MaxValue))&lt;br /&gt;        {&lt;br /&gt;            cookie.Expires = expire;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        response.Cookies.Set(cookie);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Set(&lt;span style="color: rgb(43,145,175)"&gt;HttpResponse&lt;/span&gt; response,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; value)&lt;br /&gt;    {&lt;br /&gt;        Set(response, key, value, &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.MaxValue);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Get(&lt;span style="color: rgb(43,145,175)"&gt;HttpRequest&lt;/span&gt; request, &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(43,145,175)"&gt;HttpCookie&lt;/span&gt; cookie = request.Cookies[&lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlEncode(Encrypt(key))];&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (cookie == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((cookie.Value == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) || (cookie.Value.Length == 0))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; value = &lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlDecode(cookie.Value);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; Decrypt(value);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Encrypt(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; plain)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((plain == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) || (plain.Length == 0))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; crypto = CreateCrypto())&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; System.&lt;span style="color: rgb(43,145,175)"&gt;Convert&lt;/span&gt;.ToBase64String(Read(crypto.CreateEncryptor(), &lt;span style="color: rgb(43,145,175)"&gt;Encoding&lt;/span&gt;.ASCII.GetBytes(plain)));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Decrypt(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; cipher)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((cipher == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) || (cipher.Length == 0))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; crypto = CreateCrypto())&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Encoding&lt;/span&gt;.ASCII.GetString(Read(crypto.CreateDecryptor(), System.&lt;span style="color: rgb(43,145,175)"&gt;Convert&lt;/span&gt;.FromBase64String(cipher)));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; CreateCrypto()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,128,0)"&gt;//Using Rijndael as it is much more secure among the others&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; crypto = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;RijndaelManaged&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;        crypto.Key = Key;&lt;br /&gt;        crypto.IV = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[crypto.IV.Length];&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; crypto;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] Read(&lt;span style="color: rgb(43,145,175)"&gt;ICryptoTransform&lt;/span&gt; transformer,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] data)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;MemoryStream&lt;/span&gt; ms = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;MemoryStream&lt;/span&gt;())&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;CryptoStream&lt;/span&gt; cs = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;CryptoStream&lt;/span&gt;(ms, transformer, &lt;span style="color: rgb(43,145,175)"&gt;CryptoStreamMode&lt;/span&gt;.Write))&lt;br /&gt;            {&lt;br /&gt;                cs.Write(data, 0, data.Length);&lt;br /&gt;                cs.FlushFinalBlock();&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt;  ms.ToArray();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103910"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103910" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/103910.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx</guid>
            <pubDate>Thu, 18 Jan 2007 17:20:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/103910.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx#feedback</comments>
            <slash:comments>8</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/103910.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/103910.aspx</trackback:ping>
        </item>
        <item>
            <title>Secure Url</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/01/18/103875.aspx</link>
            <description>&lt;p&gt;Asp.net 2.0 has been released, but Asp.net still does not have any built-in support for passing querystring in encrypted text. The following class will give you the support to pass querystring in encrypted rather than plain. &lt;/p&gt; &lt;p&gt;Usage: &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;//WebForm1.aspx, From the sender&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;SecureUrl&lt;/span&gt; url = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SecureUrl&lt;/span&gt;(&lt;span style="color: rgb(163,21,21)"&gt;"WebForm2.aspx?Key1=Value1&amp;amp;Key2=Value2"&lt;/span&gt;);&lt;span style="color: rgb(0,128,0)"&gt;// WebForm2.aspx?param=HrxR96wU%2foN8VhElKlT32taPZLQzADf1&lt;br /&gt;&lt;/span&gt;Response.Redirect(url.ToString());&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;//WebForm2.aspx, To Receiver&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;SecureUrl&lt;/span&gt; url = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SecureUrl&lt;/span&gt;(Request.Url.PathAndQuery);&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Key1Value = url[&lt;span style="color: rgb(163,21,21)"&gt;"Key1"&lt;/span&gt;];&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Key2Value = url[&lt;span style="color: rgb(163,21,21)"&gt;"Key2"&lt;/span&gt;];&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;SecureUrl:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Diagnostics;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Collections;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Collections.Specialized;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Security.Cryptography;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;sealed&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SecureUrl&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;const&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; ENCRYPTED_KEY_NAME = &lt;span style="color: rgb(163,21,21)"&gt;"param"&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;const&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; RETURN_URL = &lt;span style="color: rgb(163,21,21)"&gt;"returnUrl"&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;const&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; RETURN_PARAM = &lt;span style="color: rgb(163,21,21)"&gt;"returnParam"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(0,128,0)"&gt;//DES Key size is 64 bit or 8 byte&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;readonly&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] Key = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] {33, 93, 171, 1, 85, 23, 231, 145};&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; _pageUrl = &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;StringDictionary&lt;/span&gt; _queryString = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;StringDictionary&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key]&lt;br /&gt;    {&lt;br /&gt;        [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;get&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (_queryString.ContainsKey(key.ToLower()))&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; _queryString[key];&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;        }&lt;br /&gt;        [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;set&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((&lt;span style="color: rgb(0,0,255)"&gt;value&lt;/span&gt; != &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (&lt;span style="color: rgb(0,0,255)"&gt;value&lt;/span&gt;.Trim().Length &amp;gt; 0))&lt;br /&gt;            {&lt;br /&gt;                _queryString[key.ToLower()] = &lt;span style="color: rgb(0,0,255)"&gt;value&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;else&lt;br /&gt;&lt;/span&gt;            {&lt;br /&gt;                _queryString.Remove(key.ToLower());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; ReturnUrl&lt;br /&gt;    {&lt;br /&gt;        [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;get&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (_queryString.ContainsKey(RETURN_URL))&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; _queryString[RETURN_URL];&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;        }&lt;br /&gt;        [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;set&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((&lt;span style="color: rgb(0,0,255)"&gt;value&lt;/span&gt; != &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (&lt;span style="color: rgb(0,0,255)"&gt;value&lt;/span&gt;.Trim().Length &amp;gt; 0))&lt;br /&gt;            {&lt;br /&gt;                _queryString[RETURN_URL] = &lt;span style="color: rgb(0,0,255)"&gt;value&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;else&lt;br /&gt;&lt;/span&gt;            {&lt;br /&gt;                _queryString.Remove(RETURN_URL);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; ReturnParameters&lt;br /&gt;    {&lt;br /&gt;        [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;get&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (_queryString.ContainsKey(RETURN_PARAM))&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; _queryString[RETURN_PARAM];&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;        }&lt;br /&gt;        [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;set&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((&lt;span style="color: rgb(0,0,255)"&gt;value&lt;/span&gt; != &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (&lt;span style="color: rgb(0,0,255)"&gt;value&lt;/span&gt;.Trim().Length &amp;gt; 0))&lt;br /&gt;            {&lt;br /&gt;                _queryString[RETURN_PARAM] = &lt;span style="color: rgb(0,0,255)"&gt;value&lt;/span&gt;;&lt;br /&gt;                &lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;else&lt;br /&gt;&lt;/span&gt;            {&lt;br /&gt;                _queryString.Remove(RETURN_PARAM);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; SecureUrl(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; fullUrl)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (fullUrl.IndexOf(&lt;span style="color: rgb(163,21,21)"&gt;'?'&lt;/span&gt;) &amp;gt; 0)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;[] urlAndQueryString = fullUrl.Split(&lt;span style="color: rgb(163,21,21)"&gt;'?'&lt;/span&gt;);&lt;br /&gt;            _pageUrl = urlAndQueryString[0];&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (urlAndQueryString.Length &amp;gt; 1)&lt;br /&gt;            {&lt;br /&gt;                Parse(urlAndQueryString[1]);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;else&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            _pageUrl = fullUrl;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; SecureUrl(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; url, &lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; queryString)&lt;br /&gt;    {&lt;br /&gt;        _pageUrl = url;&lt;br /&gt;        Parse(queryString);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Clear()&lt;br /&gt;    {&lt;br /&gt;        _queryString.Clear();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;bool&lt;/span&gt; Contains(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; _queryString.ContainsKey(key.ToLower());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Remove(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key)&lt;br /&gt;    {&lt;br /&gt;        _queryString.Remove(key);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;override&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; ToString()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; ToString(&lt;span style="color: rgb(0,0,255)"&gt;false&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; ToString(&lt;span style="color: rgb(0,0,255)"&gt;bool&lt;/span&gt; unicode)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(43,145,175)"&gt;StringBuilder&lt;/span&gt; queryString = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;foreach&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;DictionaryEntry&lt;/span&gt; entry &lt;span style="color: rgb(0,0,255)"&gt;in&lt;/span&gt; _queryString)&lt;br /&gt;        {&lt;br /&gt;            queryString.Append(entry.Key.ToString().ToLower());&lt;br /&gt;            queryString.Append(&lt;span style="color: rgb(163,21,21)"&gt;'='&lt;/span&gt;);&lt;br /&gt;            queryString.Append(&lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlEncode(entry.Value.ToString()));&lt;br /&gt;            queryString.Append(&lt;span style="color: rgb(163,21,21)"&gt;'&amp;amp;'&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (queryString.Length &amp;gt; 0)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,128,0)"&gt;//Remove the last &amp;amp;&lt;br /&gt;&lt;/span&gt;            queryString.Remove(queryString.Length - 1, 1);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; encryptedQuery = Encrypt(queryString.ToString());&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; encodedQuery = &lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlEncode(encryptedQuery);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (unicode)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,128,0)"&gt;//Required if we are passing it to JavaScript&lt;br /&gt;&lt;/span&gt;            encodedQuery = &lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlEncodeUnicode(encodedQuery);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; result = &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (encodedQuery.Length &amp;gt; 0)&lt;br /&gt;        {&lt;br /&gt;            result = _pageUrl + &lt;span style="color: rgb(163,21,21)"&gt;"?"&lt;/span&gt; + ENCRYPTED_KEY_NAME + &lt;span style="color: rgb(163,21,21)"&gt;"="&lt;/span&gt; + encodedQuery;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;else&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            result = _pageUrl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Parse(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; queryString)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;[] pairs = queryString.Split(&lt;span style="color: rgb(163,21,21)"&gt;'&amp;amp;'&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((pairs != &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (pairs.Length &amp;gt; 0))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;for&lt;/span&gt;(&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; i = 0; i &amp;lt; pairs.Length; i++)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;[] pair = pairs[i].Split(&lt;span style="color: rgb(163,21,21)"&gt;'='&lt;/span&gt;);&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key = pair[0];&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; value = pair[1];&lt;br /&gt;&lt;br /&gt;                value = &lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlDecode(value);&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.Compare(key, ENCRYPTED_KEY_NAME, &lt;span style="color: rgb(0,0,255)"&gt;true&lt;/span&gt;) == 0)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (value.Length &amp;gt; 0)&lt;br /&gt;                    {&lt;br /&gt;                        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; decryptedString = &lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlDecode(Decrypt(value));&lt;br /&gt;&lt;br /&gt;                        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;[] keyAndValues = decryptedString.Split(&lt;span style="color: rgb(163,21,21)"&gt;'&amp;amp;'&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;                        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((keyAndValues != &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (keyAndValues.Length &amp;gt; 0))&lt;br /&gt;                        {&lt;br /&gt;                            &lt;span style="color: rgb(0,0,255)"&gt;for&lt;/span&gt;(&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; j = 0; j &amp;lt; keyAndValues.Length; j++)&lt;br /&gt;                            {&lt;br /&gt;                                &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;[] keyAndValue = keyAndValues[j].Split(&lt;span style="color: rgb(163,21,21)"&gt;'='&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;                                &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((keyAndValue != &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (keyAndValue.Length == 2))&lt;br /&gt;                                {&lt;br /&gt;                                    _queryString.Add(keyAndValue[0].ToLower(), keyAndValue[1]);&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;else&lt;br /&gt;&lt;/span&gt;                {&lt;br /&gt;                    _queryString.Add(key.ToLower(), value);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Encrypt(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; plain)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((plain == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) || (plain.Length == 0))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; crypto = CreateCrypto())&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; System.&lt;span style="color: rgb(43,145,175)"&gt;Convert&lt;/span&gt;.ToBase64String(Read(crypto.CreateEncryptor(), &lt;span style="color: rgb(43,145,175)"&gt;Encoding&lt;/span&gt;.ASCII.GetBytes(plain)));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Decrypt(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; cipher)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((cipher == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) || (cipher.Length == 0))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; crypto = CreateCrypto())&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Encoding&lt;/span&gt;.ASCII.GetString(Read(crypto.CreateDecryptor(), System.&lt;span style="color: rgb(43,145,175)"&gt;Convert&lt;/span&gt;.FromBase64String(cipher)));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; CreateCrypto()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,128,0)"&gt;//Using DES as it is the fastest among the others&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; crypto = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;DESCryptoServiceProvider&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;        crypto.Key = Key;&lt;br /&gt;        crypto.IV = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[crypto.IV.Length];&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; crypto;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] Read(&lt;span style="color: rgb(43,145,175)"&gt;ICryptoTransform&lt;/span&gt; transformer,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] data)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;MemoryStream&lt;/span&gt; ms = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;MemoryStream&lt;/span&gt;())&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;CryptoStream&lt;/span&gt; cs = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;CryptoStream&lt;/span&gt;(ms, transformer, &lt;span style="color: rgb(43,145,175)"&gt;CryptoStreamMode&lt;/span&gt;.Write))&lt;br /&gt;            {&lt;br /&gt;                cs.Write(data, 0, data.Length);&lt;br /&gt;                cs.FlushFinalBlock();&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt;  ms.ToArray();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/rashid/archive/2007/01/18/103875.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/rashid/archive/2007/01/18/103875.aspx" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103875"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103875" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/103875.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/01/18/103875.aspx</guid>
            <pubDate>Thu, 18 Jan 2007 11:17:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/103875.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/01/18/103875.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/103875.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/103875.aspx</trackback:ping>
        </item>
        <item>
            <title>My First Article</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/01/14/103526.aspx</link>
            <description>&lt;p&gt;Recently I wrote an article &lt;a href="http://www.codeproject.com/useritems/SecureDataExchange.asp" target="_blank"&gt;"How to exchange data securely with a WebService without HTTPS/SSL"&lt;/a&gt; in &lt;a href="http://www.codeproject.com" target="_blank"&gt;codeproject&lt;/a&gt;. If Cryptography, Public/Private Key, Digital Signature and Web Service are one of your interest, I strongly recommend to read it.&lt;/p&gt; &lt;p&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://www.codeproject.com/useritems/SecureDataExchange.asp"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.codeproject.com/useritems/SecureDataExchange.asp" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103526"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103526" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/103526.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/01/14/103526.aspx</guid>
            <pubDate>Sat, 13 Jan 2007 18:14:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/103526.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/01/14/103526.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/103526.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/103526.aspx</trackback:ping>
        </item>
        <item>
            <title>Writing Code against the External Service</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/01/13/103514.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt;
When consuming any external service, don't expect the external service developer is as much smart as you are. Recently I have faced an issue when integrating with Amazon S3 that they failed to serve the data on first request, but on the consequent request they are able to return the data. So I did a little tweak in my code, instead of calling the service once, I am retrying up to 3 times. If the retry also fails the regular code block executes:
&lt;pre&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; MAX_TRY = 3;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; tryCount = 1;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;[] result = &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(0, 128, 128);"&gt;AmazonS3&lt;/span&gt; proxy = CreateServiceProxy())&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: rgb(0, 0, 255);"&gt;while&lt;/span&gt;(((result == &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;) || (result.Length == 0)) &amp;amp;&amp;amp; (tryCount &amp;lt; MAX_TRY))&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            result = proxy.GetObject(_bucketName, key, &lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;, _accessKeyID, timestamp, &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;, signature, &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;).Data;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            tryCount += 1;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (tryCount == MAX_TRY)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: rgb(0, 0, 255);"&gt;throw&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; result;&lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103514"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103514" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/103514.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/01/13/103514.aspx</guid>
            <pubDate>Sat, 13 Jan 2007 17:18:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/103514.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/01/13/103514.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/103514.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/103514.aspx</trackback:ping>
        </item>
    </channel>
</rss>