<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Web Service</title>
        <link>http://geekswithblogs.net/rashid/category/6049.aspx</link>
        <description>Web Service</description>
        <language>en-US</language>
        <copyright>Kazi Manzur Rashid</copyright>
        <managingEditor>kazimanzurrashid@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Compress Asp.net Ajax Web Service Response - Save Bandwidth</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/09/15/Compress-Asp.net-Ajax-Web-Service-Response---Save-Bandwidth.aspx</link>
            <description>&lt;p&gt;In this post, I will show you how to compress the Asp.net Ajax Web Service response, To understand the benefits of compression let us start with a simple example, Consider you have an web service which returns a large data like the following:&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="color: rgb(43,145,175)"&gt;WebMethod&lt;/span&gt;()]
&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; GetLargeData()
{
    &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; (&lt;span style="color: rgb(43,145,175)"&gt;StreamReader&lt;/span&gt; sr = &lt;span style="color: rgb(43,145,175)"&gt;File&lt;/span&gt;.OpenText(Server.MapPath(&lt;span style="color: rgb(163,21,21)"&gt;"~/DataFile.txt"&lt;/span&gt;)))
    {
        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; sr.ReadToEnd();
    }
}&lt;/pre&gt;
&lt;p&gt;The web method reads an large text file (around 100KB) and returns it contents. Once we call this method from a page the network activity in the firebug shows like the following:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Plain" src="http://geekswithblogs.net/images/geekswithblogs_net/rashid/7075/r_Plain.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Now, lets examine the &lt;font face="Courier New"&gt;HttpModule&lt;/font&gt; which compress the Ajax Web Service response. The following shows the complete code of this module:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.IO;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.IO.Compression;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Globalization;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web;


&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;JsonCompressionModule&lt;/span&gt; : &lt;span style="color: rgb(43,145,175)"&gt;IHttpModule
&lt;/span&gt;{
    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; JsonCompressionModule()
    {
    }

    &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;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; Init(&lt;span style="color: rgb(43,145,175)"&gt;HttpApplication&lt;/span&gt; app)
    {
        app.PreRequestHandlerExecute += &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;EventHandler&lt;/span&gt;(Compress);
    }

    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Compress(&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;span style="color: rgb(43,145,175)"&gt;HttpApplication&lt;/span&gt; app = (&lt;span style="color: rgb(43,145,175)"&gt;HttpApplication&lt;/span&gt;)sender;
        &lt;span style="color: rgb(43,145,175)"&gt;HttpRequest&lt;/span&gt; request = app.Request;
        &lt;span style="color: rgb(43,145,175)"&gt;HttpResponse&lt;/span&gt; response = app.Response;

        &lt;span style="color: rgb(0,128,0)"&gt;//Ajax Web Service request is always starts with application/json
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (request.ContentType.ToLower(&lt;span style="color: rgb(43,145,175)"&gt;CultureInfo&lt;/span&gt;.InvariantCulture).StartsWith(&lt;span style="color: rgb(163,21,21)"&gt;"application/json"&lt;/span&gt;))
        {
            &lt;span style="color: rgb(0,128,0)"&gt;//User may be using an older version of IE which does not support compression, so skip those
&lt;/span&gt;            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (!((request.Browser.IsBrowser(&lt;span style="color: rgb(163,21,21)"&gt;"IE"&lt;/span&gt;)) &amp;amp;&amp;amp; (request.Browser.MajorVersion &amp;lt;= 6)))
            {
                &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; acceptEncoding = request.Headers[&lt;span style="color: rgb(163,21,21)"&gt;"Accept-Encoding"&lt;/span&gt;];

                &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (!&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.IsNullOrEmpty(acceptEncoding))
                {
                    acceptEncoding = acceptEncoding.ToLower(&lt;span style="color: rgb(43,145,175)"&gt;CultureInfo&lt;/span&gt;.InvariantCulture);

                    &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (acceptEncoding.Contains(&lt;span style="color: rgb(163,21,21)"&gt;"gzip"&lt;/span&gt;))
                    {
                        response.Filter = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;GZipStream&lt;/span&gt;(response.Filter, &lt;span style="color: rgb(43,145,175)"&gt;CompressionMode&lt;/span&gt;.Compress);
                        response.AddHeader(&lt;span style="color: rgb(163,21,21)"&gt;"Content-encoding"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"gzip"&lt;/span&gt;);
                    }
                    &lt;span style="color: rgb(0,0,255)"&gt;else&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (acceptEncoding.Contains(&lt;span style="color: rgb(163,21,21)"&gt;"deflate"&lt;/span&gt;))
                    {
                        response.Filter = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;DeflateStream&lt;/span&gt;(response.Filter, &lt;span style="color: rgb(43,145,175)"&gt;CompressionMode&lt;/span&gt;.Compress);
                        response.AddHeader(&lt;span style="color: rgb(163,21,21)"&gt;"Content-encoding"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"deflate"&lt;/span&gt;);
                    }
                }
            }
        }
    }
}&lt;/pre&gt;
&lt;p&gt;Next, register this module in the &lt;font face="Courier New"&gt;web.config&lt;/font&gt; like the following:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;httpModules&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;ScriptModule&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
    &lt;strong&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(163,21,21)"&gt;add&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;JsonCompressionModule&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;JsonCompressionModule&lt;/span&gt;"&lt;/font&gt;&lt;/strong&gt;&lt;span style="color: rgb(0,0,255)"&gt;&lt;font size="3"&gt;&lt;strong&gt;&lt;font size="2"&gt;/&amp;gt;&lt;/font&gt;
&lt;/strong&gt;&lt;/font&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;httpModules&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This time the network activity shows like the following:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Compressed Json" src="http://geekswithblogs.net/images/geekswithblogs_net/rashid/7075/r_Compressed.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;So by adding this little module, we have saved 74KB. Now consider the impact of this in an highly traffic ajax web application :-). You will find the complete source code in the bottom of this post. If you want to learn more optimization tips check out my previous post &lt;a href="http://geekswithblogs.net/rashid/archive/2007/07/29/Implement-Yahoos-YSlow-in-your-Asp.net-pages.aspx"&gt;Implement Yahoo's YSlow in your Asp.net pages&lt;/a&gt; and &lt;a href="http://geekswithblogs.net/rashid/archive/2007/07/25/Combine-Multiple-JavaScript-and-CSS-Files-and-Remove-Overheads.aspx"&gt;Combine Multiple JavaScript and CSS Files and Remove Overheads&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;: &lt;a href="http://www.box.net/shared/rxqq3muq4b" target="_blank"&gt;Full Source&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/rashid/archive/2007/09/15/Compress-Asp.net-Ajax-Web-Service-Response---Save-Bandwidth.aspx" target="_blank"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/rashid/archive/2007/09/15/Compress-Asp.net-Ajax-Web-Service-Response---Save-Bandwidth.aspx" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115370"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115370" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/115370.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/09/15/Compress-Asp.net-Ajax-Web-Service-Response---Save-Bandwidth.aspx</guid>
            <pubDate>Sat, 15 Sep 2007 00:09:31 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/115370.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/09/15/Compress-Asp.net-Ajax-Web-Service-Response---Save-Bandwidth.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/115370.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/115370.aspx</trackback:ping>
        </item>
        <item>
            <title>Utilize ThreadPool in WebService</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/06/19/Utilize-ThreadPool-in-WebService.aspx</link>
            <description>&lt;p&gt;Asp.net 2.0 has a built-in feature for creating multi-threaded page AKA AsyncPage, but for Web Service threading, there are no out of the box support. The following code snippet will show you how to create a multi-threaded web service. For the sake of the example, let us assume that we are creating Video Search Service, which will search different sites such as YouTube, MetaCafe, and DailyMotion for a given keyword and returns a composite result. Since this search can be done independently, we can surly invoke separate threads for each search. Let us see how we can utilize the built-in ThreadPool to create a multithread web service. &lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;    1&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt;&lt;span style="color: black"&gt; System; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;    2&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt;&lt;span style="color: black"&gt; System.Threading; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;    3&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt;&lt;span style="color: black"&gt; System.Collections; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;    4&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt;&lt;span style="color: black"&gt; System.Collections.Generic; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;    5&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt;&lt;span style="color: black"&gt; System.Web; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;    6&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt;&lt;span style="color: black"&gt; System.Web.Services; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;    7&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;    8&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;    9&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;class&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   10&lt;/span&gt;&lt;span style="color: black"&gt; { &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   11&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; Title; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   12&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; Author; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   13&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; Description; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   14&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; Url; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   15&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; OriginalUrl; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   16&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; Thumbnail; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   17&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; Source; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   18&lt;/span&gt;&lt;span style="color: black"&gt; } &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   19&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   20&lt;/span&gt;&lt;span style="color: black"&gt; [&lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebService&lt;/span&gt;&lt;span style="color: black"&gt;(Namespace = &lt;/span&gt;&lt;span style="color: #a31515"&gt;"http://tempuri.org/"&lt;/span&gt;&lt;span style="color: black"&gt;)] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   21&lt;/span&gt;&lt;span style="color: black"&gt; [&lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebServiceBinding&lt;/span&gt;&lt;span style="color: black"&gt;(ConformsTo = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WsiProfiles&lt;/span&gt;&lt;span style="color: black"&gt;.BasicProfile1_1)] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   22&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;class&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VideoSearchService&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebService&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   23&lt;/span&gt;&lt;span style="color: black"&gt; { &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   24&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; VideoSearchService() &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   25&lt;/span&gt;&lt;span style="color: black"&gt;     { &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   26&lt;/span&gt;&lt;span style="color: black"&gt;     } &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   27&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   28&lt;/span&gt;&lt;span style="color: black"&gt;     [&lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebMethod&lt;/span&gt;&lt;span style="color: black"&gt;()] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   29&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; Search(&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; keyword) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   30&lt;/span&gt;&lt;span style="color: black"&gt;     { &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   36&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; result = &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;(); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   37&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; locks = locks = &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;(); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   38&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt; evt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   39&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   40&lt;/span&gt;&lt;span style="color: black"&gt;         evt = &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: black"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   41&lt;/span&gt;&lt;span style="color: black"&gt;         locks.Add(evt); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   42&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ThreadPool&lt;/span&gt;&lt;span style="color: black"&gt;.QueueUserWorkItem(&lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WaitCallback&lt;/span&gt;&lt;span style="color: black"&gt;(SearchDailyMotion), (&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;)(&lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[] { keyword, result, evt})); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   43&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   44&lt;/span&gt;&lt;span style="color: black"&gt;         evt = &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: black"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   45&lt;/span&gt;&lt;span style="color: black"&gt;         locks.Add(evt); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   46&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ThreadPool&lt;/span&gt;&lt;span style="color: black"&gt;.QueueUserWorkItem(&lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WaitCallback&lt;/span&gt;&lt;span style="color: black"&gt;(SearchMetaCafe), (&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;)(&lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[] { keyword, result, evt })); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   47&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   48&lt;/span&gt;&lt;span style="color: black"&gt;         evt = &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: black"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   49&lt;/span&gt;&lt;span style="color: black"&gt;         locks.Add(evt); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   50&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ThreadPool&lt;/span&gt;&lt;span style="color: black"&gt;.QueueUserWorkItem(&lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WaitCallback&lt;/span&gt;&lt;span style="color: black"&gt;(SearchYouTube), (&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;)(&lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[] { keyword, result, evt })); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   51&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   52&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: green"&gt;//This will ensure that all the threads completes its search&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   53&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;EventWaitHandle&lt;/span&gt;&lt;span style="color: black"&gt;.WaitAll(locks.ToArray()); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   54&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   55&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt;&lt;span style="color: black"&gt; result; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   56&lt;/span&gt;&lt;span style="color: black"&gt;     } &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   57&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   58&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;void&lt;/span&gt;&lt;span style="color: black"&gt; SearchDailyMotion(&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt; state) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   59&lt;/span&gt;&lt;span style="color: black"&gt;     { &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   60&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[] triplet = (&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[])state; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   61&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   62&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; keyword = (&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;)triplet[0]; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   63&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; result = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;)triplet[1]; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   64&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt; evt = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt;)triplet[2]; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   65&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   66&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   67&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: green"&gt;//DailyMotion will searhed over here&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   68&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   69&lt;/span&gt;&lt;span style="color: black"&gt;         evt.Set(); &lt;/span&gt;&lt;span style="color: green"&gt;// Search is complete, so notify the parent thread&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   70&lt;/span&gt;&lt;span style="color: black"&gt;     } &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   71&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   72&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;void&lt;/span&gt;&lt;span style="color: black"&gt; SearchMetaCafe(&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt; state) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   73&lt;/span&gt;&lt;span style="color: black"&gt;     { &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   74&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[] triplet = (&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[])state; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   75&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; keyword = (&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;)triplet[0]; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   76&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; result = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;)triplet[1]; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   77&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt; evt = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt;)triplet[2]; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   78&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   79&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: green"&gt;//MetaCafe will be searched over here&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   80&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   81&lt;/span&gt;&lt;span style="color: black"&gt;         evt.Set(); &lt;/span&gt;&lt;span style="color: green"&gt;// Search is complete, so notify the parent thread&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   82&lt;/span&gt;&lt;span style="color: black"&gt;     } &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   83&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   84&lt;/span&gt;&lt;span style="color: black"&gt;     &lt;/span&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;void&lt;/span&gt;&lt;span style="color: black"&gt; SearchYouTube(&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt; state) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   85&lt;/span&gt;&lt;span style="color: black"&gt;     { &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   86&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[] triplet = (&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[])state; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   87&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; keyword = (&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;)triplet[0]; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   88&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; result = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Video&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;)triplet[1]; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   89&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt; evt = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManualResetEvent&lt;/span&gt;&lt;span style="color: black"&gt;)triplet[2]; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   90&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   91&lt;/span&gt;&lt;span style="color: black"&gt;         &lt;/span&gt;&lt;span style="color: green"&gt;// YouTube will be searched over here&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   92&lt;/span&gt;&lt;span style="color: black"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   93&lt;/span&gt;&lt;span style="color: black"&gt;         evt.Set(); &lt;/span&gt;&lt;span style="color: green"&gt;// Search is complete, so notify the parent thread&lt;/span&gt;&lt;span style="color: black"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   94&lt;/span&gt;&lt;span style="color: black"&gt;     } &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt;&lt;span style="font-size: 10pt; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;   95&lt;/span&gt;&lt;span style="color: black"&gt; } &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="background: white"&gt; &lt;/p&gt; &lt;p style="background: white"&gt;The whole thing has been done in four steps: &lt;/p&gt; &lt;p style="background: white"&gt; &lt;strong&gt;Step 1&lt;/strong&gt;: &lt;/p&gt; &lt;p style="background: white"&gt; We created few variables: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div style="background: white"&gt;A Generic List of Video which holds the search result &lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div style="background: white"&gt;A Generic List of Locks which is actually ManualResetEvent class &lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div style="background: white"&gt;A ManualResetEvent class to instantiate for different search. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p style="background: white"&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: &lt;/p&gt; &lt;p style="background: white"&gt;Starting each Search, this steps are repeated for the 3 different search: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div style="background: white"&gt;We created an Instance ManualResetEvent class and Adds it in the locks list. ManualResetEvent is special class, which allows us to communicate with different threads by signaling. &lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div style="background: white"&gt;Next, we queue a Task in a ThreadPool passing the Keyword, The Result list where the search result will be appended by the child thread and ManualResetEvent. The ThreadPool class method QueueUserWorkItem only takes a WaitCallback delegate which only accepts a single argument of object type and that's way we creating array on the fly and putting these items in that array. When a task is queued in the ThreadPool, the ThreadPool picks a free thread from its pool fires the thread to run the assigned method in that thread. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p style="background: white"&gt;&lt;strong&gt;Step 3&lt;/strong&gt;:&lt;/p&gt; &lt;p style="background: white"&gt;Inside the Child Thread : &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div style="background: white"&gt;Cast back the argument to proper types. &lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div style="background: white"&gt;Search the Site. I have commnted this to make the code shorter &lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div style="background: white"&gt;Then call the set() method of the ManualResetEvent. By calling this method, we are sending signal to the parent thread that the thread has done its job. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p style="background: white"&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: &lt;/p&gt; &lt;p style="background: white"&gt;The parent thread: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div style="background: white"&gt;The Parent threads call the EventWaitHandle.WaitAll(). This ensures that the parent thread will wait until all the child threads complete its job. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p style="background: white"&gt;And We are Done! &lt;/p&gt; &lt;p style="background: white"&gt;&lt;strong&gt;Few Notes: &lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div style="background: white"&gt;It is not possible to access the HttpContext.Current from the Child Thread method which means it also not possible to access the Request, Response, Cache, Session etc. If you need any of these objects in the child thread method then you also have to pass it in the WaitCallback like we did in the above. &lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div style="background: white"&gt;Never Creates a New Thread alternatively use the Built in ThreadPool class. &lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div style="background: white"&gt;Queuing a Task does not ensure that it will started be instantly, it completely depends upon the current usage of the ThreadPool, if the ThreadPool is already saturated with previous tasks then there might be a chance that your application will perform poorly even comparing with the Single threaded approach. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/rashid/archive/2007/06/19/Utilize-ThreadPool-in-WebService.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/rashid/archive/2007/06/19/Utilize-ThreadPool-in-WebService.aspx" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113297"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113297" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/113297.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/06/19/Utilize-ThreadPool-in-WebService.aspx</guid>
            <pubDate>Mon, 18 Jun 2007 20:33:58 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/113297.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/06/19/Utilize-ThreadPool-in-WebService.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/113297.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/113297.aspx</trackback:ping>
        </item>
        <item>
            <title>My First Article</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/01/14/103526.aspx</link>
            <description>&lt;p&gt;Recently I wrote an article &lt;a href="http://www.codeproject.com/useritems/SecureDataExchange.asp" target="_blank"&gt;"How to exchange data securely with a WebService without HTTPS/SSL"&lt;/a&gt; in &lt;a href="http://www.codeproject.com" target="_blank"&gt;codeproject&lt;/a&gt;. If Cryptography, Public/Private Key, Digital Signature and Web Service are one of your interest, I strongly recommend to read it.&lt;/p&gt; &lt;p&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://www.codeproject.com/useritems/SecureDataExchange.asp"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.codeproject.com/useritems/SecureDataExchange.asp" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103526"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103526" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/103526.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/01/14/103526.aspx</guid>
            <pubDate>Sat, 13 Jan 2007 18:14:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/103526.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/01/14/103526.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/103526.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/103526.aspx</trackback:ping>
        </item>
        <item>
            <title>Writing Code against the External Service</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/01/13/103514.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt;
When consuming any external service, don't expect the external service developer is as much smart as you are. Recently I have faced an issue when integrating with Amazon S3 that they failed to serve the data on first request, but on the consequent request they are able to return the data. So I did a little tweak in my code, instead of calling the service once, I am retrying up to 3 times. If the retry also fails the regular code block executes:
&lt;pre&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; MAX_TRY = 3;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; tryCount = 1;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;[] result = &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(0, 128, 128);"&gt;AmazonS3&lt;/span&gt; proxy = CreateServiceProxy())&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: rgb(0, 0, 255);"&gt;while&lt;/span&gt;(((result == &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;) || (result.Length == 0)) &amp;amp;&amp;amp; (tryCount &amp;lt; MAX_TRY))&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            result = proxy.GetObject(_bucketName, key, &lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;, _accessKeyID, timestamp, &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;, signature, &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;).Data;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            tryCount += 1;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (tryCount == MAX_TRY)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: rgb(0, 0, 255);"&gt;throw&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; result;&lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103514"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103514" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/103514.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/01/13/103514.aspx</guid>
            <pubDate>Sat, 13 Jan 2007 17:18:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/103514.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/01/13/103514.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/103514.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/103514.aspx</trackback:ping>
        </item>
    </channel>
</rss>