<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Asp.net with Muhanad YOUNIS</title><link>https://weblogs.asp.net:443/muhanadyounis/</link><description></description><item><title>Call a Function With Retry Using Generics</title><link>https://weblogs.asp.net:443/muhanadyounis/call-a-function-with-retry-using-generics</link><description>&lt;br /&gt;
What if you like to call a web service and retry the call again until response? let me show you a nice way to call a function with retry until you retrieve what ever is needed from the function. This could be achieved by using generics especially by extending the Func&amp;lt;T&amp;gt; delegate; check the code below;&lt;br /&gt;
&lt;d id="codeSnippetWrapper" iv="" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; height: 302px; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt; &lt;d id="codeSnippet" iv="" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;/d&gt;&lt;/d&gt;&lt;br /&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; MyExtensions&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;         &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; T WithRetry&amp;lt;T&amp;gt;(&lt;span style="color: blue;"&gt;this&lt;/span&gt; Func&amp;lt;T&amp;gt; action)&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;             var result = &lt;span style="color: blue;"&gt;default&lt;/span&gt;(T);&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; retryCount = 0;&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;             var succesful = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;             &lt;span style="color: blue;"&gt;do&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;             {&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;                 &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;                 {&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;                     result = action();&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;                     succesful = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;                 &lt;span style="color: blue;"&gt;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt;                 {&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt;                     retryCount++;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;             } &lt;span style="color: blue;"&gt;while&lt;/span&gt; (retryCount &amp;lt; 3 &amp;amp;&amp;amp; !succesful);&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;             &lt;span style="color: blue;"&gt;return&lt;/span&gt; result;&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt;     }&lt;/pre&gt;
&lt;br /&gt;In the code you can see that we extended the Func that will return an object with type T. This function will keep trying for 3 times but you might change it to keep it trying until it achieve the goal. and here is how to use it &lt;br /&gt;
&lt;br /&gt;&lt;d id="codeSnippetWrapper" iv="" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;&lt;d id="codeSnippet" iv="" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; MyService ser = &lt;span style="color: blue;"&gt;new&lt;/span&gt; MyService();&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; Func&amp;lt;MyService.contentSetList&amp;gt; fCon = () =&amp;gt; ser.get(testlist.ToArray&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;());&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; var con = fCon.WithRetry();&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; &lt;span style="color: blue;"&gt;return&lt;/span&gt; con;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;hope this helps.&lt;br /&gt;
&lt;br /&gt;References: the original code belongs to &lt;a href="http://www.pluralsight-training.net/microsoft/Authors/Details?handle=scott-allen"&gt;Scott Allen&lt;/a&gt; at his course &lt;span style="font-size: xx-small; font-weight: normal;"&gt;C# Fundamentals - Part 2 @ &lt;a href="http://www.pluralsight-training.net/"&gt;http://www.pluralsight-training.net&lt;/a&gt;. thanks Scott.&lt;/span&gt;&lt;br /&gt;
  &lt;/d&gt;&lt;/d&gt;</description><pubDate>Sun, 22 Jan 2012 15:28:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/call-a-function-with-retry-using-generics</guid><category>.NET</category><category>.NET 4.0</category><category>C#</category><category>Functions</category><category>Generics</category></item><item><title>My Google+ Profile Page</title><link>https://weblogs.asp.net:443/muhanadyounis/my-google-profile-page</link><description>You may follow me from Google+ too
https://plus.google.com/u/0/107926756771775811805/posts?hl=en
</description><pubDate>Mon, 17 Oct 2011 07:12:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/my-google-profile-page</guid><category>Google+</category></item><item><title>AppFabric</title><link>https://weblogs.asp.net:443/muhanadyounis/appfabric</link><description>&lt;p&gt; A nice Microsoft Windows Server AppFabric introducing slide show &lt;a title="http://bit.ly/afNVHi" href="http://bit.ly/afNVHi"&gt;http://bit.ly/afNVHi&lt;/a&gt; . do not hesitate to ask me about appfabric and i’ll try to help you as i can to install and operate it.&lt;/p&gt;</description><pubDate>Fri, 02 Jul 2010 11:17:45 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/appfabric</guid><category>.NET</category><category>.NET 4.0</category><category>Appfabric</category></item><item><title>C# 4.0 IN NUTSHELL</title><link>https://weblogs.asp.net:443/muhanadyounis/c-4-0-in-nutshell</link><description>&lt;!-- AddThis Button BEGIN --&gt;  &lt;div class="addthis_toolbox addthis_default_style"&gt;&lt;a class="addthis_button_compact at300m" href="http://www.addthis.com/bookmark.php?v=250&amp;amp;username=xa-4bb3705c3febc00e" conf="[object Object]" share="[object Object]" ost="1"&gt;&lt;span class="at300bs at15t_compact"&gt;&lt;/span&gt;Share&lt;/a&gt; &lt;span class="addthis_separator"&gt;|&lt;/span&gt; &lt;a class="addthis_button_facebook at300b" title="Send to Facebook" href="//www.addthis.com/bookmark.php?pub=xa-4bb3705c3febc00e&amp;amp;v=250&amp;amp;source=tbx-250&amp;amp;tt=0&amp;amp;s=facebook&amp;amp;url=file%3A%2F%2F%2FC%3A%2FUsers%2Fmuhanad.younis%2FAppData%2FLocal%2FTemp%2FWindowsLiveWriter1286139640%2F2102400AE8DC%2Findex.htm&amp;amp;title=Muhanad%20YOUNIS&amp;amp;content=&amp;amp;lng=tr" target="_blank" conf="[object Object]" share="[object Object]" ost="1" at_titled="1"&gt;&lt;span class="at300bs at15t_facebook"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="addthis_button_myspace at300b" title="Send to MySpace" href="//www.addthis.com/bookmark.php?pub=xa-4bb3705c3febc00e&amp;amp;v=250&amp;amp;source=tbx-250&amp;amp;tt=0&amp;amp;s=myspace&amp;amp;url=file%3A%2F%2F%2FC%3A%2FUsers%2Fmuhanad.younis%2FAppData%2FLocal%2FTemp%2FWindowsLiveWriter1286139640%2F2102400AE8DC%2Findex.htm&amp;amp;title=Muhanad%20YOUNIS&amp;amp;content=&amp;amp;lng=tr" target="_blank" conf="[object Object]" share="[object Object]" ost="1" at_titled="1"&gt;&lt;span class="at300bs at15t_myspace"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="addthis_button_google at300b" title="Send to Google" href="//www.addthis.com/bookmark.php?pub=xa-4bb3705c3febc00e&amp;amp;v=250&amp;amp;source=tbx-250&amp;amp;tt=0&amp;amp;s=google&amp;amp;url=file%3A%2F%2F%2FC%3A%2FUsers%2Fmuhanad.younis%2FAppData%2FLocal%2FTemp%2FWindowsLiveWriter1286139640%2F2102400AE8DC%2Findex.htm&amp;amp;title=Muhanad%20YOUNIS&amp;amp;content=&amp;amp;lng=tr" target="_blank" conf="[object Object]" share="[object Object]" ost="1" at_titled="1"&gt;&lt;span class="at300bs at15t_google"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="addthis_button_twitter at300b" title="Tweet This" href="//www.addthis.com/bookmark.php?pub=xa-4bb3705c3febc00e&amp;amp;v=250&amp;amp;source=tbx-250&amp;amp;tt=0&amp;amp;s=twitter&amp;amp;url=file%3A%2F%2F%2FC%3A%2FUsers%2Fmuhanad.younis%2FAppData%2FLocal%2FTemp%2FWindowsLiveWriter1286139640%2F2102400AE8DC%2Findex.htm&amp;amp;title=Muhanad%20YOUNIS&amp;amp;content=&amp;amp;lng=tr" target="_blank" conf="[object Object]" share="[object Object]" ost="1" at_titled="1"&gt;&lt;span class="at300bs at15t_twitter"&gt;&lt;/span&gt;&lt;/a&gt;    &lt;div class="atclear"&gt;&lt;/div&gt; &lt;/div&gt; &lt;script src="http://s7.addthis.com/js/250/addthis_widget.js#username=xa-4bb3705c3febc00e" type="text/javascript"&gt;&lt;/script&gt;&lt;!-- AddThis Button END --&gt;  &lt;p&gt;I found this book very useful and a must-read. The book is really a good reference for C# in general and C# 4.0. Thanks Albahari&lt;/p&gt;  &lt;p&gt;&lt;a title="C# 4.0 IN NUTSHELL" href="http://www.albahari.com/nutshell/ " rel="nofollow" target="_blank"&gt;C# 4.0 IN NUTSHELL&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 02 Apr 2010 08:54:25 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/c-4-0-in-nutshell</guid><category>Book</category><category>C#</category></item><item><title>How to Count Online Users While Using Session State Server (tutorial)</title><link>https://weblogs.asp.net:443/muhanadyounis/how-to-count-online-users-while-using-state-server-tutorial</link><description>&lt;!-- AddThis Button BEGIN --&gt;
&lt;div class="addthis_toolbox addthis_default_style"&gt;
&lt;a href="http://www.addthis.com/bookmark.php?v=250&amp;amp;username=xa-4bb3705c3febc00e" class="addthis_button_compact"&gt;Share&lt;/a&gt;
&lt;span class="addthis_separator"&gt;|&lt;/span&gt;
&lt;a class="addthis_button_facebook"&gt;&lt;/a&gt;
&lt;a class="addthis_button_myspace"&gt;&lt;/a&gt;
&lt;a class="addthis_button_google"&gt;&lt;/a&gt;
&lt;a class="addthis_button_twitter"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;script src="http://s7.addthis.com/js/250/addthis_widget.js#username=xa-4bb3705c3febc00e" type="text/javascript"&gt;&lt;/script&gt;
&lt;!-- AddThis Button END --&gt;

&lt;p&gt;Here in this post I’ll show you how you to count online users while using state server or SQL server for session state. When you use state server you are not able to catch the session_end event on the global.asax, there for you may not be able to drop the user from you count!. I’ll show you a way to count users. the tutorial will be split&amp;nbsp; into 3 parts;&lt;/p&gt;
  
&lt;ol&gt;   
&lt;li&gt;Class creation. &lt;/li&gt;
    
&lt;li&gt;Web page side &lt;/li&gt;
    
&lt;li&gt;&lt;a href="http://weblogs.asp.net/muhanadyounis/archive/2009/01/12/global-timer-background-timer.aspx" title="application timer" mce_href="http://weblogs.asp.net/muhanadyounis/archive/2009/01/12/global-timer-background-timer.aspx" rel="tag" target="_blank"&gt;Global Timer&lt;/a&gt; side &lt;/li&gt;
 &lt;/ol&gt;
  
&lt;p&gt;Part 1:&lt;/p&gt;
  
&lt;blockquote&gt;   
&lt;p&gt;Create a Class named SessionChecker as below;&lt;/p&gt;
    
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
    &lt;div style="padding: 0px; margin: 0px; display: inline; float: none;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a0a78336-101f-41fe-ada8-0dd09e4d046c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: 1px solid rgb(0, 0, 128); color: rgb(0, 0, 0); font-family: 'Courier New',Courier,Monospace; font-size: 10pt;"&gt; &lt;div style="background: none repeat scroll 0% 0% rgb(0, 0, 128); color: rgb(255, 255, 255); font-family: Verdana,Tahoma,Arial,sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: none repeat scroll 0% 0% rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt; 
&lt;ol style="background: none repeat scroll 0% 0% rgb(255, 255, 255); margin: 0pt 0pt 0pt 2.5em; padding: 0pt 0pt 0pt 5px;"&gt; 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Collections;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Diagnostics;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Web;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&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;SessionChecker&lt;/span&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;&amp;gt; dictSession;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;&amp;gt; CreatSessionDictionary()&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; objToLock = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Object&lt;/span&gt;();&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; dictControl = &lt;span style="color: rgb(43, 145, 175);"&gt;HttpRuntime&lt;/span&gt;.Cache[&lt;span style="color: rgb(163, 21, 21);"&gt;"UsersCountSession"&lt;/span&gt;] &lt;span style="color: rgb(0, 0, 255);"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;&amp;gt;;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;/span&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (dictControl == &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;lock&lt;/span&gt; (objToLock)&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dictSession = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;&amp;gt;();&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;HttpRuntime&lt;/span&gt;.Cache.Insert(&lt;span style="color: rgb(163, 21, 21);"&gt;"UsersCountSession"&lt;/span&gt;, dictSession, &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;.Now.AddMinutes(10100),&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Web.Caching.&lt;span style="color: rgb(43, 145, 175);"&gt;Cache&lt;/span&gt;.NoSlidingExpiration,&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Web.Caching.&lt;span style="color: rgb(43, 145, 175);"&gt;CacheItemPriority&lt;/span&gt;.NotRemovable, &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;);&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;Exception&lt;/span&gt; ex)&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;EventLog&lt;/span&gt;.WriteEntry(&lt;span style="color: rgb(163, 21, 21);"&gt;"Application"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"exception at CreatSessionDictionary: "&lt;/span&gt; + ex.Message, &lt;span style="color: rgb(43, 145, 175);"&gt;EventLogEntryType&lt;/span&gt;.Error);&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;HttpRuntime&lt;/span&gt;.Cache[&lt;span style="color: rgb(163, 21, 21);"&gt;"UsersCountSession"&lt;/span&gt;] &lt;span style="color: rgb(0, 0, 255);"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;&amp;gt;;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; UpadteInsertSessionDictionary(&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; pUserId)&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;/span&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; objElseLock = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt;();&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; dic = &lt;span style="color: rgb(43, 145, 175);"&gt;HttpRuntime&lt;/span&gt;.Cache[&lt;span style="color: rgb(163, 21, 21);"&gt;"UsersCountSession"&lt;/span&gt;] &lt;span style="color: rgb(0, 0, 255);"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;&amp;gt;;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (dic != &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (dic.ContainsKey(pUserId))&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; ((&lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;.Now - dic[pUserId]).Minutes &amp;gt; 2) &lt;span style="color: rgb(0, 128, 0);"&gt;// to reduce the lock load&lt;/span&gt;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;lock&lt;/span&gt; (((&lt;span style="color: rgb(43, 145, 175);"&gt;IDictionary&lt;/span&gt;)dic).SyncRoot)&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dic[pUserId] = &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;.Now.AddMinutes(1);&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;// insert &lt;/span&gt;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;lock&lt;/span&gt; (objElseLock)&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dic.Add(pUserId, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;.Now.AddMinutes(1));&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;HttpRuntime&lt;/span&gt;.Cache[&lt;span style="color: rgb(163, 21, 21);"&gt;"UsersCountSession"&lt;/span&gt;] = dic;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CreatSessionDictionary();&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;Exception&lt;/span&gt; ex)&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;EventLog&lt;/span&gt;.WriteEntry(&lt;span style="color: rgb(163, 21, 21);"&gt;"Application"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"exception at UpadteInsertSessionDictionary: "&lt;/span&gt; + ex.Message, &lt;span style="color: rgb(43, 145, 175);"&gt;EventLogEntryType&lt;/span&gt;.Error);&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;int&lt;/span&gt; GetOnlineUsersCount()&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt; != &lt;span style="color: rgb(43, 145, 175);"&gt;HttpRuntime&lt;/span&gt;.Cache[&lt;span style="color: rgb(163, 21, 21);"&gt;"UsersCountSession"&lt;/span&gt;])&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;HttpRuntime&lt;/span&gt;.Cache[&lt;span style="color: rgb(163, 21, 21);"&gt;"UsersCountSession"&lt;/span&gt;] &lt;span style="color: rgb(0, 0, 255);"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;&amp;gt;).Count;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; 0;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;}&lt;/li&gt;
 &lt;/ol&gt;
 &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;    
&lt;p&gt;Here is the explanation of the class;&lt;/p&gt;
    
&lt;ul&gt;     
&lt;li&gt;all methods in the class must be &lt;b&gt;&lt;u&gt;Static&lt;/u&gt;&lt;/b&gt;. &lt;/li&gt;
      
&lt;li&gt;at line 9 create a dictionary that will hold the client Id and the login time of that client. ( here in my case i know that each user is registered in my Db and have got an ID, but you may use session ID for registered and anonymous users.) &lt;/li&gt;
      
&lt;li&gt;at line 11 here is the method that will be entered once when the application started . &lt;/li&gt;
      
&lt;li&gt;line 14 check if the dictionary object is available in the cache object or not. if its not available, a dictionary object is created and added to cache.( the cache here is 1 week cache, you may use unlimited cache).&amp;nbsp; You can see that there is a lock on dictionary create, that is to create just &lt;u&gt;one instance&lt;/u&gt; of the dictionary if dictControl is null. &lt;/li&gt;
      
&lt;li&gt;the second method UpadteInsertSessionDictionary is used to insert and update user. This method can be divided in to two parts;        &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1- Update Part : this part starts from line 44. this part check if the dictionary contains the user id or not, if its true then the next step is&amp;nbsp; check the datetime of the user, i use this step to reduce the lock over head, because when the object is locked one user at the time can enter it. you may ask “why we should lock the dictionary object?” this is because dictionary is &lt;a href="http://aspalliance.com/1724_Thread_Safety_through_SelfLoading_Collections.2" title="Thread Safety through Self-Loading Collections" mce_href="http://aspalliance.com/1724_Thread_Safety_through_SelfLoading_Collections.2" target="_blank"&gt;unsafe object in threading&lt;/a&gt;. So if DateTime.now - user time &amp;gt; 2 min the process enters the lock and updates the user time; which means that user is still online and navigating.(I’ll show you later how and where to implement and call this class on web page part) .         &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2- Insert Part: if the dictionary does not contain the user id; the user id inserted into the dictionary the cache must be updated after that. &lt;/li&gt;
      
&lt;li&gt;the methods GetOnlineUsersCount will return the user count any time you call it if the cache object is not null, otherwise user count will be 0; &lt;/li&gt;
   &lt;/ul&gt;
    
&lt;p&gt;Part 2: &lt;/p&gt;
    
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Web site part;&lt;/p&gt;
    
&lt;ul&gt;     
&lt;li&gt;Inherit your web pages from one base page class like below; &lt;/li&gt;
   &lt;/ul&gt;
    
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
    &lt;div style="padding: 0px; margin: 0px; display: inline; float: none;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e0afb08f-1304-492b-87b5-9e7ec3c72cfc" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: 1px solid rgb(0, 0, 128); color: rgb(0, 0, 0); font-family: 'Courier New',Courier,Monospace; font-size: 10pt;"&gt; &lt;div style="background: none repeat scroll 0% 0% rgb(0, 0, 128); color: rgb(255, 255, 255); font-family: Verdana,Tahoma,Arial,sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: none repeat scroll 0% 0% rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt; 
&lt;ol style="background: none repeat scroll 0% 0% rgb(255, 255, 255); margin: 0pt 0pt 0pt 2.5em; padding: 0pt 0pt 0pt 5px;"&gt; 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Linq;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Web;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Web.UI;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; Summary description for WebBasepage&lt;/span&gt;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&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;WebBasepage&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;Page&lt;/span&gt;&lt;/li&gt;
 
&lt;li&gt;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&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;void&lt;/span&gt; OnPreInit(&lt;span style="color: rgb(43, 145, 175);"&gt;EventArgs&lt;/span&gt; e)&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;base&lt;/span&gt;.OnPreInit(e);&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&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;void&lt;/span&gt; OnLoad(&lt;span style="color: rgb(43, 145, 175);"&gt;EventArgs&lt;/span&gt; e)&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;SessionChecker&lt;/span&gt;.UpadteInsertSessionDictionary(1234);&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;base&lt;/span&gt;.OnLoad(e);&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;}&lt;/li&gt;
 &lt;/ol&gt;
 &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;    
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
    
&lt;ul&gt;     
&lt;li&gt;in line 18 call you static method UpadteInsertSessionDictionary and pass the user id as parameter. &lt;/li&gt;
      
&lt;li&gt;in this way you registered your user to the dictionary in cache. &lt;/li&gt;
   &lt;/ul&gt;
    
&lt;p&gt;Part 3;&lt;/p&gt;
    
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://weblogs.asp.net/muhanadyounis/archive/2009/01/12/global-timer-background-timer.aspx" title="application timer" mce_href="http://weblogs.asp.net/muhanadyounis/archive/2009/01/12/global-timer-background-timer.aspx" rel="tag" target="_blank"&gt;Global Timer&lt;/a&gt; part is the most important part in this operation; you may check how to create the time from &lt;a href="http://weblogs.asp.net/muhanadyounis/archive/2009/01/12/global-timer-background-timer.aspx" title="application timer" mce_href="http://weblogs.asp.net/muhanadyounis/archive/2009/01/12/global-timer-background-timer.aspx" target="_blank"&gt;here&lt;/a&gt;, but here I’ll show you how to use the timer methods to continue the user count process.&lt;/p&gt;
    
&lt;p&gt;the time class should be like this;&lt;/p&gt;
    &lt;div style="padding: 0px; margin: 0px; display: inline; float: none;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6f28b1ac-f291-4816-bc7c-c4a8a3d49bef" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: 1px solid rgb(0, 0, 128); color: rgb(0, 0, 0); font-family: 'Courier New',Courier,Monospace; font-size: 10pt;"&gt; &lt;div style="background: none repeat scroll 0% 0% rgb(0, 0, 128); color: rgb(255, 255, 255); font-family: Verdana,Tahoma,Arial,sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: none repeat scroll 0% 0% rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt; 
&lt;ol style="background: none repeat scroll 0% 0% rgb(255, 255, 255); margin: 0pt 0pt 0pt 2.5em; padding: 0pt 0pt 0pt 5px;"&gt; 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Configuration;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Diagnostics;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Linq;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Threading;&lt;/li&gt;
 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Web;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&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;GlobalTimer&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;IDisposable&lt;/span&gt;&lt;/li&gt;
 
&lt;li&gt;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;Timer&lt;/span&gt; timer;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;int&lt;/span&gt; interval = 5 * 60000;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt; &lt;br&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; StartGlobalTimer()&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt; == timer)&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;SessionChecker&lt;/span&gt;.CreatSessionDictionary();&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timer = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Timer&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;TimerCallback&lt;/span&gt;(DropUsers), &lt;span style="color: rgb(43, 145, 175);"&gt;HttpContext&lt;/span&gt;.Current, 0, interval);&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;void&lt;/span&gt; DropUsers(&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; sender)&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;HttpContext&lt;/span&gt; context = (&lt;span style="color: rgb(43, 145, 175);"&gt;HttpContext&lt;/span&gt;)sender;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; dict = &lt;span style="color: rgb(43, 145, 175);"&gt;HttpRuntime&lt;/span&gt;.Cache[&lt;span style="color: rgb(163, 21, 21);"&gt;"UsersCountSession"&lt;/span&gt;] &lt;span style="color: rgb(0, 0, 255);"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;&amp;gt;;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (dict != &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (dict.Count &amp;gt; 0) &lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;/span&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; q = (&lt;span style="color: rgb(0, 0, 255);"&gt;from&lt;/span&gt; p &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; dict.AsQueryable()&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;where&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;.Now - p.Value).Minutes &amp;gt;= 25&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;select&lt;/span&gt; p).ToList();&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (q.Count &amp;gt; 20)&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;q.ForEach(p =&amp;gt; dict.Remove(p.Key));&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;HttpRuntime&lt;/span&gt;.Cache[&lt;span style="color: rgb(163, 21, 21);"&gt;"UsersCountSession"&lt;/span&gt;] = dict;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;Exception&lt;/span&gt; ex)&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;EventLog&lt;/span&gt;.WriteEntry(&lt;span style="color: rgb(163, 21, 21);"&gt;"Application"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"exception at DropUsers: "&lt;/span&gt; + ex.Message, &lt;span style="color: rgb(43, 145, 175);"&gt;EventLogEntryType&lt;/span&gt;.Error);&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;SessionChecker&lt;/span&gt;.CreatSessionDictionary(); &lt;span style="color: rgb(0, 128, 0);"&gt;// for some resone if the cache is not filled.&lt;/span&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;#region&lt;/span&gt; IDisposable Members&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; Dispose()&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timer = &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;#endregion&lt;/span&gt;&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt;}&lt;/li&gt;
 &lt;/ol&gt;
 &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;ul&gt;   
&lt;li&gt;add this line to your global.asax at the application_start method      &lt;div style="padding: 0px; margin: 0px; display: inline; float: none;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e9f592bd-8dc3-41e2-9512-60837217d7b5" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: 1px solid rgb(0, 0, 128); color: rgb(0, 0, 0); font-family: 'Courier New',Courier,Monospace; font-size: 10pt;"&gt; &lt;div style="background: none repeat scroll 0% 0% rgb(0, 0, 128); color: rgb(255, 255, 255); font-family: Verdana,Tahoma,Arial,sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: none repeat scroll 0% 0% rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt; 
&lt;ol style="background: none repeat scroll 0% 0% rgb(255, 255, 255); margin: 0pt 0pt 0pt 2em; padding: 0pt 0pt 0pt 5px;"&gt; 
&lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Application_Start(&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(43, 145, 175);"&gt;EventArgs&lt;/span&gt; e) &lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;{&lt;/li&gt;
 
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(43, 145, 175);"&gt;GlobalTimer&lt;/span&gt;.StartGlobalTimer();&lt;/li&gt;
 
&lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;
 
&lt;li&gt;}&lt;/li&gt;
 &lt;/ol&gt;
 &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;      &lt;br&gt;in is way the timer will be started once as soon as the application start to work and well never stop!. Please read &lt;a href="http://weblogs.asp.net/muhanadyounis/archive/2009/01/12/global-timer-background-timer.aspx" title="application timer" mce_href="http://weblogs.asp.net/muhanadyounis/archive/2009/01/12/global-timer-background-timer.aspx" rel="tag" target="_blank"&gt;Global Timer&lt;/a&gt; for more information about timer exceptions and IIS recycle.&lt;/li&gt;
 &lt;/ul&gt;
  
&lt;ul&gt;   
&lt;li&gt;Now the DropUsers method that is hooked with the timer tick event do this;      &lt;br&gt;checks if the cache is not null and the dictionary user count is bigger then 0, after that make a select statement to collect the users that datetime period is bigger then 25 minutes (which means that user did not navigate any page for more then 25 minutes). &lt;/li&gt;
    
&lt;li&gt;after collecting inactive users; we drop them from the dictionary and reinsert dictionary to cache. &lt;/li&gt;
    
&lt;li&gt;any exception could happen inside this process will be logged to event log. &lt;/li&gt;
    
&lt;li&gt;call sessionchecker.GetOnlineUsersCount() to get the online user count any time you like. &lt;/li&gt;
 &lt;/ul&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;Hereby this tutorial i tried to explain how to count users if you are using Session state server. I know that there is many ways to do that. This example is working very fine on an enterprise website which has more then 23000 users and more then 65000 daily logins.&lt;/p&gt;
  
&lt;p&gt;Hope this helps&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;&lt;font size="4"&gt;my twitter address changed: &lt;/font&gt;&lt;/b&gt;&lt;a href="http://twitter.com/MuhanadY" title="http://twitter.com/MuhanadY" mce_href="http://twitter.com/MuhanadY"&gt;&lt;b&gt;&lt;font size="4"&gt;http://twitter.com/MuhanadY&lt;/font&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Thu, 25 Mar 2010 14:51:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/how-to-count-online-users-while-using-state-server-tutorial</guid><category>ASP.NET</category><category>Global Timer</category><category>Session</category><category>Session State</category></item><item><title>My Twitter Link Changed</title><link>https://weblogs.asp.net:443/muhanadyounis/my-twitter-link-changed</link><description>&lt;p&gt;&lt;a href="http://twitter.com/MuhanadY" title="My Twittez" mce_href="http://twitter.com/MuhanadY"&gt;&amp;nbsp;http://twitter.com/MuhanadY&lt;/a&gt;&lt;/p&gt;&lt;p&gt;English / Turkish / Arabic &lt;br&gt;&lt;/p&gt;</description><pubDate>Wed, 24 Mar 2010 06:07:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/my-twitter-link-changed</guid></item><item><title>Learning doesn't stop at 22</title><link>https://weblogs.asp.net:443/muhanadyounis/learning-doesn-t-stop-at-22</link><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A great blog article by Dave Winer just want to share it :D &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://www.scripting.com/stories/2010/01/14/learningDoesntStopAt22.html"&gt;Learning doesn't stop at 22&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 22 Jan 2010 06:04:48 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/learning-doesn-t-stop-at-22</guid></item><item><title>Parent – Child in recursive data table with LINQ</title><link>https://weblogs.asp.net:443/muhanadyounis/parent-child-in-recursive-data-table-with-linq</link><description>&lt;p&gt;If you have a data table which looks like this one below and holds child,parent rows at the same table;&lt;/p&gt;
  
&lt;table border="1" cellpadding="2" cellspacing="0" width="400"&gt;&lt;tbody&gt;     
&lt;tr&gt;       
&lt;td valign="top" width="133"&gt;ID&lt;/td&gt;
        
&lt;td valign="top" width="133"&gt;ParentID&lt;/td&gt;
        
&lt;td valign="top" width="133"&gt;Name&lt;/td&gt;
     &lt;/tr&gt;
      
&lt;tr&gt;       
&lt;td valign="top" width="133"&gt;guid1&lt;/td&gt;
        
&lt;td valign="top" width="133"&gt;null&lt;/td&gt;
        
&lt;td valign="top" width="133"&gt;parent 1&lt;/td&gt;
     &lt;/tr&gt;
      
&lt;tr&gt;       
&lt;td valign="top" width="133"&gt;guid2&lt;/td&gt;
        
&lt;td valign="top" width="133"&gt;guid1&lt;/td&gt;
        
&lt;td valign="top" width="133"&gt;child for parent 1&lt;/td&gt;
     &lt;/tr&gt;
      
&lt;tr&gt;       
&lt;td valign="top" width="133"&gt;so on&lt;/td&gt;
        
&lt;td valign="top" width="133"&gt;so on&lt;/td&gt;
        
&lt;td valign="top" width="133"&gt;so on&lt;/td&gt;
     &lt;/tr&gt;
   &lt;/tbody&gt;&lt;/table&gt;
  
&lt;p&gt;and you wont to retrieve all records from the table in a table looks like below;&lt;/p&gt;
  
&lt;table border="1" cellpadding="2" cellspacing="0" width="400"&gt;&lt;tbody&gt;     
&lt;tr&gt;       
&lt;td valign="top" width="200"&gt;Parent&lt;/td&gt;
        
&lt;td valign="top" width="200"&gt;Childs&lt;/td&gt;
     &lt;/tr&gt;
      
&lt;tr&gt;       
&lt;td valign="top" width="200"&gt;parent 1&lt;/td&gt;
        
&lt;td valign="top" width="200"&gt;child 1 for parent 1         &lt;br&gt;child 2 for parent 1          &lt;br&gt;child 3 for parent 1          &lt;br&gt;….&lt;/td&gt;
     &lt;/tr&gt;
      
&lt;tr&gt;       
&lt;td valign="top" width="200"&gt;Parent 2&lt;/td&gt;
        
&lt;td valign="top" width="200"&gt;child 1 for parent 2         &lt;br&gt;child 2 for parent 2          &lt;br&gt;….&lt;/td&gt;
     &lt;/tr&gt;
   &lt;/tbody&gt;&lt;/table&gt;
  
&lt;p&gt;This means that i have to make a recursive query in Sql to retrieve it this way. but with LINQ its more easy to be done, see the query below;&lt;/p&gt;
  &lt;div class="csharpcode"&gt;   
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;var q=  from p &lt;span class="kwrd"&gt;in&lt;/span&gt; TypedDataTable&lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;where&lt;/span&gt; p.ParentID == &lt;span class="kwrd"&gt;null&lt;/span&gt;  &lt;span class="rem"&gt;// well get all parents&lt;/span&gt;&lt;/pre&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    select &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;     {&lt;/pre&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;           ParentID = p.ParentID,&lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;          child =  from c &lt;span class="kwrd"&gt;in&lt;/span&gt; TypedDataTable &lt;/pre&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;where&lt;/span&gt; c.ParentID == p.ID select&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;new&lt;/span&gt;  {ChildID=c.ID,&lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                        ParentID = c.ParentID}&lt;/pre&gt;
  
&lt;pre class="alt"&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;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;and by the query above you’ll get this result;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/muhanadyounis/linqParentChild_615EF617.jpg" mce_href="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/linqParentChild_615EF617.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/muhanadyounis/linqParentChild_thumb_31C0D78B.jpg" style="border: 0px none ; display: inline;" title="linqParentChild" alt="linqParentChild" mce_src="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/linqParentChild_thumb_31C0D78B.jpg" border="0" height="148" width="520"&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt;

&lt;p&gt;&amp;nbsp;NOTICE : this query will load one level at a time&lt;br&gt;&lt;/p&gt;

&lt;p&gt;hope this helps&lt;/p&gt;</description><pubDate>Sat, 07 Nov 2009 14:19:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/parent-child-in-recursive-data-table-with-linq</guid><category>.NET</category><category>linq</category></item><item><title>Using 2 Tables Joined with LINQ as data source without anonymous cast error in databond method</title><link>https://weblogs.asp.net:443/muhanadyounis/using-2-tables-joined-with-linq-as-data-source-without-anonymous-cast-error-in-databond-method</link><description>&lt;p&gt;Yesterday one of our project team member faced a challenge of using an anonymous data that is returned from joining 2 typed data tables with LINQ. The problem is not how to use the data, the problem was how to be able to cast and use the data in Repeater ItemDataBond method without having “&lt;i&gt;&amp;lt;&amp;gt;f__AnonymousType0&lt;/i&gt;….” cast error. below is the join query (tables used are typed) :-&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt;PagedDataSource objPDS = &lt;span class="kwrd"&gt;new&lt;/span&gt; PagedDataSource();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:&lt;/span&gt;objPDS.AllowPaging = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:&lt;/span&gt;objPDS.PageSize = 10;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:&lt;/span&gt;objPDS.DataSource = (from p &lt;span class="kwrd"&gt;in&lt;/span&gt; Table1&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;              join  d &lt;span class="kwrd"&gt;in&lt;/span&gt; Table2 on p.ID equals d.ID&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                             select &lt;span class="kwrd"&gt;new&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                             {   &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                                 p,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                                 F1= d.f1,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                                 F2= d.f2,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                                 F3= d.f3,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                                 F4= d.f4,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                               }).ToList();&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The code above will return rows with anonymous type that will include fields wanted for table2 and all table1 fields!. 
  &lt;br /&gt;NOTACE : to bind this data to repeater use &amp;lt;%# Eval(&amp;quot;F1”) %&amp;gt; for Table2 fields and &amp;lt;%# Eval(&amp;quot;p.FieldName”) %&amp;gt; for Table1 Fields.&lt;/p&gt;

&lt;p&gt;Now what will happen if we want to use the datarow data bonded to repeater row! the code below will show you that you can not cast that datasource in ItemDataBond method as DataRowView :- &lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;var bindedRow= e.Item.DataItem &lt;span class="kwrd"&gt;as&lt;/span&gt; DataRowView; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;font color="#008000"&gt;//bindedRow &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt; value&lt;/font&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;So how to use a value inside the bonded row! after some researches I found out that reflection must be used to take that value from e.Item.DataItem with anonymous data. Reflection can be done by using &lt;a href="http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx" target="_blank"&gt;DataBind.Eval&lt;/a&gt; which will evaluate data at run time. A label added to repeater and we want to bond some data at itemdatabond time, the code below will demonstrate that :- (Sorry for using multiline in code)&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;label1.Text = Table3.&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;Where(cid =&amp;gt; cid.ID == &lt;/pre&gt;

  &lt;pre&gt;           (Guid)DataBinder.&lt;br /&gt;                 Eval(e.Item.DataItem, &lt;span class="str"&gt;&amp;quot;p.FieldName&amp;quot;&lt;/span&gt;)).&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;First().ToString();&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx" target="_blank"&gt;DataBind.Eval&lt;/a&gt; Done the trick for you and retrieve wonted data from the anonymous type and casting it to needed type (here its guid). &lt;/p&gt;

&lt;p&gt;Hope this Helps&lt;/p&gt;</description><pubDate>Wed, 04 Nov 2009 08:19:58 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/using-2-tables-joined-with-linq-as-data-source-without-anonymous-cast-error-in-databond-method</guid><category>.NET</category><category>C#</category><category>linq</category><category>Tips amp; Tricks</category></item><item><title>Where with dynamic parameter (linq)</title><link>https://weblogs.asp.net:443/muhanadyounis/where-with-dynamic-parameter-linq</link><description>&lt;p&gt;Yesterday i faced a satiation that i need to make a search in a datatable with dynamic parameter ( i mean parameters that may change - not the type of the parameter –). So i had this table below &lt;/p&gt;  &lt;p&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; appID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; condition   &lt;br&gt;---------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ---------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------    &lt;br&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 25    &lt;br&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 35    &lt;br&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 35    &lt;br&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 25    &lt;br&gt;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 45    &lt;br&gt;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 15&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;and i was looking to do this   &lt;br&gt;for example : i would like to know the applications that have conditions 15,25 and 35 so that will be A and C    &lt;br&gt;or 45 , 25 and that will be C and D.&lt;/p&gt;  &lt;p&gt;and after some code refactoring i found the best way to code this is as below;&lt;/p&gt;  &lt;p&gt;var appIDKeys= new List&amp;lt;Guid&amp;gt;();&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; listOfConditions.ForEach(a =&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var q = (from p in MainTable&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where p.ConditionKey== new Guid(a)&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select p.AppID).ToList();&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (q.Count &amp;gt; 0)&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (appIDKeys.Count == 0)&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; appIDKeys= q;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; appIDKeys= appIDKeys.Intersect(q).ToList&amp;lt;Guid&amp;gt;();&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else    &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ApplicationException("No Match");&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Hope This helps&lt;/p&gt;</description><pubDate>Tue, 20 Oct 2009 08:03:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/where-with-dynamic-parameter-linq</guid><category>linq</category><category>Where</category></item><item><title>TDD Masterclass By Roy Osherove</title><link>https://weblogs.asp.net:443/muhanadyounis/tdd-masterclass-by-roy-osherove</link><description>&lt;p&gt;Roy Osherove is giving an hands-on TDD Masterclass in the UK, September 21-25. Roy is author of &amp;quot;The Art of Unit Testing&amp;quot; (&lt;a href="http://www.artofunittesting.com/"&gt;http://www.artofunittesting.com/&lt;/a&gt;), a leading tdd &amp;amp; unit testing book; he maintains a blog at &lt;a href="http://iserializable.com"&gt;http://iserializable.com&lt;/a&gt; (which amoung other things has critiqued tests written by Microsoft for &lt;a href="http://asp.net"&gt;asp.net&lt;/a&gt; MVC - check out the testreviews category) and has recently been on the Scott Hanselman podcast (&lt;a href="http://bit.ly/psgYO"&gt;http://bit.ly/psgYO&lt;/a&gt;) where he educated Scott on best practices in Unit Testing techniques. For a further insight into Roy's style, be sure to also check out Roy's talk at the recent Norwegian Developer's Conference (&lt;a href="http://bit.ly/NuJVa"&gt;http://bit.ly/NuJVa&lt;/a&gt;).&amp;#160; &lt;/p&gt;  &lt;p&gt;Full Details here: &lt;a href="http://bbits.co.uk/tddmasterclass"&gt;http://bbits.co.uk/tddmasterclass&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;bbits are holding a raffle for a free ticket for the event. To be eligible to win the ticket (worth £2395!) you MUST paste this text, including all links, into your blog and email &lt;a href="mailto:Ian@bbits.co.uk"&gt;Ian@bbits.co.uk&lt;/a&gt; with the url to the blog entry.&amp;#160; The draw will be made on September 1st and the winner informed by email and on &lt;a href="http://bbits.co.uk/blog"&gt;bbits.co.uk/blog&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 25 Aug 2009 05:36:37 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/tdd-masterclass-by-roy-osherove</guid><category>MVC</category><category>TDD</category></item><item><title>Nobody Hates Software More Than Software Developers</title><link>https://weblogs.asp.net:443/muhanadyounis/nobody-hates-software-more-than-software-developers</link><description>&lt;p&gt;I know that i did not write a tiny word since a long time!. all that because we have a new member on our family and i have to give her more attention. During my standby time i had some time to read some books and developers blogs.I red a very nice post by Jeff Atwood and want to share it with you &lt;a href="http://www.codinghorror.com/blog/archives/001289.html" target="_blank"&gt;Nobody Hates Software More Than Software Developers&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 23 Jul 2009 06:11:38 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/nobody-hates-software-more-than-software-developers</guid><category>General</category></item><item><title>“What’s the biggest challenge with task estimates?”</title><link>https://weblogs.asp.net:443/muhanadyounis/what-s-the-biggest-challenge-with-task-estimates</link><description>&lt;p&gt;Read this article from Eric Brechner about task estimation &lt;/p&gt;  &lt;p&gt;&lt;a href="http://67.55.101.219/mspreader/mspresscontent/o-001-3895/?a=lo&amp;amp;sitename=developertools"&gt;I would estimate&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I believe it will help ;)&lt;/p&gt;</description><pubDate>Mon, 09 Mar 2009 07:17:44 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/what-s-the-biggest-challenge-with-task-estimates</guid><category>Development</category><category>Estimation</category></item><item><title>Global Timer (Background Timer)</title><link>https://weblogs.asp.net:443/muhanadyounis/global-timer-background-timer</link><description>&lt;p&gt;Updated on 01.19.2009 &lt;br&gt;&lt;/p&gt;&lt;p&gt;Why do you need a Global Timer ?   &lt;br&gt;There are many reason that you might want to use a global timer for, like pulling data from you database on time periods to prevent user from displaying empty data. I used the global timer to get signed up&amp;nbsp; online users data ( like online user count, cities and assigned rules).&lt;/p&gt;  &lt;p&gt;there are 3 types of timer class in ASP.NET;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx" target="_blank"&gt;System.Timers.Timer&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.timer.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.ui.timer.aspx"&gt;System.Web.UI.Timer&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx"&gt;System.Threading.Timer&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here i will not discus the deference between the above timer class (you may check the links and read msdn about them)but I'll show how to use &lt;a href="http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx"&gt;System.Threading.Timer&lt;/a&gt; to create a background timer.&lt;/p&gt;  &lt;p&gt;the time that I’ll create in this article will be created once and will keep working as long as my web application keep working. If the application stopped for any reason the timer will start again with the application restart.&lt;/p&gt;  &lt;p&gt;First of all create a class that will star Threading.Timer, make sure to create the timer starter method as Static method because we’ll call that method from Global.asax applicathin start method. Make the class as below;&lt;/p&gt;  &lt;p&gt;Add using System.Threading; as reference;&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TimerStarter&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Timer threadingTimer;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; StartTimer()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; == threadingTimer)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            threadingTimer = &lt;span class="kwrd"&gt;new&lt;/span&gt; Timer(&lt;span class="kwrd"&gt;new&lt;/span&gt; TimerCallback(CheckData),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current, 0, 600000);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&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;void&lt;/span&gt; CheckData(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="rem"&gt;//ToDo check Data&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&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;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Now Let me explain the code above; I declared a threadingTimer but did not initialize it. The main method here is StartTimer; Its a static method. The method checks if the threadingTimer Object is null or not. If its the first time that the method is called the threadingTimer will be null and will be created. line 9 creates and sets the timer object. TimerCallback is the delegate that will be called within timer intervals, here I call CheckData Method. CheckData method must be overloaded to match TimerCallback delegate. HttpContext.Curent is the object that will be used by the callback method; if you do not need any extra information for your method you can pass it as null. the 0 (zero) force the threadingtimer to call CheckData method as soon as the timer is created. You may set any milliseconds you want the timer to wait and call CheckData method. 600000 tells the timer to call CheckData method every 10 min. Call your timer from Global.asax as below;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;void&lt;/span&gt; Application_Start(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        TimerStarter.StartTimer();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;UPDATE : When your background thread throw and exception the working process will shout down! and IIS will recycle and start again so be careful.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;That is all!&lt;/p&gt;

&lt;p&gt;You may use &lt;a href="http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx" target="_blank"&gt;System.Timers.Timer&lt;/a&gt; in a deferent way to achieve the same goal. Check MSDN for more details.&lt;/p&gt;

&lt;p&gt;Hope this Helps&lt;/p&gt;</description><pubDate>Mon, 12 Jan 2009 13:22:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/global-timer-background-timer</guid><category>ASP.NET</category><category>Global Timer</category><category>Global.asax</category><category>threading</category><category>Timer</category><category>Tips amp; Tricks</category></item><item><title>ScriptManager and MasterPage PageMethods !</title><link>https://weblogs.asp.net:443/muhanadyounis/scriptmanager-and-masterpage-pagemethods</link><description>&lt;p&gt;I know that this subject has been asked many times therefore i would like to summarize it and give a small tutorial about how to do it.&lt;/p&gt; &lt;p&gt;I had some PageMethods on a default page which calls some web methods on code behind of the page. Before 1 week we decided to change the old structure of the project UI to use MasterPage. MaterPage triggered many problems with it, one of these problems that MasterPage does not support JS PageMethods! because MasterPage does not inherit from Web.UI.Page therefore you can not call PageMethods (its not a page!) – you can not call pagemethods on usercontrols too – so handle this problem and call your methods you can try this tutorial;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Create a MasterPage and add a ScriptManager on page.  &lt;li&gt;On ScriptManager add the folowings &lt;br&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&amp;lt;asp:ScriptManager ID=&lt;span class="str"&gt;"ScriptManager"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableScriptGlobalization=&lt;span class="str"&gt;"true"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        LoadScriptsBeforeUI=&lt;span class="str"&gt;"true"&lt;/span&gt; &lt;br&gt;                         EnableScriptLocalization=&lt;span class="str"&gt;"true"&lt;/span&gt; &lt;br&gt;                         EnablePageMethods=&lt;span class="str"&gt;"true"&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;       &amp;lt;Scripts&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &amp;lt;asp:ScriptReference &lt;br&gt;                      Path=&lt;span class="str"&gt;"~/Javascript/MasterPageWSJS.js"&lt;/span&gt; /&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &amp;lt;/Scripts&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &amp;lt;Services&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &amp;lt;asp:ServiceReference &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Path=&lt;span class="str"&gt;"~/WebServices/MasterPageWS.asmx"&lt;/span&gt; /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &amp;lt;/Services&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &amp;lt;/asp:ScriptManager&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Here we have 2 important sections &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Scritps which includes our JS file location &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Sevices which includes our Webservices location &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Here to be mentioned that EnablePageMethods attribute means nothing on MasterPages!.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add a javascript file to the project ( here its&amp;nbsp; MasterPageWSJS.js) &lt;br&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; CallService() {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="rem"&gt;//CallFromMasterJS() is the name of the service method&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;          MasterPageWS.CallFromMasterJS();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;  }&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add a Webservice file to the project (here it is MasterPageWS.asmx) &lt;br&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&amp;lt;%@ WebService Language=&lt;span class="str"&gt;"C#"&lt;/span&gt; Class=&lt;span class="str"&gt;"MasterPageWS"&lt;/span&gt; %&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&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.Web;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Services;&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.Web.Services.Protocols;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Script.Services;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;[WebService(Namespace = &lt;span class="str"&gt;"http://tempuri.org/"&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;[ScriptService]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MasterPageWS : System.Web.Services.WebService&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    [WebMethod(EnableSession = &lt;span class="kwrd"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CallFromMasterJS()&lt;/pre&gt;&lt;pre class="alt"&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="rem"&gt;// todo: write the needed codes&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&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;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class="csharpcode"&gt;&lt;/p&gt;&lt;pre&gt;      &lt;/pre&gt;
&lt;p&gt;Here some important notes about the service:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;- decorate the service class with [ScriptService]&lt;/p&gt;
&lt;p&gt;- Decorate your methods with [WebMethod] add if you want to use &lt;/p&gt;
&lt;p&gt;session variables with it decorate it with &lt;/p&gt;
&lt;p&gt;[WebMethod(EnableSession = &lt;span class="kwrd"&gt;true&lt;/span&gt;)] because webservices are&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;stateless by default&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;at the end add this code lines to your MasterPage codebehind:&lt;br&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(!IsPostBack)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  // masterBody is the ID of the masterpage body html tag&lt;/span&gt;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HtmlGenericControl body = &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (HtmlGenericControl)Page.Master.FindControl(&lt;span class="str"&gt;"masterBody"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        body.Attributes.Add(&lt;span class="str"&gt;"onunload"&lt;/span&gt;, &lt;span class="str"&gt;"CallService();"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;That is all !. when you start your page and refresh it the master page will unloaded and that will fire the event &lt;u&gt;onunload&lt;/u&gt; on the page body which will call the JS and from there the web service will be called.&lt;/p&gt;
&lt;p&gt;Hope this helps&lt;/p&gt;
&lt;p&gt;this tutorial based on &lt;a href="http://www.asp.net/AJAX/Documentation/Live/Tutorials/ConsumingWebServicesWithAJAXTutorial.aspx" target="_blank"&gt;Calling Web Services from Client Script in ASP.NET AJAX&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/ul&gt;</description><pubDate>Tue, 30 Dec 2008 20:23:43 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/scriptmanager-and-masterpage-pagemethods</guid><category>.NET 2.0</category><category>AJAX</category><category>ASP.NET</category><category>MasterPage</category><category>PageMethods</category><category>ScriptService</category><category>WebService</category></item><item><title>Publish Server Performance Monitors with MsChart</title><link>https://weblogs.asp.net:443/muhanadyounis/publish-server-performance-monitors-with-mschart</link><description>
&lt;p&gt;In this article I'll try to show you how to to use &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;amp;DisplayLang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;amp;DisplayLang=en" target="_blank"&gt;MsChart Controls&lt;/a&gt; with ajax update panel to publish your server performance counter variables.&lt;/p&gt;

&lt;p&gt;Be sure to install these packages before your start;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;amp;DisplayLang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;amp;DisplayLang=en" target="_blank"&gt;MsChart Controls&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=1D69CE13-E1E5-4315-825C-F14D33A303E9&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=1D69CE13-E1E5-4315-825C-F14D33A303E9&amp;amp;displaylang=en" target="_blank"&gt;Chart Controls Add-on for visual studio 2008&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MsChart Controls are free and new, I used to use owc 11 and later versions to achieve needed works on projects. &lt;/p&gt;

&lt;p&gt;After you install these packages goon and create a new website in your visual studio. On vs2008 toolbox you’ll find some new controls which installed with MsChart package. You’ll find chart control under data tab. First add a ajax script manager and an update panel to your page. Inside the update panel drop a timer and set its interval to 3000 milliseconds (3 seconds). Drag and drop a chart control for toolbox to your update panel content section. You will have a chart section looks like below;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Chart&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="Chart2"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Series&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Series&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Series1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Series&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Series&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ChartAreas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ChartArea&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ChartArea1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ChartArea&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ChartAreas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Chart&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Here you can see that the chart control have got to main section Series and ChartArea, I’ll not discus these two section widely; you may have more information about chart control and its section from &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=EE8F6F35-B087-4324-9DBA-6DD5E844FD9F&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=EE8F6F35-B087-4324-9DBA-6DD5E844FD9F&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Chart Controls for .NET Framework Documentation&lt;/a&gt;. the series section is related with graph it self and the chartarea section is related with chart area that will hold hold the drawn graph. In my project I configured chart section as below;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;p&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Chart&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="Chart1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="592px"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="412px"&lt;/span&gt; &lt;br&gt;&lt;span class="attr"&gt;ImageUrl&lt;/span&gt;&lt;span class="kwrd"&gt;="~/TempImages/ChartPic_#SEQ(300,3)"&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="attr"&gt;BackColor&lt;/span&gt;&lt;span class="kwrd"&gt;="#D3DFF0"&lt;/span&gt; &lt;span class="attr"&gt;BorderLineStyle&lt;/span&gt;&lt;span class="kwrd"&gt;="Solid"&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="attr"&gt;BackGradientEndColor&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt; &lt;span class="attr"&gt;BackGradientType&lt;/span&gt;&lt;span class="kwrd"&gt;="TopBottom"&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="attr"&gt;BorderlineColor&lt;/span&gt;&lt;span class="kwrd"&gt;="DarkGray"&lt;/span&gt; &lt;span class="attr"&gt;EnableViewState&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="attr"&gt;BackImageTransparentColor&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="attr"&gt;BackSecondaryColor&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt; &lt;span class="attr"&gt;BorderlineDashStyle&lt;/span&gt;&lt;span class="kwrd"&gt;="Solid"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Do not change ImageUrl location!.&lt;/p&gt;

&lt;p&gt;for Series;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Series&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Series&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="MySeries"&lt;/span&gt; &lt;span class="attr"&gt;XValueType&lt;/span&gt;&lt;span class="kwrd"&gt;="Double"&lt;/span&gt; &lt;span class="attr"&gt;ChartType&lt;/span&gt;&lt;span class="kwrd"&gt;="Spline"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="attr"&gt;BorderColor&lt;/span&gt;&lt;span class="kwrd"&gt;="180, 26, 59, 105"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="attr"&gt;YValueType&lt;/span&gt;&lt;span class="kwrd"&gt;="Double"&lt;/span&gt; &lt;span class="attr"&gt;BorderWidth&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="attr"&gt;ShadowColor&lt;/span&gt;&lt;span class="kwrd"&gt;="254, 0, 0, 0"&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="attr"&gt;ShadowOffset&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="attr"&gt;ChartArea&lt;/span&gt;&lt;span class="kwrd"&gt;="MyChartArea"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Points&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:DataPoint&lt;/span&gt; &lt;span class="attr"&gt;XValue&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;YValues&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Points&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Series&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Series&lt;/span&gt; &lt;span class="attr"&gt;XValueType&lt;/span&gt;&lt;span class="kwrd"&gt;="Double"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Exceps Thrown"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="attr"&gt;ChartType&lt;/span&gt;&lt;span class="kwrd"&gt;="Spline"&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="attr"&gt;BorderColor&lt;/span&gt;&lt;span class="kwrd"&gt;="180, 26, 59, 105"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="attr"&gt;YValueType&lt;/span&gt;&lt;span class="kwrd"&gt;="Double"&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="attr"&gt;BorderWidth&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="attr"&gt;ShadowColor&lt;/span&gt;&lt;span class="kwrd"&gt;="254, 0, 0, 0"&lt;/span&gt; &lt;span class="attr"&gt;ShadowOffset&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="attr"&gt;ChartArea&lt;/span&gt;&lt;span class="kwrd"&gt;="Default"&lt;/span&gt; &lt;span class="attr"&gt;IsVisibleInLegend&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Points&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:DataPoint&lt;/span&gt; &lt;span class="attr"&gt;XValue&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;YValues&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Points&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Series&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Series&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Here I used 2 series which mean that I’ll have to graphs in my chart. You can see that I used two different&amp;nbsp; &lt;u&gt;chartareas&lt;/u&gt; that is because I’ll use two chart areas on the same chart control.There many &lt;u&gt;charttypes&lt;/u&gt; that you can select depending on your project demands, in my example it choose &lt;u&gt;Spline&lt;/u&gt;. Beside that I added a Points section which will give the graph a starting position ( in static chart and charts with out code behind you can add many datapoints to draw the graph needed). &lt;/p&gt;

&lt;p&gt;and for Chart Area;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ChartAreas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ChartArea&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Default"&lt;/span&gt; &lt;span class="attr"&gt;BorderColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="attr"&gt;BorderDashStyle&lt;/span&gt;&lt;span class="kwrd"&gt;="Solid"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;     &lt;span class="attr"&gt;BackSecondaryColor&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt; &lt;span class="attr"&gt;BackColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 165, 191, 228"&lt;/span&gt; &lt;br&gt;&lt;span class="attr"&gt;ShadowColor&lt;/span&gt;&lt;span class="kwrd"&gt;="Transparent"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;     &lt;span class="attr"&gt;BackGradientStyle&lt;/span&gt;&lt;span class="kwrd"&gt;="TopBottom"&lt;/span&gt; &lt;span class="attr"&gt;Area3DStyle-Enable3D&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;br&gt;&lt;span class="attr"&gt;Area3DStyle-PointDepth&lt;/span&gt;&lt;span class="kwrd"&gt;="1000"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;      &lt;span class="attr"&gt;Area3DStyle-PointGapDepth&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="attr"&gt;AlignmentOrientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Horizontal"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Position&lt;/span&gt; &lt;span class="attr"&gt;Y&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="50"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="94"&lt;/span&gt; &lt;span class="attr"&gt;X&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Position&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AxisY&lt;/span&gt; &lt;span class="attr"&gt;LineColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MajorGrid&lt;/span&gt; &lt;span class="attr"&gt;LineColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;MajorGrid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;blockquote&gt;&lt;p&gt;               &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;LabelStyle&lt;/span&gt; &lt;span class="attr"&gt;Font&lt;/span&gt;&lt;span class="kwrd"&gt;="Trebuchet MS, 8.25pt, style=Bold"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;br&gt;                  &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;LabelStyle&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/pre&gt;

  &lt;pre&gt;                            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;AxisY&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;blockquote&gt;&lt;p&gt;                            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AxisX&lt;/span&gt; &lt;span class="attr"&gt;LineColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt; &lt;br&gt;&lt;span class="attr"&gt;IsMarginVisible&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt; &lt;span class="attr"&gt;Maximum&lt;/span&gt;&lt;span class="kwrd"&gt;="100"&lt;/span&gt; &lt;span class="attr"&gt;Minimum&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/pre&gt;

  &lt;pre&gt;                                &lt;span class="attr"&gt;IsStartedFromZero&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MajorGrid&lt;/span&gt; &lt;span class="attr"&gt;LineColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;br&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;MajorGrid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;LabelStyle&lt;/span&gt; &lt;span class="attr"&gt;Font&lt;/span&gt;&lt;span class="kwrd"&gt;="Trebuchet MS, 8.25pt, &lt;br&gt;style=Bold"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;LabelStyle&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;AxisX&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ChartArea&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ChartArea&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="MyChartArea"&lt;/span&gt; &lt;span class="attr"&gt;BorderColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt; &lt;br&gt;&lt;span class="attr"&gt;BorderDashStyle&lt;/span&gt;&lt;span class="kwrd"&gt;="Solid"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;       &lt;span class="attr"&gt;BackSecondaryColor&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt; &lt;span class="attr"&gt;BackColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 165, 191, 228"&lt;/span&gt; &lt;span class="attr"&gt;&lt;br&gt;ShadowColor&lt;/span&gt;&lt;span class="kwrd"&gt;="Transparent"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;       &lt;span class="attr"&gt;BackGradientStyle&lt;/span&gt;&lt;span class="kwrd"&gt;="TopBottom"&lt;/span&gt; &lt;span class="attr"&gt;Area3DStyle-Enable3D&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;br&gt;&lt;span class="attr"&gt;Area3DStyle-PointDepth&lt;/span&gt;&lt;span class="kwrd"&gt;="1000"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;       &lt;span class="attr"&gt;Area3DStyle-PointGapDepth&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="attr"&gt;AlignmentOrientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Horizontal"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Position&lt;/span&gt; &lt;span class="attr"&gt;Y&lt;/span&gt;&lt;span class="kwrd"&gt;="50"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="45"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="94"&lt;/span&gt; &lt;span class="attr"&gt;X&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Position&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Area3DStyle&lt;/span&gt; &lt;span class="attr"&gt;Enable3D&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="attr"&gt;PointDepth&lt;/span&gt;&lt;span class="kwrd"&gt;="1000"&lt;br&gt;&lt;/span&gt; &lt;span class="attr"&gt;PointGapDepth&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AxisY&lt;/span&gt; &lt;span class="attr"&gt;LineColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MajorGrid&lt;/span&gt; &lt;span class="attr"&gt;LineColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;MajorGrid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;LabelStyle&lt;/span&gt; &lt;span class="attr"&gt;Font&lt;/span&gt;&lt;span class="kwrd"&gt;="Trebuchet MS, 8.25pt, &lt;br&gt;style=Bold"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;LabelStyle&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;AxisY&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AxisX&lt;/span&gt; &lt;span class="attr"&gt;LineColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt; &lt;br&gt;&lt;span class="attr"&gt;IsMarginVisible&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt; &lt;span class="attr"&gt;Maximum&lt;/span&gt;&lt;span class="kwrd"&gt;="100"&lt;/span&gt; &lt;span class="attr"&gt;Minimum&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                                &lt;span class="attr"&gt;IsStartedFromZero&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MajorGrid&lt;/span&gt; &lt;span class="attr"&gt;LineColor&lt;/span&gt;&lt;span class="kwrd"&gt;="64, 64, 64, 64"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;br&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;MajorGrid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;LabelStyle&lt;/span&gt; &lt;span class="attr"&gt;Font&lt;/span&gt;&lt;span class="kwrd"&gt;="Trebuchet MS, 8.25pt, &lt;br&gt;style=Bold"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;LabelStyle&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;AxisX&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ChartArea&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ChartAreas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Points of intrest in ChartAreas are Position, AxisX and AxisY section. In position section you give the locations of your chartarea over the chart control it self. Since I have two chartareas I replaced them under each other. AxisX and AxisY are used to configure your graph axes; even if you don’t configure this section you can still use your chart but you’ll have some graphical problems until you data is sent to chart and display start. after all that configuration the chart control will look as below ( you may download the project from the link in the bottom of the article )&lt;/p&gt;

&lt;p&gt;&lt;img src="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Mschart/MainLook.JPG" mce_src="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Mschart/MainLook.JPG" width="216" height="312"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;

&lt;p&gt;Now let us go to code behind and see how to send our performance monitors values to chart.&lt;/p&gt;

&lt;p&gt;on Timer tick event I replaced 2 methods; the first one will set the performance monitors and the other will fill the chart as below;
  &lt;br&gt;(Do not forget to add using System.Web.UI.DataVisualization as a reference)

  &lt;br&gt;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Unnamed1_Tick(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            StartMonitor();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            ChartCondfig();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;         }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;for StartMonitor method;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; StartMonitor()&lt;/pre&gt;

  &lt;pre&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre&gt;   pc1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; PerformanceCounter(&lt;span class="str"&gt;".NET CLR Exceptions"&lt;/span&gt;, &lt;span class="str"&gt;"# of Exceps Thrown"&lt;/span&gt;, &lt;br&gt;         &lt;span class="str"&gt;"_Global_"&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;  &lt;span class="rem"&gt;// get the current value&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;  &lt;span class="kwrd"&gt;float&lt;/span&gt; dResult1 = pc1.NextValue();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre&gt;  pc2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; PerformanceCounter(&lt;span class="str"&gt;"ASP.NET"&lt;/span&gt;, &lt;span class="str"&gt;"Application Restarts"&lt;/span&gt;, &lt;span class="str"&gt;""&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;float&lt;/span&gt; dResult2 = pc2.NextValue();&lt;/pre&gt;

  &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre class="alt"&gt;  pc3 = &lt;span class="kwrd"&gt;new&lt;/span&gt; PerformanceCounter(&lt;span class="str"&gt;"ASP.NET"&lt;/span&gt;, &lt;span class="str"&gt;"Requests Current"&lt;/span&gt;, &lt;span class="str"&gt;""&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; dResult3 = pc3.NextValue();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre&gt;   pc4 = &lt;span class="kwrd"&gt;new&lt;/span&gt; PerformanceCounter(&lt;span class="str"&gt;"ASP.NET"&lt;/span&gt;, &lt;span class="str"&gt;"Requests Queued"&lt;/span&gt;, &lt;span class="str"&gt;""&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;float&lt;/span&gt; dResult4 = pc4.NextValue();&lt;/pre&gt;

  &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre class="alt"&gt;   pc5 = &lt;span class="kwrd"&gt;new&lt;/span&gt; PerformanceCounter(&lt;span class="str"&gt;"ASP.NET"&lt;/span&gt;, &lt;span class="str"&gt;"Worker Process Restarts"&lt;/span&gt;, &lt;span class="str"&gt;""&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;   &lt;span class="kwrd"&gt;float&lt;/span&gt; dResult5 = pc5.NextValue();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre&gt;  pc6 = &lt;span class="kwrd"&gt;new&lt;/span&gt; PerformanceCounter(&lt;span class="str"&gt;"ASP.NET"&lt;/span&gt;, &lt;span class="str"&gt;"Request Execution Time"&lt;/span&gt;, &lt;span class="str"&gt;""&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;float&lt;/span&gt; dResult6 = pc6.NextValue();&lt;/pre&gt;

  &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre class="alt"&gt;   pc10 = &lt;span class="kwrd"&gt;new&lt;/span&gt; PerformanceCounter(&lt;span class="str"&gt;"Memory"&lt;/span&gt;, &lt;span class="str"&gt;"Available MBytes"&lt;/span&gt;, &lt;span class="str"&gt;""&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;  &lt;span class="kwrd"&gt;float&lt;/span&gt; dResult10 = pc10.NextValue();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/div&gt;





&lt;p&gt; Here pc1 – 10 are declared on page load. and you can add much performance counter as you want. In this example I selected pc1 and 10 to be shown in the graph.&lt;/p&gt;

&lt;div class="csharpcode"&gt;

  

  &lt;p&gt;For ChartCondfig method; (sorry the code is not well formatted)&lt;/p&gt;

  &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;

  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ChartCondfig()&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;double&lt;/span&gt; lastXValue =&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;         &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series[0].Points[&lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series[0]&lt;br&gt;                  .Points.Count - 1].XValue + 1;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series[0].Points.AddXY(lastXValue++, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Convert.ToDouble(pc1.NextValue()));&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &lt;span class="kwrd"&gt;double&lt;/span&gt; lastXValue1 = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series[&lt;span class="str"&gt;"MySeries"&lt;/span&gt;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Points[&lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series[&lt;span class="str"&gt;"MySeries"&lt;/span&gt;].Points.Count - 1].XValue + 1;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series[1].Points.AddXY(lastXValue1++, &lt;br&gt;          Convert.ToDouble(pc10.NextValue()));&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="rem"&gt;// Adjust categorical scale&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;double&lt;/span&gt; axisMinimum = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series[0]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Points[0].XValue;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.ChartAreas[0].AxisX.Minimum = axisMinimum;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.ChartAreas[0].AxisX.Maximum =&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisMinimum + 100;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.ChartAreas[1].AxisX.Minimum = axisMinimum;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.ChartAreas[1].AxisX.Maximum =&lt;br&gt;                                                 axisMinimum + 100;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            &lt;span class="rem"&gt;// Remove points from the left chart side if number of &lt;br&gt;                   points exceeds 100.&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            &lt;span class="kwrd"&gt;while&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series[0].Points.Count &amp;gt; 100)&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            {&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;span class="rem"&gt;// Remove series points&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (Series series &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series)&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                {&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                    series.Points.RemoveAt(0);&lt;/pre&gt;

    &lt;pre class="alt"&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 class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        }&lt;/pre&gt;
  &lt;/div&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;on line 3 a double value named lastXvalue is declared this variable will hold the last point position over the X axes. on line 5 our first series on the chart will add a new point on X axes and Y axes.For X axes ,increasing&amp;nbsp; lastXvalue variable will be enough and for Y axes point performance monitor current value is given.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Chart1.Series[0].Points.AddXY(lastXValue++, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Convert.ToDouble(pc1.NextValue()));&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Adjusting the categorical scale of the chartarea is important; otherwise win your lastXValue reaches the end of the scale you’ll have a problem, there for on line 16 we tell the chart to extend the scale. From line 19 to 26 I removed the points from series after the left side of the chart exceeds 100.&lt;/p&gt;

&lt;p&gt;If you are debugging your project you well receive no exception but on runtime a small exception will rise; your application will look for a folder named TempImageFiles; goon and create this folder on the location shown in the exception and your application will run.&lt;/p&gt;

&lt;p&gt;When you run the project you’ll have your chart as below;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Mschart/MschartOnwork.JPG" mce_src="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Mschart/MschartOnwork.JPG" width="243" height="359"&gt; &lt;/p&gt;

&lt;p&gt;To make with example work on your server and other computers you need to install the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;amp;DisplayLang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;amp;DisplayLang=en" target="_blank"&gt;Download the free Microsoft Chart Controls&lt;/a&gt; package.&lt;/p&gt;

&lt;p&gt;That's all. In this article I tried to explain how to use MsChart to publish you server performance monitoring values. You can change and play around with charttypes and do many other nice works with that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Mschart/PerfMsChart.zip" mce_href="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Mschart/PerfMsChart.zip" target="_blank"&gt;Download the sample project from here&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;For more information about MsChart you can check these links;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;amp;DisplayLang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;amp;DisplayLang=en" target="_blank"&gt;Download the free Microsoft Chart Controls&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=1D69CE13-E1E5-4315-825C-F14D33A303E9&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=1D69CE13-E1E5-4315-825C-F14D33A303E9&amp;amp;displaylang=en" target="_blank"&gt;Download the VS 2008 Tool Support for the Chart Controls&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=1591" mce_href="http://code.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=1591" target="_blank"&gt;Download the Microsoft Chart Controls Samples&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EE8F6F35-B087-4324-9DBA-6DD5E844FD9F&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EE8F6F35-B087-4324-9DBA-6DD5E844FD9F&amp;amp;displaylang=en" target="_blank"&gt;Download the Microsoft Chart Controls Documentation&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/threads/" mce_href="http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/threads/" target="_blank"&gt;Visit the Microsoft Chart Control Forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article is based on &lt;a href="http://code.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=1591" mce_href="http://code.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=1591" target="_blank"&gt;Microsoft Chart Controls Web Samples&lt;/a&gt; project ajax section.&lt;/p&gt;
</description><pubDate>Wed, 17 Dec 2008 10:30:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/publish-server-performance-monitors-with-mschart</guid><category>ASP.NET</category><category>ChartArea</category><category>ChartType</category><category>Graphics</category><category>MsChart</category><category>Performance Counters</category></item><item><title>MIX09 10K Smart Coding Challenge</title><link>https://weblogs.asp.net:443/muhanadyounis/mix09-10k-smart-coding-challenge</link><description>&lt;p&gt;For Smart Coding and Smart Coders !&lt;/p&gt;  &lt;p&gt;&lt;a href="http://2009.visitmix.com/MIXtify/TenKGallery.aspx" mce_href="http://2009.visitmix.com/MIXtify/TenKGallery.aspx" target="_blank"&gt;http://2009.visitmix.com/MIXtify/TenKGallery.aspx&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 02 Dec 2008 08:30:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/mix09-10k-smart-coding-challenge</guid><category>challenge</category><category>microsoft</category><category>MIX09 10K</category></item><item><title>Extend Forms Authentication Ticket Depending on Session Time Out</title><link>https://weblogs.asp.net:443/muhanadyounis/extend-forms-authentication-ticket-depending-on-session-time-out</link><description>&lt;p&gt;I know that this subject is not new! but last week one of my students asked me about how we can extend client authentication ticket according to session time out. We should do some coding to achieve such a goal.&lt;/p&gt;  &lt;p&gt;I’ll suppose that you have a master page or a main page with frames (no frames for master page) step by step let us do the following;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create such a JavaScript inside your main page &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;table width="467" border="1" cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="465"&gt;           &lt;p&gt;&lt;b&gt;&lt;/b&gt;&amp;lt;script type="text/javascript"&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var timeOut = setInterval("ExtendSessionPopup();", 19 * 60 * 1000)&lt;/p&gt;            &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function ExtendSessionPopup() { &lt;/p&gt;            &lt;p&gt;&lt;a class="" title="more" name="more"&gt;&lt;/a&gt;indow.open('puppoPageUrl,'anycontent','width=455,height=435, status'); }&amp;lt;/script&amp;gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;In the code above we created a small counter to count the session time out time which is 20 min by default. Here I used 19 min because I’ll give the popup 1 min to count done.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Create a popup page that will tell the client that his session will expire within 1 min and ask him/her if he/she want to extend it. But 2 buttons on the popup, one to extend the session and the other to close session. On page load do this      &lt;br&gt;      &lt;table width="466" border="1" cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="464"&gt;             &lt;p&gt;protected void Page_Load(object sender, EventArgs e)                &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {                 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!Page.IsPostBack)                 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {                 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder st = new StringBuilder();                 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; st.Append("&amp;lt;script type=\"text/javascript\"&amp;gt;");                 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; st.Append("setTimeout(\"ClosePopup();\", 60 * 1000);");                 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; st.Append("function ClosePopup()");                 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; st.Append("{window.opener.parent.location = \"Login.aspx\";window.close();}");                 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; st.Append("&amp;lt;/script&amp;gt;");&lt;/p&gt;              &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(st);                &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }                 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;   &lt;p&gt;you may use a small counter to count down on the popup window for 60 sec.      &lt;br&gt;Here the code above tells the popup to redirect Client to login page after 60 sec for popup rise.       &lt;br&gt;Now; let us edit the click event of the Buttons;&lt;/p&gt;    &lt;table width="467" border="1" cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="465"&gt;Session Extend button            &lt;br&gt;            &lt;p&gt;protected void lnkExtendSession_Click(object sender, EventArgs e)              &lt;br&gt;&amp;nbsp; {&lt;/p&gt;            &lt;p&gt;FormsIdentity fi = (FormsIdentity)HttpContext.Current.User.Identity;              &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FormsAuthentication.RenewTicketIfOld(fi.Ticket);               &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write("&amp;lt;script&amp;gt;window.close();&amp;lt;/script&amp;gt;");               &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;    &lt;p&gt;The code above extends session for another 20 min (if the user stays ideal all that time).&lt;/p&gt;    &lt;table width="463" border="1" cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="461"&gt;End Session Button            &lt;br&gt;            &lt;p&gt;protected void lnkEndSession_Click(object sender, EventArgs e)              &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {               &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write("&amp;lt;script type=\"text/javascript\"&amp;gt;window.opener.parent.location = \"Login.aspx\";window.close();&amp;lt;/script&amp;gt;");               &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;    &lt;p&gt;The code above will close the session if client click end session link button.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In this way we can give our client to extend his/her session from the popup and if the client is a way from the pc the popup will end the session and redirect the main page to login page. By the way in this article I used session duration as 20 min, there for its hard coded.&lt;br&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Hope this Helps&lt;/i&gt;&lt;/p&gt;</description><pubDate>Mon, 01 Dec 2008 10:14:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/extend-forms-authentication-ticket-depending-on-session-time-out</guid><category>.NET</category><category>FormsAuthentication</category><category>JavaScript</category><category>Session</category></item><item><title>WRN: Assembly binding logging turned off</title><link>https://weblogs.asp.net:443/muhanadyounis/wrn-assembly-binding-logging-turned-off</link><description>
&lt;p style="font-weight: bold;"&gt;&amp;nbsp;&lt;span style="font-weight: normal;"&gt;I started to received this error since yesterday and after i add an
assembly reflection to retrieve the assembly version. Interesting thing
that when the application is deployed to IIS it starts to work fine!
but after some time i started to receive this error "WRN: Assembly
binding logging turned off", my reflected assembly can not be found!
WHAT!!!!! just before 10 sec it was working!!. I debugged my codes and
find out that there is nothing wrong, after that i decided to clean all
asp.net temp files on the iis server and restart iis again.But before i
restart iis i recopied the "Lost DLL" ( which it was not lost) to my
application bin folder and yuppie its working again. in my situation it
usually takes about 30 min to lose the dll :D, 1 hour passed and
nothing
happened until now.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update :&lt;/b&gt;&amp;nbsp; I used ildasm tool to find out what happens to my assembly after build. I found out that the assembly is built with a different&amp;nbsp; Culture!&amp;nbsp; normally on development no culture assigned to the assembly but after that when CCNET build the application a new culture is assigned!. that made other assemblies do not find the refrance of the wanted assembly!. &lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;hope this helps &lt;/span&gt;&lt;br&gt;&lt;/p&gt;
</description><pubDate>Sat, 08 Nov 2008 11:25:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/wrn-assembly-binding-logging-turned-off</guid><category>ASP.NET</category><category>Assembly</category><category>IIs</category><category>reflection</category></item><item><title>UCertify Prep-Kit (070-553 C#) Review</title><link>https://weblogs.asp.net:443/muhanadyounis/why-and-how-to-get-certified-as-it-professional</link><description>&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Few days before, I
have been asked to review one of products of &lt;span style="color: rgb(0, 51, 204);"&gt;&lt;a href="http://www.ucertify.com/" mce_href="http://www.ucertify.com/" target="_blank"&gt;&lt;span style="color: rgb(0, 51, 204);"&gt;UCertify&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
Company which is &lt;span style="color: rgb(0, 51, 204);"&gt;&lt;a href="http://www.ucertify.com/exams/Microsoft/70-553-CSHARP.html" mce_href="http://www.ucertify.com/exams/Microsoft/70-553-CSHARP.html" target="_blank"&gt;&lt;span style="color: rgb(0, 51, 204);"&gt;Prep-Kit (070-553 C#)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;.
But before writing my review I would like to explain WHY and HOW it's important
to get certified.&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;

&lt;blockquote&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&amp;nbsp;WHY;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;
If you are working in IT section you know very well that the knowledge you have
can not be measured easily. You may spend years on the same position without
any rise just because you are not able to show how much you know about your
work and section. Therefore many companies like Microsoft have started
certification programs which will help you to measure your knowledge and show
the world that you have good experience in your subject. I believe that when
you get certified, you will measure and show your knowledge, beside that you'll
raise your life style and salary! &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;HOW;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;
This might be the difficult part of this process! If you entered any IT
certification exams before (esp. Microsoft), you know very well that they do
not ask you on a specific subject only! They will ask you whatever may be
related with that subject. When you take such exams, you must be well-equipped
to pass it; your daily knowledge may not be enough to make you pass the exam!
Getting equipped with knowledge need a long time of study which you may not afford!&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;
From my experience in this subject, I can say that you need some fast courses
which will not take much time. There are many companies which offer such services.
One of these companies is&amp;nbsp; &lt;span style="color: rgb(0, 51, 204);"&gt;&lt;a href="http://www.ucertify.com/" mce_href="http://www.ucertify.com/" target="_blank"&gt;&lt;span style="color: rgb(0, 51, 204);"&gt;UCertify&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
and last week I had the chance to review and check one of those exams: Prep-Kit
for &lt;span style="color: rgb(0, 51, 204);"&gt;&lt;a href="http://www.ucertify.com/exams/Microsoft/70-553-CSHARP.html" mce_href="http://www.ucertify.com/exams/Microsoft/70-553-CSHARP.html" target="_blank"&gt;&lt;span style="color: rgb(0, 51, 204);"&gt;(070-553 C#)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;. I
found that the package is very useful from these points of views;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;" lang="EN-US"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;The way of covering subjects:
actually the package covers subjects according to Microsoft requirements in an
easy way to make the reader remember what it is related to. ( I liked the flash
cards: small hints but very useful)&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Practice tests: this feature
is very good, because it helps you to feel yourself in a real exam. Many
practice tests that will help you measure &lt;/span&gt;whatever&lt;span style="font-size: 12pt;"&gt; &lt;span lang="EN-US"&gt;you studied
about the subject.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/li&gt;
&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Articles: yes articles! Some
useful articles about the exam subjects.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/li&gt;
&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;How to study:&amp;nbsp; shows you
the right way to prepare yourself for the exam.&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/li&gt;
&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;User-friendly interface&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/li&gt;
&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;And many many more....&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;






&lt;blockquote&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;I did not think that studying
for IT exams could come that much easy, but after I saw the package above, I believed
that there is no way to FAIL! By the way, &lt;span style="color: rgb(0, 51, 204);"&gt;&lt;a href="http://www.ucertify.com/" mce_href="http://www.ucertify.com/" target="_blank"&gt;&lt;span style="color: rgb(0, 51, 204);"&gt;UCertify&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
gives a money back guarantee if you fail to pass the exam! .And before i finish here is some screen shot of &lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;span style="color: rgb(0, 51, 204);"&gt;&lt;a href="http://www.ucertify.com/exams/Microsoft/70-553-CSHARP.html" mce_href="http://www.ucertify.com/exams/Microsoft/70-553-CSHARP.html" target="_blank"&gt;&lt;span style="color: rgb(0, 51, 204);"&gt;Prep-Kit (070-553 C#)&lt;/span&gt;&lt;/a&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;a href="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/ucertify.JPG"&gt;&lt;img src="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/ucertify.JPG" mce_src="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/ucertify.JPG" align="baseline" border="0" width="239" height="174"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/ucertify2.JPG"&gt;&lt;img src="https://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/ucertify2.JPG" border="0" width="237" height="171"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&amp;nbsp;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;you can visit UCertify here &lt;a href="http://www.ucertify.com" target="_blank" mce_href="http://www.ucertify.com"&gt;http://www.ucertify.com. &lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;Notice: If you want to buy any of&amp;nbsp;&lt;a href="http://www.ucertify.com/" target="_blank" mce_href="http://www.ucertify.com"&gt;uCertify PrepKit  &lt;/a&gt;product you may use this code for 10% discount as my blog reader. the code "YOUNIS".&lt;a href="http://www.ucertify.com/" target="_blank" mce_href="http://www.ucertify.com"&gt;&lt;br&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Hope this helps. &lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

</description><pubDate>Thu, 30 Oct 2008 15:22:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/muhanadyounis/why-and-how-to-get-certified-as-it-professional</guid><category>Certification</category><category>Discount</category><category>IT Professional</category><category>UCertify</category></item></channel></rss>