<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Softwaremaker - Visual Studio 2005</title>
    <link>http://www.softwaremaker.net/blog/</link>
    <description>&lt;Challenging Conventions /&gt;</description>
    <language>en-us</language>
    <copyright>William T</copyright>
    <lastBuildDate>Fri, 12 Oct 2007 22:40:28 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>itnews@softwaremaker.net</managingEditor>
    <webMaster>itnews@softwaremaker.net</webMaster>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=30444bbe-15e6-45fd-adc2-18df79385216</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,30444bbe-15e6-45fd-adc2-18df79385216.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I know I havent been posting deep technical stuff that I <a href="http://www.softwaremaker.net/blog/CategoryView,category,Web%2BServices%2BEnhancements%2B(WSE).aspx" target="_blank">used
to do</a>. Contrary to what people think my current role entails, keeping abreast
of the technology landscape is what I am supposed to do and what I enjoy and so when
colleagues joked with me when was the last time I booted up <a href="http://msdn.microsoft.com/vstudio/" target="_blank">Visual
Studio</a>, for example, I enjoyed seeing their shocked faces when I told them: "<em>oh
- just last night. why you asked ?</em>" <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" />.
</p>
        <p>
I dont dwell deep like I used to but I still code up decent projects which I
implement within my own developmental testing environment (yes, I have one
running latest versions of <a href="http://www.microsoft.com/windowsserver2003/technologies/directory/activedirectory/default.mspx" target="_blank">Active
Directory</a>, <a href="http://office.microsoft.com/en-us/sharepointserver/FX100492001033.aspx" target="_blank">SharePoint</a>, <a href="http://www.microsoft.com/exchange/default.mspx" target="_blank">Exchange</a> and
all the other goodies), driving the houshold crazy when I think of new and different
ways to document expenses, publish a Book or CD library, home automation projects
using all sorts of different technologies (yes, that includes <a href="http://www.rubyonrails.org/" target="_blank">Ruby-on-Rails</a>) or
in my new <a href="http://www.htc.com/product/03-product_tytn_II.htm" target="_blank">Windows
Mobile 6 Device</a>. Of course, I admit I dont post topics deep like I used to.
It is not so much the content but more so, the limiting factor of time.
</p>
        <p>
Recently, I was involved in some internal technical discussions with regards to the
issue of scale comparisions between <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a> and ASMX. Below are some discussions:
</p>
        <p>
If you have a web service that is going to be IO bound, you would definitely
want it to be scalable and <em>almost</em> every resource in the world tells you
to implement <a href="http://msdn.microsoft.com/msdnmag/issues/03/06/Threading/" target="_blank">ASP.NET
asynchronous pattern</a> (BeginSomething/EndSomething, etc) on it so to
go easy on the thread pool. ASP.NET uses an IAsyncHttpHandler to handle the request,
which means the worker threads are not blocked while the IO-bound operation executes
somewhere else. Sounds good so far.
</p>
        <p>
If you make a WCF version of it with <a href="http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/05/18/9336.aspx" target="_blank">webHttpBinding</a> (which actually
means you can invoked it AJAX-style) following the same async pattern for the methods,
you may find that each invocation of the WCF service eats up two threads – one
for its ASP.NET HttpModule.ProcessRequest and the other for the actual IO. Ouch! You
may think that this means your WCF implementation may end up eating all threads
reserved for ASP.NET, which would indeed scale down the server
</p>
        <p>
Is this true OR are we missing the complete picture ?
</p>
        <p>
While the scenarios explained above are reasonable observations, it doesnt paint the
complete picture. WCF <strong><em>does</em></strong> perform better scalability than
ASMX.
</p>
        <ul>
          <li>
            <strong>
              <u>Threading:</u>
            </strong>
            <br />
For ASMX, when a request comes in, it would be queued up immediately for async ASMX.
So the thread is released for that request and a new thread will pick up the work
item later. 
</li>
        </ul>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
For WCF, when a request comes in, we queue it up in WCF and let an IO thread handle
the request. At the same time, the request thread-pool thread is held to wait for
the request to complete.
</p>
          <p>
Yes, WCF uses more threads than async ASMX. But there is a reason for this. Using
asynchronous ASMX is dangerous and not really a good practice (<em>and I have hinted
at this many times in the many Web Service/ASMX presentations I have done
over the past few years</em>). While it does well at what it is supposed
to do, it does trick the developer into a "<em>false sense of security</em>". Essentially,
if you dont know how the ASP.NET blackbox works, you may find yourself thrown against
the car wall when you take a hidden, unsuspecting corner at high speeds. It does not
provide enough throttling for client loads. Basically the server takes all items and
queue them up for later processing. The server does not have a good throttling mechanism
to control the number of work items. To everyone else, it seems that the server
is quite friendly to all clients. However, if the number of clients is unbounded,
this is really bad. First of all, the server working set would grow unlimited due
to unlimited requests queued up. Secondly, many client requests would become obsolete
when it’s picked up by the server from the queue. The latter accounts for a a
good set of problematic scenarios I have come across in my past consulting gigs with
regards to high-load and high-transactional ASMX asynchronous implementations
before I joined the borg.
</p>
          <p>
Think of it as a side of the brain (that tells you that you are about to be full)
not functioning properly when you sit down at a <a href="http://en.wikipedia.org/wiki/Buffet" target="_blank">buffet</a> table.
You eat and eat and eat without knowning when to stop and then your <a href="http://en.wikipedia.org/wiki/Digestion" target="_blank">ingestion/digestion</a> system
starts kicking in, you actually hit the wall. Hard. Literally.
</p>
        </blockquote>
        <ul>
          <li>
            <strong>
              <u>Server Throughput</u>
            </strong>
            <br />
When you measure scalability, the most important measurement is the server throughput.
That is, how many requests the server can handle per time unit? For async ASMX, it
would be pretty fast at the initial phase. However, like the ingestion/digestion analogy
I was referring to above - Once the server is in a steady phase (as when CPU
is fully loaded), the throughput will go down because the server capacity has reached.
You can compare the data between async ASMX and sync ASMX <strong><em>over the long
run</em></strong> to see what I mean. 
</li>
        </ul>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
Also you would see higher memory usage of the async approach.
</p>
        </blockquote>
        <ul>
          <li>
            <strong>
              <u>ASP.NET Throttling</u>
            </strong>
            <br />
That said, ASP.NET does have a throttling mechanism that is used for sync ASMX, which
is the threadpool thread limit. The number of threads used to handle requests are
bounded (<a href="http://support.microsoft.com/kb/821268" target="_blank">http://support.microsoft.com/kb/821268</a>).
WCF uses this fact to throttle incoming requests. You can always change the configuration
settings to increase number of threads to be used to allow more work items to be queued
up.</li>
        </ul>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
The max number of threads follows the following formula:<br /><strong><em>MaxWorkerThreads x #CPU – MinFreeThreads</em></strong><br />
This is 12 by default on a single-proc machine.
</p>
        </blockquote>
        <ul>
          <li>
            <strong>
              <u>Two-level Throttling for WCF<br /></u>
            </strong>WCF leverages the ASP.NET threadpool throttling to throttle client requests.
At the same time, WCF has its <a href="http://msdn2.microsoft.com/en-us/library/ms735114.aspx" target="_blank">own
item queue throttling</a>. The former is throttled by the setting mentioned in the
immediate above point, while the latter is controlled by <a href="http://kennyw.com/indigo/150" target="_blank">WCF
throttling settings (maxConcurrentCalls etc)</a>. ASP.NET can automatically adjust
threads based on CPU loads so that you would always get full load of the server.</li>
        </ul>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
In this way, you may experience client failures because the requests are rejected
at ASP.NET layer beforehand. So you can increase the ASP.NET throttling to get better
experience. But eventually you would still be bounded by the physical server capacity,
no matter whether you use async ASMX, sync ASMX, or WCF as mentioned above.
</p>
        </blockquote>
        <p>
There is improvement work done in .NET 3.0 SP1 and of course, .NET 3.5 (beta
2 <a href="http://www.microsoft.com/downloads/details.aspx?familyid=d2f74873-c796-4e60-91c8-f0ef809b09ee&amp;displaylang=en" target="_blank">here</a>),
with the use of <em>prioritized item queues. </em>Do expect even-better
WCF performance even in some of the common scenarios. Fine tuning minWorkerThreads
will even give us even better results.
</p>
        <p>
Thanks to <a href="http://blogs.msdn.com/wenlong/" target="_blank">Wenlong</a> for
helping out with the guidance and explanation. The complete scenario and the design
principles for it will be published in greater detail in a MSDN whitepaper later.
Do watch out for it.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=30444bbe-15e6-45fd-adc2-18df79385216" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Threading and Throttling differences between WCF and ASMX</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,30444bbe-15e6-45fd-adc2-18df79385216.aspx</guid>
      <link>http://www.softwaremaker.net/blog/ThreadingAndThrottlingDifferencesBetweenWCFAndASMX.aspx</link>
      <pubDate>Fri, 12 Oct 2007 22:40:28 GMT</pubDate>
      <description>&lt;p&gt;
I know I havent been posting deep technical stuff that I &lt;a href="http://www.softwaremaker.net/blog/CategoryView,category,Web%2BServices%2BEnhancements%2B(WSE).aspx" target=_blank&gt;used
to do&lt;/a&gt;. Contrary to what people think my current role entails, keeping abreast
of the technology landscape is what I am supposed to do and what I enjoy and so when
colleagues joked with me when&amp;nbsp;was the last time I booted up &lt;a href="http://msdn.microsoft.com/vstudio/" target=_blank&gt;Visual
Studio&lt;/a&gt;, for example, I enjoyed seeing their shocked faces when I told them: "&lt;em&gt;oh
- just last night. why you asked ?&lt;/em&gt;" &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
I dont dwell deep like I used to but I still code up decent projects&amp;nbsp;which I
implement within my own developmental&amp;nbsp;testing&amp;nbsp;environment (yes, I have one
running latest versions of &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/directory/activedirectory/default.mspx" target=_blank&gt;Active
Directory&lt;/a&gt;, &lt;a href="http://office.microsoft.com/en-us/sharepointserver/FX100492001033.aspx" target=_blank&gt;SharePoint&lt;/a&gt;, &lt;a href="http://www.microsoft.com/exchange/default.mspx" target=_blank&gt;Exchange&lt;/a&gt;&amp;nbsp;and
all the other goodies), driving the houshold crazy when I think of new and different
ways to document expenses, publish a Book or CD library, home automation projects
using all sorts of different technologies (yes, that includes &lt;a href="http://www.rubyonrails.org/" target=_blank&gt;Ruby-on-Rails&lt;/a&gt;)&amp;nbsp;or
in my new &lt;a href="http://www.htc.com/product/03-product_tytn_II.htm" target=_blank&gt;Windows
Mobile 6 Device&lt;/a&gt;. Of course, I admit I dont post topics&amp;nbsp;deep like I used to.
It is not so much the content but more so, the limiting factor of time.
&lt;/p&gt;
&lt;p&gt;
Recently, I was involved in some internal technical discussions with regards to the
issue of scale comparisions between &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx target=_blank&gt;Windows
Communication Foundation (WCF, previously - Indigo)&lt;/a&gt; and ASMX. Below are some discussions:
&lt;/p&gt;
&lt;p&gt;
If you&amp;nbsp;have a web service that is going to be IO bound, you would definitely
want it to be scalable and &lt;em&gt;almost&lt;/em&gt; every&amp;nbsp;resource in the world tells&amp;nbsp;you
to&amp;nbsp;implement&amp;nbsp;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/03/06/Threading/" target=_blank&gt;ASP.NET
asynchronous pattern&lt;/a&gt; (BeginSomething/EndSomething, etc)&amp;nbsp;on it&amp;nbsp;so to
go easy on the thread pool. ASP.NET&amp;nbsp;uses an IAsyncHttpHandler to handle the request,
which means the worker threads are not blocked while the IO-bound operation executes
somewhere else. Sounds good so far.
&lt;/p&gt;
&lt;p&gt;
If you make a WCF version of it with &lt;a href="http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/05/18/9336.aspx" target=_blank&gt;webHttpBinding&lt;/a&gt; (which&amp;nbsp;actually
means you can invoked it AJAX-style) following the same async pattern for the methods,
you may find that&amp;nbsp;each invocation of the WCF service eats up two threads – one
for its ASP.NET HttpModule.ProcessRequest and the other for the actual IO. Ouch! You
may think that this means&amp;nbsp;your WCF implementation may end up eating all threads
reserved for ASP.NET, which would indeed scale down the server
&lt;/p&gt;
&lt;p&gt;
Is this true OR are we missing the complete picture ?
&lt;/p&gt;
&lt;p&gt;
While the scenarios explained above are reasonable observations, it doesnt paint the
complete picture. WCF &lt;strong&gt;&lt;em&gt;does&lt;/em&gt;&lt;/strong&gt; perform better scalability than
ASMX.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;u&gt;Threading:&lt;/u&gt;&lt;/strong&gt;
&lt;br&gt;
For ASMX, when a request comes in, it would be queued up immediately for async ASMX.
So the thread is released for that request and a new thread will pick up the work
item later. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
For WCF, when a request comes in, we queue it up in WCF and let an IO thread handle
the request. At the same time, the request thread-pool thread is held to wait for
the request to complete.
&lt;/p&gt;
&lt;p&gt;
Yes, WCF uses more threads than async ASMX. But there is a reason for this. Using
asynchronous ASMX is dangerous and not really a good practice&amp;nbsp;(&lt;em&gt;and I have&amp;nbsp;hinted
at this many times in the many&amp;nbsp;Web Service/ASMX presentations I have&amp;nbsp;done
over the past few&amp;nbsp;years&lt;/em&gt;).&amp;nbsp;While it does well at what it is supposed
to do, it does trick the developer into a "&lt;em&gt;false sense of security&lt;/em&gt;". Essentially,
if you dont know how the ASP.NET blackbox works, you may find yourself thrown against
the car wall when you take a hidden, unsuspecting corner at high speeds. It does not
provide enough throttling for client loads. Basically the server takes all items and
queue them up for later processing. The server does not have a good throttling mechanism
to control the number of work items. To everyone else, it seems&amp;nbsp;that the server
is quite friendly to all clients. However, if the number of clients is unbounded,
this is really bad. First of all, the server working set would grow unlimited due
to unlimited requests queued up. Secondly, many client requests would become obsolete
when it’s picked up by the server from the queue. The latter&amp;nbsp;accounts for a a
good set of problematic scenarios I have come across in my past consulting gigs with
regards to high-load and high-transactional&amp;nbsp;ASMX asynchronous implementations
before I joined the borg.
&lt;/p&gt;
&lt;p&gt;
Think of it as a side of the brain (that tells you that you are about to be full)
not functioning properly when you sit down at a &lt;a href="http://en.wikipedia.org/wiki/Buffet" target=_blank&gt;buffet&lt;/a&gt; table.
You eat and eat and eat without knowning when to stop and then your &lt;a href="http://en.wikipedia.org/wiki/Digestion" target=_blank&gt;ingestion/digestion&lt;/a&gt; system
starts kicking in, you actually hit the wall. Hard. Literally.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;u&gt;Server Throughput&lt;/u&gt;&lt;/strong&gt;
&lt;br&gt;
When you measure scalability,&amp;nbsp;the most important measurement is the server throughput.
That is, how many requests the server can handle per time unit? For async ASMX, it
would be pretty fast at the initial phase. However, like the ingestion/digestion&amp;nbsp;analogy
I was referring to above - Once the server is in&amp;nbsp;a steady phase (as when CPU
is fully loaded), the throughput will go down because the server capacity has reached.
You can compare the data between async ASMX and sync ASMX &lt;strong&gt;&lt;em&gt;over the long
run&lt;/em&gt;&lt;/strong&gt; to see what I mean. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
Also you would see higher memory usage of the async approach.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;u&gt;ASP.NET Throttling&lt;/u&gt;&lt;/strong&gt;
&lt;br&gt;
That said, ASP.NET does have a throttling mechanism that is used for sync ASMX, which
is the threadpool thread limit. The number of threads used to handle requests are
bounded (&lt;a href="http://support.microsoft.com/kb/821268" target=_blank&gt;http://support.microsoft.com/kb/821268&lt;/a&gt;).
WCF uses this fact to throttle incoming requests. You can always change the configuration
settings to increase number of threads to be used to allow more work items to be queued
up.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
The max number of threads follows the following formula:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;MaxWorkerThreads&amp;nbsp;x #CPU – MinFreeThreads&lt;/em&gt;&lt;/strong&gt;
&lt;br&gt;
This is 12 by default on a single-proc machine.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;u&gt;Two-level Throttling for WCF&lt;br&gt;
&lt;/u&gt;&lt;/strong&gt;WCF leverages the ASP.NET threadpool throttling to throttle client requests.
At the same time, WCF has its &lt;a href="http://msdn2.microsoft.com/en-us/library/ms735114.aspx" target=_blank&gt;own
item queue throttling&lt;/a&gt;. The former is throttled by the setting mentioned in the
immediate above point, while the latter is controlled by &lt;a href="http://kennyw.com/indigo/150" target=_blank&gt;WCF
throttling settings (maxConcurrentCalls etc)&lt;/a&gt;. ASP.NET can automatically adjust
threads based on CPU loads so that you would always get full load of the server.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
In this way, you may experience client failures because the requests are rejected
at ASP.NET layer beforehand. So you can increase the ASP.NET throttling to get better
experience. But eventually you would still be bounded by the physical server capacity,
no matter whether you use async ASMX, sync ASMX, or WCF as mentioned above.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
There is improvement work done in .NET 3.0 SP1&amp;nbsp;and of course, .NET 3.5 (beta
2 &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=d2f74873-c796-4e60-91c8-f0ef809b09ee&amp;amp;displaylang=en" target=_blank&gt;here&lt;/a&gt;),
with the use of&amp;nbsp;&lt;em&gt;prioritized item queues.&amp;nbsp;&lt;/em&gt;Do expect even-better
WCF performance&amp;nbsp;even in&amp;nbsp;some of the&amp;nbsp;common scenarios. Fine tuning minWorkerThreads
will even give us even better results.
&lt;/p&gt;
&lt;p&gt;
Thanks&amp;nbsp;to &lt;a href="http://blogs.msdn.com/wenlong/" target=_blank&gt;Wenlong&lt;/a&gt; for
helping out with the guidance and explanation. The complete scenario and the design
principles for it&amp;nbsp;will be published in greater detail in a MSDN whitepaper later.
Do watch out for it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=30444bbe-15e6-45fd-adc2-18df79385216" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>.NET;Software Development;Visual Studio 2005;Windows Communication Foundation (WCF) aka Indigo</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=b290af2f-8fb9-4a65-8ed3-232450f671fd</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,b290af2f-8fb9-4a65-8ed3-232450f671fd.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Two of my favourite features out of many in Visual Studio 2005.
</p>
        <p>
1) Finally - A Correction of what was wrong for some time - There is a <strong><em>Add
Service Reference</em></strong> now. This is essentially what <a href="http://searchvb.techtarget.com/originalContent/0,289142,sid8_gci1148920,00.html" target="_blank">svcutil.exe</a> does
for you. Awesome. Now we know we are speaking services and messages ... No more calls
please.<br /><br /><img src="http://www.softwaremaker.net/blog/content/binary/VS2005_AddServiceReference.JPG" border="0" /></p>
        <p>
2) A simple IDE enhancement but yet one that can generate lots of productivity. VS.NET
will launch any project (of a solution) that my cursor is residing on. No more booting
up of Class Libraries or Service Components by mistake anymore, (esp. in-front of
an audience)<br /><br /><img src="http://www.softwaremaker.net/blog/content/binary/VS2005_StartupProject.JPG" border="0" /></p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=b290af2f-8fb9-4a65-8ed3-232450f671fd" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Something simple can go a very long way</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,b290af2f-8fb9-4a65-8ed3-232450f671fd.aspx</guid>
      <link>http://www.softwaremaker.net/blog/SomethingSimpleCanGoAVeryLongWay.aspx</link>
      <pubDate>Wed, 18 Jan 2006 03:08:43 GMT</pubDate>
      <description>&lt;p&gt;
Two of my favourite features out of many in Visual Studio 2005.
&lt;/p&gt;
&lt;p&gt;
1) Finally - A Correction of what was wrong for some time - There is a &lt;strong&gt;&lt;em&gt;Add
Service Reference&lt;/em&gt;&lt;/strong&gt; now. This is essentially what &lt;a href="http://searchvb.techtarget.com/originalContent/0,289142,sid8_gci1148920,00.html" target=_blank&gt;svcutil.exe&lt;/a&gt; does
for you. Awesome. Now we know we are speaking services and messages ... No more calls
please.&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.softwaremaker.net/blog/content/binary/VS2005_AddServiceReference.JPG" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
2) A simple IDE enhancement but yet one that can generate lots of productivity. VS.NET
will launch any project (of a solution) that my cursor is residing on. No more booting
up of Class Libraries or Service Components by mistake anymore, (esp. in-front of
an audience)&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.softwaremaker.net/blog/content/binary/VS2005_StartupProject.JPG" border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=b290af2f-8fb9-4a65-8ed3-232450f671fd" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>Random Musings;Software Development;Visual Studio 2005</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=101cb762-7e81-48dc-b21f-ebfd2e06945e</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,101cb762-7e81-48dc-b21f-ebfd2e06945e.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The WinFX Runtime Components Beta 1 is available <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=CE888B4C-CCBD-452F-9D90-F4B7190CCA24&amp;displaylang=en" target="_blank">here</a>,
and the WinFX SDK is available <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=23A22468-5807-4FF7-A363-CE6FE69B8F04&amp;displaylang=en" target="_blank">here</a>. 
Also, check out the new Windows Vista Developer Center at <a href="http://msdn.microsoft.com/windowsvista" target="_blank">http://msdn.microsoft.com/windowsvista</a>.
</p>
        <p>
With this release comes with the official names for many of the technologies that
they've been talking with our developers about for several years. In particular, Windows <a href="http://www.microsoft.com/windows/longhorn/default.mspx" target="_blank">Longhorn</a> is
now Windows Vista, <a href="http://msdn.microsoft.com/longhorn/understanding/pillars/avalon/default.aspx" target="_blank">Avalon</a> is
now the Windows Presentation Foundation, and <a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank">Indigo</a> is
the Windows Communication Foundation. 
</p>
        <p>
          <table class="MsoNormalTable" style="MARGIN-LEFT: 0.5in; WIDTH: 5.65in; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="542" border="0">
            <tbody>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="269">
                  <p>
                    <b> “Former” code name</b>
                  </p>
                </td>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="273">
                  <p>
                    <b>Official name</b>
                  </p>
                </td>
              </tr>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="269" bgcolor="#ffff99">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">Longhorn</span>
                    </font>
                  </p>
                </td>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="273" bgcolor="#ffff99">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">Vista</span>
                    </font>
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">
                      </span>
                    </font>
                  </p>
                </td>
              </tr>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="269" bgcolor="#ffff99">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">Avalon</span>
                    </font>
                  </p>
                </td>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="273" bgcolor="#ffff99">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">Windows
Presentation Foundation</span>
                    </font>
                  </p>
                </td>
              </tr>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="269" bgcolor="#ffff99">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">Indigo</span>
                    </font>
                  </p>
                </td>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="273" bgcolor="#ffff99">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">Windows
Communication Foundation</span>
                    </font>
                  </p>
                </td>
              </tr>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="269">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">Metro</span>
                    </font>
                  </p>
                </td>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="273">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">XML
Paper Specification (XPS)</span>
                    </font>
                  </p>
                </td>
              </tr>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="269">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">Least-privileged
User Access</span>
                    </font>
                  </p>
                </td>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="273">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">User
Account Protection</span>
                    </font>
                  </p>
                </td>
              </tr>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="269">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">WAP</span>
                    </font>
                  </p>
                </td>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="273">
                  <p class="MsoNormal">
                    <font face="Franklin Gothic Book" size="2">
                      <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'">WinFX
Runtime Components</span>
                    </font>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
        </p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=101cb762-7e81-48dc-b21f-ebfd2e06945e" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Tons of new Beta 1 Downloads and new naming conventions</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,101cb762-7e81-48dc-b21f-ebfd2e06945e.aspx</guid>
      <link>http://www.softwaremaker.net/blog/TonsOfNewBeta1DownloadsAndNewNamingConventions.aspx</link>
      <pubDate>Thu, 28 Jul 2005 03:23:37 GMT</pubDate>
      <description>&lt;p&gt;
The WinFX Runtime Components Beta 1 is available &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=CE888B4C-CCBD-452F-9D90-F4B7190CCA24&amp;amp;displaylang=en" target=_blank&gt;here&lt;/a&gt;,
and the WinFX SDK is available &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=23A22468-5807-4FF7-A363-CE6FE69B8F04&amp;amp;displaylang=en" target=_blank&gt;here&lt;/a&gt;.&amp;nbsp;
Also, check out the new Windows Vista Developer Center at &lt;a href="http://msdn.microsoft.com/windowsvista" target=_blank&gt;http://msdn.microsoft.com/windowsvista&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
With this release comes with the official names for many of the technologies that
they've been talking with our developers about for several years. In particular, Windows &lt;a href="http://www.microsoft.com/windows/longhorn/default.mspx" target="_blank"&gt;Longhorn&lt;/a&gt; is
now Windows Vista, &lt;a href="http://msdn.microsoft.com/longhorn/understanding/pillars/avalon/default.aspx" target="_blank"&gt;Avalon&lt;/a&gt; is
now the Windows Presentation Foundation, and &lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank"&gt;Indigo&lt;/a&gt; is
the Windows Communication Foundation. 
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoNormalTable style="MARGIN-LEFT: 0.5in; WIDTH: 5.65in; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 width=542 border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=269&gt;
&lt;p&gt;
&lt;b&gt;&amp;nbsp;“Former” code name&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=273&gt;
&lt;p&gt;
&lt;b&gt;Official name&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=269 bgcolor=#ffff99&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;Longhorn&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=273 bgcolor=#ffff99&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;Vista&lt;/span&gt;&lt;/font&gt;&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=269 bgcolor=#ffff99&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;Avalon&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=273 bgcolor=#ffff99&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;Windows
Presentation Foundation&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=269 bgcolor=#ffff99&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;Indigo&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; BACKGROUND: #ffff99; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=273 bgcolor=#ffff99&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;Windows
Communication Foundation&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=269&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;Metro&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=273&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;XML
Paper Specification (XPS)&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=269&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;Least-privileged
User Access&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=273&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;User
Account Protection&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 201.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=269&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;WAP&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 204.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign=top width=273&gt;
&lt;p class=MsoNormal&gt;
&lt;font face="Franklin Gothic Book" size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Franklin Gothic Book'"&gt;WinFX
Runtime Components&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=101cb762-7e81-48dc-b21f-ebfd2e06945e" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>.NET;Announcements;Technology;Visual Studio 2005</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=bfe54b33-e6b4-43a5-9ac5-a151697a5ec4</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,bfe54b33-e6b4-43a5-9ac5-a151697a5ec4.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Please take a look at the new MSDN site serving as the single content point for current
ASP.NET customers to easily make the move to ASP.NET 2.0.
</p>
        <p>
Upgrade Center: <a href="http://msdn.microsoft.com/asp.net/migration/upgrade/default.aspx" target="_blank">http://msdn.microsoft.com/asp.net/migration/upgrade/default.aspx</a></p>
        <p>
Also, check out the new whitepaper that details the lessons learned, best practices,
and valuable techniques that will help developers upgrade their apps.
</p>
        <p>
New Upgrade Paper: <a href="http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnaspp/html/upgradingaspnet.asp" target="_blank">http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnaspp/html/upgradingaspnet.asp</a></p>
        <p>
For general migration (ASP, competitive, etc.) content, you can always refer to the
migration center at: <a href="http://msdn.microsoft.com/asp.net/migration/" target="_blank">http://msdn.microsoft.com/asp.net/migration/</a><br /></p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=bfe54b33-e6b4-43a5-9ac5-a151697a5ec4" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Announcing the launch of the new ASP.NET 1.x to 2.0 Upgrade Center on MSDN</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,bfe54b33-e6b4-43a5-9ac5-a151697a5ec4.aspx</guid>
      <link>http://www.softwaremaker.net/blog/AnnouncingTheLaunchOfTheNewASPNET1xTo20UpgradeCenterOnMSDN.aspx</link>
      <pubDate>Tue, 26 Jul 2005 23:58:21 GMT</pubDate>
      <description>&lt;p&gt;
Please take a look at the new MSDN site serving as the single content point for current
ASP.NET customers to easily make the move to ASP.NET 2.0.
&lt;/p&gt;
&lt;p&gt;
Upgrade Center: &lt;a href="http://msdn.microsoft.com/asp.net/migration/upgrade/default.aspx" target=_blank&gt;http://msdn.microsoft.com/asp.net/migration/upgrade/default.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Also, check out the new whitepaper that details the lessons learned, best practices,
and valuable techniques that will help developers upgrade their apps.
&lt;/p&gt;
&lt;p&gt;
New Upgrade Paper: &lt;a href="http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnaspp/html/upgradingaspnet.asp" target=_blank&gt;http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnaspp/html/upgradingaspnet.asp&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
For general migration (ASP, competitive, etc.) content, you can always refer to the
migration center at: &lt;a href="http://msdn.microsoft.com/asp.net/migration/" target=_blank&gt;http://msdn.microsoft.com/asp.net/migration/&lt;/a&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=bfe54b33-e6b4-43a5-9ac5-a151697a5ec4" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>.NET;Software Development;Visual Studio 2005</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=2e4743e3-f195-4d38-a9b6-699b9c690175</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,2e4743e3-f195-4d38-a9b6-699b9c690175.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p class="MsoNormal">
          <font face="Arial" size="2">
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">The
much anticipated download of a fully installed &amp; configured Visual Studio 2005
Team System Beta 2 VPC is now available for download to MSDN Universal Subscribers.
This is the same VPC that was distributed at TechEd USA and TechEd EMEA and represents
a clean install of Windows Server 2003 w/ Visual Studio 2005 Team System Beta 2.</span>
          </font>
        </p>
        <p class="MsoNormal">
          <b>
            <font face="Arial" size="2">
              <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Arial">VPC
Contents: </span>
            </font>
          </b>
        </p>
        <ul>
          <li>
            <div class="MsoNormal">
              <font face="Arial" size="2">
                <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Microsoft
Windows Server 2003 Standard Edition</span>
              </font>
              <font face="Arial" size="2">
                <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">
                </span>
              </font>
            </div>
          </li>
          <li class="MsoNormal" style="mso-list: l0 level1 lfo1">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Microsoft
Visual Studio 2005 Team Suite Beta 2 (expires May 1, 2006) </span>
            </font>
          </li>
          <li class="MsoNormal" style="mso-list: l0 level1 lfo1">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Microsoft
Visual Studio 2005 Team Foundation Server Beta 2 </span>
            </font>
          </li>
          <li class="MsoNormal" style="mso-list: l0 level1 lfo1">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Microsoft
.NET Framework 2.0 Redistributable Package Beta 2 </span>
            </font>
          </li>
          <li class="MsoNormal" style="mso-list: l0 level1 lfo1">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Microsoft
SQL Server 2005 Community Technology Preview </span>
            </font>
          </li>
          <li class="MsoNormal" style="mso-list: l0 level1 lfo1">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Microsoft
Office 2003 Standard Edition </span>
            </font>
          </li>
          <li class="MsoNormal" style="mso-list: l0 level1 lfo1">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Microsoft
Live Communication Server 2003</span>
            </font>
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">
              </span>
            </font>
          </li>
        </ul>
        <p class="MsoNormal">
          <font face="Arial" size="2">
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">This
VPC does not contain any sample projects or sample data. </span>
          </font>
        </p>
        <p class="MsoNormal">
          <b>
            <font face="Arial" size="2">
              <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Arial">Minimum
System Requirements: </span>
            </font>
          </b>
        </p>
        <ul>
          <li>
            <div class="MsoNormal">
              <font face="Arial" size="2">
                <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">PC
with 2.0 gigahertz or faster processor </span>
              </font>
            </div>
          </li>
          <li class="MsoNormal" style="mso-list: l1 level1 lfo2">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">1.5
GB RAM minimum </span>
            </font>
          </li>
          <li class="MsoNormal" style="mso-list: l1 level1 lfo2">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">10 GB
available hard disk space </span>
            </font>
          </li>
          <li class="MsoNormal" style="mso-list: l1 level1 lfo2">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Super
VGA (800 x 600) or higher video </span>
            </font>
          </li>
          <li class="MsoNormal" style="mso-list: l1 level1 lfo2">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">DVD-ROM
drive </span>
            </font>
          </li>
          <li class="MsoNormal" style="mso-list: l1 level1 lfo2">
            <font face="Arial" size="2">
              <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Microsoft
Virtual PC 2004 SP1 software</span>
            </font>
          </li>
        </ul>
        <p class="MsoNormal" style="mso-list: l1 level1 lfo2">
          <font face="Arial" size="2">
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">If you
have some trouble locating this developer-Godsend --- I have done some snopping already
and it is here: </span>
          </font>
        </p>
        <p class="MsoNormal" style="mso-list: l1 level1 lfo2">
          <font face="Arial" size="2">
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">
              <strong>
                <em>Developer
Tools &gt; Visual Studio 2005 &gt; Visual Studio 2005 Beta 2 &gt; English &gt;
Visual Studio 2005 Team System Beta 2 VPC</em>
              </strong>
            </span>
          </font>
        </p>
        <p class="MsoNormal" style="mso-list: l1 level1 lfo2">
          <font face="Arial" size="2">
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">
            </span>
          </font> 
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=2e4743e3-f195-4d38-a9b6-699b9c690175" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Visual Studio 2005 Team System Beta 2 VPC is available on MSDN Subscriber Downloads</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,2e4743e3-f195-4d38-a9b6-699b9c690175.aspx</guid>
      <link>http://www.softwaremaker.net/blog/VisualStudio2005TeamSystemBeta2VPCIsAvailableOnMSDNSubscriberDownloads.aspx</link>
      <pubDate>Tue, 26 Jul 2005 00:35:16 GMT</pubDate>
      <description>&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;The much
anticipated download of a fully installed &amp;amp; configured Visual Studio 2005 Team
System Beta 2 VPC is now available for download to MSDN Universal Subscribers. This
is the same VPC that was distributed at TechEd USA and TechEd EMEA and represents
a clean install of Windows Server 2003 w/ Visual Studio 2005 Team System Beta 2.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;b&gt;&lt;font face=Arial size=2&gt;&lt;span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;VPC
Contents: &lt;/span&gt;&lt;/font&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=MsoNormal&gt;&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Microsoft
Windows Server 2003 Standard Edition&lt;/span&gt;&lt;/font&gt; &lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;li class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Microsoft
Visual Studio 2005 Team Suite Beta 2 (expires May 1, 2006) &lt;/span&gt;&lt;/font&gt; 
&lt;li class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Microsoft
Visual Studio 2005 Team Foundation Server Beta 2 &lt;/span&gt;&lt;/font&gt; 
&lt;li class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Microsoft
.NET Framework 2.0 Redistributable Package Beta 2 &lt;/span&gt;&lt;/font&gt; 
&lt;li class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Microsoft
SQL Server 2005 Community Technology Preview &lt;/span&gt;&lt;/font&gt; 
&lt;li class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Microsoft
Office 2003 Standard Edition &lt;/span&gt;&lt;/font&gt; 
&lt;li class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Microsoft
Live Communication Server 2003&lt;/span&gt;&lt;/font&gt; &lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;This VPC
does not contain any sample projects or sample data. &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;b&gt;&lt;font face=Arial size=2&gt;&lt;span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Minimum
System Requirements: &lt;/span&gt;&lt;/font&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=MsoNormal&gt;&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;PC
with 2.0 gigahertz or faster processor &lt;/span&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;li class=MsoNormal style="mso-list: l1 level1 lfo2"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;1.5 GB RAM
minimum &lt;/span&gt;&lt;/font&gt; 
&lt;li class=MsoNormal style="mso-list: l1 level1 lfo2"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;10 GB available
hard disk space &lt;/span&gt;&lt;/font&gt; 
&lt;li class=MsoNormal style="mso-list: l1 level1 lfo2"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Super VGA
(800 x 600) or higher video &lt;/span&gt;&lt;/font&gt; 
&lt;li class=MsoNormal style="mso-list: l1 level1 lfo2"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;DVD-ROM
drive &lt;/span&gt;&lt;/font&gt; 
&lt;li class=MsoNormal style="mso-list: l1 level1 lfo2"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Microsoft
Virtual PC 2004 SP1 software&lt;/span&gt;&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=MsoNormal style="mso-list: l1 level1 lfo2"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;If&amp;nbsp;you
have some trouble locating this developer-Godsend --- I have done some snopping already
and it is here: &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="mso-list: l1 level1 lfo2"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;strong&gt;&lt;em&gt;Developer
Tools &amp;gt; Visual Studio 2005 &amp;gt; Visual Studio 2005 Beta 2&amp;nbsp;&amp;gt; English&amp;nbsp;&amp;gt;
Visual Studio 2005 Team System Beta 2 VPC&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="mso-list: l1 level1 lfo2"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=2e4743e3-f195-4d38-a9b6-699b9c690175" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>.NET;Announcements;Visual Studio 2005</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=d88a8065-8089-49f2-8d08-6c2c01889426</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,d88a8065-8089-49f2-8d08-6c2c01889426.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have recently flashed some performance graphs between Java 1.5 and the .NET counterparts
version 1.1 and 2.0 Beta2. <a href="http://msdn.microsoft.com/vstudio/java/compare/xmlperf/default.aspx" target="_blank">This</a> is
where I got the statistics from.
</p>
        <p>
You will see the outright disparity in performance gains when .NET 2.0 Beta2 is put
through the same tests with its poorer 1.1 brother and its distant cousin Java 1.5.
</p>
        <p>
...And we are still talking about .NET 2.0 <strong><em>BETA</em></strong> 2 ... Let us
see what happens when we get to <a href="http://www.microsoft.com/presspass/press/2005/jun05/TechEd2005Day2PR.mspx" target="_blank">November
7 2005</a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=d88a8065-8089-49f2-8d08-6c2c01889426" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>XML Parsing / Serializing Performance among between Java 1.5 and .NET 1.1 and 2.0 B2</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,d88a8065-8089-49f2-8d08-6c2c01889426.aspx</guid>
      <link>http://www.softwaremaker.net/blog/XMLParsingSerializingPerformanceAmongBetweenJava15AndNET11And20B2.aspx</link>
      <pubDate>Sat, 11 Jun 2005 04:05:18 GMT</pubDate>
      <description>&lt;p&gt;
I have recently flashed some performance graphs between Java 1.5 and the .NET counterparts
version 1.1 and 2.0 Beta2. &lt;a href="http://msdn.microsoft.com/vstudio/java/compare/xmlperf/default.aspx" target=_blank&gt;This&lt;/a&gt; is
where I got the statistics from.
&lt;/p&gt;
&lt;p&gt;
You will see the outright disparity in performance gains when .NET 2.0 Beta2 is put
through the same tests with its poorer 1.1 brother and its distant cousin Java 1.5.
&lt;/p&gt;
&lt;p&gt;
...And we are still talking about .NET 2.0 &lt;strong&gt;&lt;em&gt;BETA&lt;/em&gt;&lt;/strong&gt; 2 ...&amp;nbsp;Let&amp;nbsp;us
see what happens when we get&amp;nbsp;to &lt;a href="http://www.microsoft.com/presspass/press/2005/jun05/TechEd2005Day2PR.mspx" target=_blank&gt;November
7 2005&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=d88a8065-8089-49f2-8d08-6c2c01889426" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>.NET;Visual Studio 2005;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=8e4d01bf-ec27-4b42-805a-525219a88080</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,8e4d01bf-ec27-4b42-805a-525219a88080.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This has been floating around for some time BUT <a href="http://www.microsoft.com" target="_blank">MSFT
Corp</a> has released an official statement <a href="http://msdn.microsoft.com/XML/XQueryStatus/default.aspx">here</a></p>
        <p>
Since XQuery is expected to reach W3C recommendation <em><strong>only</strong></em>in
2006, it won't be shipped in the upcoming .NET Framework 2.0
</p>
        <p>
I guess people like me will have to live with <a href="http://www.w3.org/TR/xslt" target="_blank">XSLT</a> and <a href="http://www.w3.org/TR/xpath20" target="_blank">XPATH</a> for
now.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=8e4d01bf-ec27-4b42-805a-525219a88080" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>No Client-side XQuery in .NET Framework 2.0</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,8e4d01bf-ec27-4b42-805a-525219a88080.aspx</guid>
      <link>http://www.softwaremaker.net/blog/NoClientsideXQueryInNETFramework20.aspx</link>
      <pubDate>Fri, 28 Jan 2005 12:02:47 GMT</pubDate>
      <description>&lt;p&gt;
This has been floating around for some time BUT &lt;a href=http://www.microsoft.com target=_blank&gt;MSFT
Corp&lt;/a&gt; has released an official statement &lt;a href="http://msdn.microsoft.com/XML/XQueryStatus/default.aspx"&gt;here&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Since XQuery is&amp;nbsp;expected to reach W3C recommendation &lt;em&gt;&lt;strong&gt;only&lt;/strong&gt; &lt;/em&gt;in
2006, it won't be shipped in the upcoming .NET Framework 2.0
&lt;/p&gt;
&lt;p&gt;
I guess people like me will have to live with &lt;a href="http://www.w3.org/TR/xslt" target=_blank&gt;XSLT&lt;/a&gt; and &lt;a href="http://www.w3.org/TR/xpath20" target=_blank&gt;XPATH&lt;/a&gt; for
now.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=8e4d01bf-ec27-4b42-805a-525219a88080" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>.NET;Software Development;Technology;Visual Studio 2005</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=842b25f2-647c-4094-87cb-4ecdf58cb89f</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,842b25f2-647c-4094-87cb-4ecdf58cb89f.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
While doing some deep plumbing work, I discovered that Lutz Roeder's ultimate awesome <a href="http://www.aisto.com/roeder/dotnet/" target="_blank">Reflector()</a> tool
is already throwing up some wonderful Whidbey VB.NET keywords. AND I dont even have
.NET 2.0 installed on that machine yet. Cool <img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif" /></p>
        <p>
One of the keywords used is <strong>TryCast</strong>. TryCast is a new VB.NET Keyword
in VS2005 which essentially combines 2 type checks into 1. For example
</p>
        <p>
Instead of 
<hr id="null" /><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">If</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TypeOf</span> o <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Is</span> XMLElement <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Then</span><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'One
TypeCheck</span><br />
XMLElementObj <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">DirectCast</span>(o,
XMLElement)...<span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'
Another Type Check 
<hr id="null" /></span></span><p></p></span></p>
        <p>
Do this 
<hr id="null" /><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> XMLElementObj <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> XMLElement <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> TryCast(o,
XMLElement) 
<hr id="null" /><br /></span></p>
        <p>
        </p>
        <p>
Of course, performance is the differentiating issue here. <strong>TryCast</strong>,
as its name suggests, will try the cast and, if it succeeds, return the value cast
to that type, else, it returns nothing.
</p>
        <p>
Think of it as VB.NET's answer to C# “As” keyword. Here is also
a good <a href="http://www.panopticoncentral.net/archive/2004/03/02/281.aspx" target="_blank">blog</a> about
it.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=842b25f2-647c-4094-87cb-4ecdf58cb89f" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Reflector() is already throwing up Whidbey VB.NET Keywords</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,842b25f2-647c-4094-87cb-4ecdf58cb89f.aspx</guid>
      <link>http://www.softwaremaker.net/blog/ReflectorIsAlreadyThrowingUpWhidbeyVBNETKeywords.aspx</link>
      <pubDate>Tue, 30 Nov 2004 00:06:03 GMT</pubDate>
      <description>&lt;p&gt;
While doing some deep plumbing work, I discovered that Lutz Roeder's ultimate awesome &lt;a href="http://www.aisto.com/roeder/dotnet/" target=_blank&gt;Reflector()&lt;/a&gt; tool
is already throwing up some wonderful Whidbey VB.NET keywords. AND I dont even have
.NET 2.0 installed on that machine yet. Cool &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
One of the keywords used is &lt;strong&gt;TryCast&lt;/strong&gt;. TryCast is a new VB.NET Keyword
in VS2005&amp;nbsp;which essentially combines 2 type checks into 1. For example
&lt;/p&gt;
&lt;p&gt;
Instead of 
&lt;hr id=null&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;If&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TypeOf&lt;/span&gt; o &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Is&lt;/span&gt; XMLElement &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Then&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'One
TypeCheck&lt;/span&gt;
&lt;br&gt;
XMLElementObj &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;DirectCast&lt;/span&gt;(o,
XMLElement)...&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'
Another Type Check 
&lt;hr id=null&gt;
&lt;/span&gt;&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;/span&gt; 
&lt;p&gt;
Do this 
&lt;hr id=null&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; XMLElementObj &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; XMLElement &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; TryCast(o,
XMLElement) 
&lt;hr id=null&gt;
&lt;br&gt;
&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Of course, performance is the differentiating issue here. &lt;strong&gt;TryCast&lt;/strong&gt;,
as its name suggests, will try the cast and, if it succeeds, return the value cast
to that type, else, it returns nothing.
&lt;/p&gt;
&lt;p&gt;
Think of it as VB.NET's answer to C#&amp;nbsp;&amp;#8220;As&amp;#8221;&amp;nbsp;keyword. Here is also
a good &lt;a href="http://www.panopticoncentral.net/archive/2004/03/02/281.aspx" target=_blank&gt;blog&lt;/a&gt; about
it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=842b25f2-647c-4094-87cb-4ecdf58cb89f" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>Visual Studio 2005</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=e00392f5-185f-47fa-903e-dd9b0211f6d3</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,e00392f5-185f-47fa-903e-dd9b0211f6d3.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the most wonderful enhancements to ASMX v2.0 is to bring the age-old classic
Event-Based Asynchronous into the proxy stubs of the client.
</p>
        <p>
This Event-Based paradigm has been around for a while since the “legacy”
VB Days. It adds another layer of abstraction on top of delegates and callbacks which
makes it a lot simpler to code and easier on the design and your eyes as well.
</p>
        <p>
The new event-based asynchronous programming model simplifies the task of invoking
a Web service asynchronously. In addition to using an event paradigm instead of Begin&lt;YourMethodNameHere&gt;
and End&lt;YourMethodNameHere&gt;, the new programming model also takes care of thread
synchronization automatically so that event handlers are invoked on the same thread
that made the asynchronous call.
</p>
        <p>
There is an article <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/wsnetfx2.asp" target="_blank">here</a> by
Yasser, Matt and Co. that sums up the this Event-Based Asynchronous Programming. I
will further rip open the proxy stubs to examine the inner plumbings here.
</p>
        <p>
If you use WSDL v2.0.40607.16 to generate the classes from the contracts, you will
find that the new generated classes contain a lot more methods and properties. Yes,
thats right, most of the functionality will be exposed as properties rather than fields
now, which makes dataBinding easier. If you choose to retain the fields as of .NET
1.*, there is a switch /fields in the WSDL command line option that allows you to
do so.
</p>
        <p>
One of the most obvious thing that catches the eye is the amount of new methods that
are generated that deals with asynchronous programming of Web Services. This makes
a lot of sense once people start to move their mindset away from the “RPC-ish”
behavior of Web Services. Of course, this whole sense of asynchronous programming
is still rather “RPC-ish” hidden behind the shrouds of multi-threaded
programming. It will take a while before people can move away from that and accept
the different programming models that SOAP can offer besides that of client-server
dialogs. This will be the advent of Service-Orientation which some of us are trying
to drive into the mainstream.
</p>
        <p>
The older way of using Delegates and Callbacks with Begin&lt;YourMethodNameHere&gt;
and End&lt;YourMethodNameHere&gt; are still there in ASMX v2.0 and rightfully so,
as this method of programming, altho slightly clunkier, offers limitless ways to handle
threads and callbacks.
</p>
        <p>
On the other hand, this Event-Based Asynchronous paradigm is NOT too shabby either...:)
</p>
        <p>
I will just produce relevant snippets of what is in the proxy stubs generated
by WSDL v2.0.40607.16
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">&lt;System.Diagnostics.DebuggerStepThroughAttribute(),
_<br />
System.ComponentModel.DesignerCategoryAttribute(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"code"</span>),
_<br />
System.Web.Services.WebServiceBindingAttribute(Name:=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"IndexSoap"</span>,
[<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Namespace</span>]:=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://softwaremaker.net"</span>)&gt;
_<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Class</span> Index<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Inherits</span> System.Web.Services.Protocols.SoapHttpClientProtocol<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Private</span> HelloLongRunningWorldOperationCompleted <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> System.Threading.SendOrPostCallback<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Event</span> HelloLongRunningWorldCompleted <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> HelloLongRunningWorldCompletedEventHandler<br /><br />
&lt;System.Web.Services.Protocols.SoapDocumentMethodAttribute(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://softwaremaker.net/HelloLongRunningWorld"</span>,
RequestNamespace:=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://softwaremaker.net"</span>,
ResponseNamespace:=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://softwaremaker.net"</span>,
Use:=System.Web.Services.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Description</span>.SoapBindingUse.Literal,
ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)&gt; _<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span> HelloLongRunningWorld() <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">String</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> results() <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.Invoke(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"HelloLongRunningWorld"</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>(-1)
{})<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Return</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CType</span>(results(0), <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">String</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span> BeginHelloLongRunningWorld(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> callback <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> System.AsyncCallback, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> asyncState <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> System.IAsyncResult<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Return</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.BeginInvoke(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"HelloLongRunningWorld"</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>(-1)
{}, callback, asyncState)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span> EndHelloLongRunningWorld(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> asyncResult <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> System.IAsyncResult) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">String</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> results() <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.EndInvoke(asyncResult)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Return</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CType</span>(results(0), <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">String</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Overloads</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> HelloLongRunningWorldAsync()<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.HelloLongRunningWorldAsync(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Nothing</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Overloads</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> HelloLongRunningWorldAsync(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> userState <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">If</span> (<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.HelloLongRunningWorldOperationCompleted <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Is</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Nothing</span>) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Then</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.HelloLongRunningWorldOperationCompleted <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">AddressOf</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.OnHelloLongRunningWorldOperationCompleted<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">If</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.InvokeAsync(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"HelloLongRunningWorld"</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>(-1)
{}, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.HelloLongRunningWorldOperationCompleted,
userState)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Private</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> OnHelloLongRunningWorldOperationCompleted(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> arg <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">If</span> (<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Not</span> (<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.HelloLongRunningWorldCompletedEvent) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Is</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Nothing</span>) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Then</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> invokeArgs <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> System.Web.Services.Protocols.InvokeCompletedEventArgs <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CType</span>(arg,
System.Web.Services.Protocols.InvokeCompletedEventArgs)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">RaiseEvent</span> HelloLongRunningWorldCompleted(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> HelloLongRunningWorldCompletedEventArgs(invokeArgs.Results,
invokeArgs.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Error</span>,
invokeArgs.Cancelled, invokeArgs.UserState))<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">If</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Shadows</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> CancelAsync(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> userState <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">MyBase</span>.CancelAsync(userState)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Class</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Delegate</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> HelloLongRunningWorldCompletedEventHandler(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> sender <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> args <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> HelloLongRunningWorldCompletedEventArgs)<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Class</span> HelloLongRunningWorldCompletedEventArgs<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Inherits</span> System.ComponentModel.AsyncCompletedEventArgs<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Private</span> results() <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Friend</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span>(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> results() <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> exception <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> System.Exception, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> cancelled <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Boolean</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> userState <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">MyBase</span>.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span>(exception,
cancelled, userState)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.results <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> results<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ReadOnly</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Property</span> Result() <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">String</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Get</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.RaiseExceptionIfNecessary()<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Return</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CType</span>(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Me</span>.results(0), <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">String</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Get</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Property</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Class</span></span>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
              <font face="Verdana" color="#003300" size="2">
                <hr id="null" />
Pretty, huh ? Considering that you dont even have to lift a single finger to generate
all these :) 
</font>
            </span>
          </span>
        </p>
        <p>
        </p>
        <p>
So if you are going to use an Event-Based model to invoke a Service asynchronously,
you would so something like this [simplistically, of course] 
<hr id="null" /><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Private</span> proxy <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> client.localhost.Index<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Private</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> Button1_Click(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> sender <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> System.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> e <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> System.EventArgs) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Handles</span> Button1.Click<br />
proxy <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> Index<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">AddHandler</span> a.HelloLongRunningWorldCompleted, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> HelloLongRunningWorldCompletedEventHandler(<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">AddressOf</span> CallMeBack)<br />
proxy.HelloLongRunningWorldAsync()<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Private</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> CallMeBack(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> sender <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> e <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> HelloLongRunningWorldCompletedEventArgs)<br />
MessageBox.Show(e.Result)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Class</span></span></span></span><hr id="null" />
This looks so much cleaner and elegant and intuitive, which then makes maintenance
a lot easier. Most importantly, it keeps to the theme of VS2005 which is enhancing
Developer Productivity. 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
The AddHandler method provides some sort of a dynamic hook-up to basically
link an object's event to a method that should be called to handle that event. This
model is used very much in Windows VB/.NET programming with keywords like
Handles, RaiseEvent, Event, etc.
</p>
        <p>
For example...
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Class</span> Man<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Event</span> SawSomethingInteresting(s <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">as</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>)<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> SeeSomething(s <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">as</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">If</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TypeOf</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Is</span> PrettyWoman<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">RaiseEvent</span> SawSomethingInteresting(s)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Class</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Class</span> Main<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> M <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">as</span> Man <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> Man<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">AddHandler</span> M.SawSomethingInteresting, <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">AddressOf</span> OnSeeingSomethingInteresting<br /><br />
M.SeeSomething(PrettyWoman)<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> OnSeeingSomethingInteresting(s <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">as</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Object</span>)<br />
Throat.VoiceBox.MakeFunnyNoises<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Class</span></span>
        </p>
        <p>
Another good thing about AddHandlers is that it offers a dynamic Link-Up to Function
Pointers at Runtime. All those people who have, at some point in time, programmed
custom, dynamic controls at runtime will know the power of AddHandlers. You can specify
as many AddHandlers as you like, and the events raised are sent to all handlers
in a serial, synchronous process. This means that the event is not delivered
to the next handler until the current handler is completed. So, while its powerful,
use it with proper care.
</p>
        <p>
Moving on...
</p>
        <ul>
          <li>
            <em>proxy.HelloLongRunningWorldCompleted</em> is of type <em>HelloLongRunningWorldCompletedEventHandler</em> with
a signature of 2 parameters (<em>object</em> and <em>HelloLongRunningWorldCompletedEventArgs</em>)
declared as an <em>event</em>. With the hookup to any CallBack Method (CallMeBack),
this also means that CallMeBack must have the same signatures or it will NOT compile.
This is one of the great type-safe features that Delegates offer in .NET. 
</li>
          <li>
            <em>proxy.HelloLongRunningWorldAsync</em> is an overloaded method that basically calls
InvokeAsync of the base <em>SoapHttpClientProtocol</em> class which calls the method
“HelloLongRunningWorld” asynchronously.</li>
        </ul>
        <p>
          <hr id="null" />
        </p>
        <p>
OverLoads Protected Function InvokeAsync( _<br />
 ByVal methodName As String, _<br />
 ByVal parameters() As Object, _<br />
 ByVal callback As SendOrPostCallback, _<br />
 ByVal userState As Object _<br />
) As Void
</p>
        <p>
        </p>
        <p>
where...
</p>
        <ol>
        </ol>
        <ol>
          <li>
methodName = The name of the method to invoke 
</li>
          <li>
parameters = The parameters to pass to the method. 
</li>
          <li>
callback = The delegate called when the method invocation has completed. 
</li>
          <li>
userState = An object used to pass state information into the callback delegate.</li>
        </ol>
        <p>
          <hr id="null" />
        </p>
        <p>
        </p>
        <p>
In our case of the client proxy stubs, 
</p>
        <p>
Me.InvokeAsync("HelloLongRunningWorld", New Object(-1) {}, Me.HelloLongRunningWorldOperationCompleted,
userState)
</p>
        <ol>
        </ol>
        <ol>
          <li>
methodName = HelloLongRunningWorld. This is self-explanatory 
</li>
          <li>
parameters = New Object(-1) {}. This is how parameters are passed in .NET SOAP Calls. 
</li>
          <li>
callback = HelloLongRunningWorldOperationCompleted which is of type System.Threading.SendOrPostCallback.
This is a new delegate in .NET 2.0 and it represents a callback method that you want
to execute when a message is to be dispatched to a synchronization context. Create
the delegate by passing your callback method to the SendOrPostCallback constructor.
The function pointer in this case is the AddressOf Me.OnHelloLongRunningWorldOperationCompleted.</li>
        </ol>
        <ul>
          <li>
The OnHelloLongRunningWorldOperationCompleted method is the callback method I want
to execute in my proxy class when the message is ready to be dispatched. This will
then invoke the all-too-familiar RaiseEvent method. This method also instantiates
yet another new class in .NET 2.0 called InvokeCompletedEventArgs. It represents the
results of an asynchronously invoked web method. I wont go into much details about
this here. 
</li>
          <li>
The RaiseEvent keyword, like I have mentioned earlier, sends the event to all Event
Handlers registered with the AddHandler keyword. In this case, it will be a callback
to the delegate (HelloLongRunningWorldCompletedEventHandler) which has a function
pointer to the CallMeBack Method. 
</li>
          <li>
CallMeBack will produce a Messagebox with the results once the results are dispatched
and the asychronous callback is completed.</li>
        </ul>
        <p>
There, doesnt that look so much better, neater and definitely much more intuitive
? Anyways, the main chunk of code is now done at the client proxy stubs which is automatically
generated by WSDL v2.0.40607.16. It is therefore fair enough to assume that the inner
plumbings is and should be abstracted away from the business developers whose job
is to write lesser code and create more value and productivity. The asynchronous programming
of Services had just gotten so much more simplified !
</p>
        <p>
I believe that .NET developers will adapt to this new Event-Based Asynchronous programming
model in ASMX v2.0 easily and will show a preference for it over the slightly clunkier
Begin&lt;YourMethodNameHere&gt; and End&lt;YourMethodNameHere&gt; model of delegates
and asynchronous callbacks.
</p>
        <p>
This blog post is replicated from a previous blog <a href="http://dotnetjunkies.com/WebLog/softwaremaker/archive/2004/07/31/20865.aspx" target="_blank">here</a>.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e00392f5-185f-47fa-903e-dd9b0211f6d3" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Making sense of the new Event-Based Asynchronous Programming Model in ASMX .NET v2.0</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,e00392f5-185f-47fa-903e-dd9b0211f6d3.aspx</guid>
      <link>http://www.softwaremaker.net/blog/MakingSenseOfTheNewEventBasedAsynchronousProgrammingModelInASMXNETV20.aspx</link>
      <pubDate>Mon, 22 Nov 2004 00:39:15 GMT</pubDate>
      <description>&lt;p&gt;
One of the most wonderful enhancements to ASMX v2.0 is to bring the age-old classic
Event-Based Asynchronous into the proxy stubs of the client.
&lt;/p&gt;
&lt;p&gt;
This Event-Based paradigm has been around for a while since the&amp;nbsp;&amp;#8220;legacy&amp;#8221;
VB Days. It adds another layer of abstraction on top of delegates and callbacks which
makes it a lot simpler to code and easier on the design and your eyes as well.
&lt;/p&gt;
&lt;p&gt;
The new event-based asynchronous programming model simplifies the task of invoking
a Web service asynchronously. In addition to using an event paradigm instead of Begin&amp;lt;YourMethodNameHere&amp;gt;
and End&amp;lt;YourMethodNameHere&amp;gt;, the new programming model also takes care of thread
synchronization automatically so that event handlers are invoked on the same thread
that made the asynchronous call.
&lt;/p&gt;
&lt;p&gt;
There is an article &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/wsnetfx2.asp" target=_blank&gt;here&lt;/a&gt;&amp;nbsp;by
Yasser, Matt and Co. that sums up the this Event-Based Asynchronous Programming. I
will further rip open the proxy stubs to examine the inner plumbings here.
&lt;/p&gt;
&lt;p&gt;
If you use WSDL v2.0.40607.16 to generate the classes from the contracts, you will
find that the new generated classes contain a lot more methods and properties. Yes,
thats right, most of the functionality will be exposed as properties rather than fields
now, which makes dataBinding easier. If you choose to retain the fields as of .NET
1.*, there is a switch /fields in the WSDL command line option that allows you to
do so.
&lt;/p&gt;
&lt;p&gt;
One of the most obvious thing that catches the eye is the amount of new methods that
are generated that deals with asynchronous programming of Web Services. This makes
a lot of sense once people start to move their mindset away from the &amp;#8220;RPC-ish&amp;#8221;
behavior of Web Services. Of course, this whole sense of asynchronous programming
is still rather &amp;#8220;RPC-ish&amp;#8221; hidden behind the shrouds of multi-threaded
programming. It will take a while before people can move away from that and accept
the different programming models that SOAP can offer besides that of client-server
dialogs. This will be the advent of Service-Orientation which some of us are trying
to drive into the mainstream.
&lt;/p&gt;
&lt;p&gt;
The older way of using Delegates and Callbacks with Begin&amp;lt;YourMethodNameHere&amp;gt;
and End&amp;lt;YourMethodNameHere&amp;gt; are still there in ASMX v2.0 and rightfully so,
as this method of programming, altho slightly clunkier, offers limitless ways to handle
threads and callbacks.
&lt;/p&gt;
&lt;p&gt;
On the other hand, this Event-Based Asynchronous paradigm is NOT too shabby either...:)
&lt;/p&gt;
&lt;p&gt;
I will just&amp;nbsp;produce relevant&amp;nbsp;snippets of what is in the proxy stubs generated
by WSDL v2.0.40607.16
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;lt;System.Diagnostics.DebuggerStepThroughAttribute(),
_&lt;br&gt;
System.ComponentModel.DesignerCategoryAttribute(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"code"&lt;/span&gt;),
_&lt;br&gt;
System.Web.Services.WebServiceBindingAttribute(Name:=&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"IndexSoap"&lt;/span&gt;,
[&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Namespace&lt;/span&gt;]:=&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://softwaremaker.net"&lt;/span&gt;)&amp;gt;
_&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Class&lt;/span&gt; Index&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Inherits&lt;/span&gt; System.Web.Services.Protocols.SoapHttpClientProtocol&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Private&lt;/span&gt; HelloLongRunningWorldOperationCompleted &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; System.Threading.SendOrPostCallback&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Event&lt;/span&gt; HelloLongRunningWorldCompleted &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; HelloLongRunningWorldCompletedEventHandler&lt;br&gt;
&lt;br&gt;
&amp;lt;System.Web.Services.Protocols.SoapDocumentMethodAttribute(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://softwaremaker.net/HelloLongRunningWorld"&lt;/span&gt;,
RequestNamespace:=&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://softwaremaker.net"&lt;/span&gt;,
ResponseNamespace:=&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://softwaremaker.net"&lt;/span&gt;,
Use:=System.Web.Services.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Description&lt;/span&gt;.SoapBindingUse.Literal,
ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)&amp;gt; _&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt; HelloLongRunningWorld() &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;String&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; results() &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.Invoke(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"HelloLongRunningWorld"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;(-1)
{})&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Return&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;CType&lt;/span&gt;(results(0), &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;String&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt; BeginHelloLongRunningWorld(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; callback &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; System.AsyncCallback, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; asyncState &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; System.IAsyncResult&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Return&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.BeginInvoke(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"HelloLongRunningWorld"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;(-1)
{}, callback, asyncState)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt; EndHelloLongRunningWorld(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; asyncResult &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; System.IAsyncResult) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;String&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; results() &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.EndInvoke(asyncResult)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Return&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;CType&lt;/span&gt;(results(0), &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;String&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Overloads&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; HelloLongRunningWorldAsync()&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.HelloLongRunningWorldAsync(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Nothing&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Overloads&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; HelloLongRunningWorldAsync(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; userState &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;If&lt;/span&gt; (&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.HelloLongRunningWorldOperationCompleted &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Is&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Nothing&lt;/span&gt;) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Then&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.HelloLongRunningWorldOperationCompleted &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;AddressOf&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.OnHelloLongRunningWorldOperationCompleted&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;If&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.InvokeAsync(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"HelloLongRunningWorld"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;(-1)
{}, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.HelloLongRunningWorldOperationCompleted,
userState)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Private&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; OnHelloLongRunningWorldOperationCompleted(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; arg &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;If&lt;/span&gt; (&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Not&lt;/span&gt; (&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.HelloLongRunningWorldCompletedEvent) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Is&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Nothing&lt;/span&gt;) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Then&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; invokeArgs &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; System.Web.Services.Protocols.InvokeCompletedEventArgs &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;CType&lt;/span&gt;(arg,
System.Web.Services.Protocols.InvokeCompletedEventArgs)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;RaiseEvent&lt;/span&gt; HelloLongRunningWorldCompleted(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; HelloLongRunningWorldCompletedEventArgs(invokeArgs.Results,
invokeArgs.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Error&lt;/span&gt;,
invokeArgs.Cancelled, invokeArgs.UserState))&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;If&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Shadows&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; CancelAsync(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; userState &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;MyBase&lt;/span&gt;.CancelAsync(userState)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Class&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Delegate&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; HelloLongRunningWorldCompletedEventHandler(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; sender &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; args &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; HelloLongRunningWorldCompletedEventArgs)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Class&lt;/span&gt; HelloLongRunningWorldCompletedEventArgs&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Inherits&lt;/span&gt; System.ComponentModel.AsyncCompletedEventArgs&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Private&lt;/span&gt; results() &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Friend&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; results() &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; exception &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; System.Exception, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; cancelled &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Boolean&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; userState &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;MyBase&lt;/span&gt;.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt;(exception,
cancelled, userState)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.results &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; results&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ReadOnly&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Property&lt;/span&gt; Result() &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;String&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Get&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.RaiseExceptionIfNecessary()&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Return&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;CType&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Me&lt;/span&gt;.results(0), &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;String&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Get&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Property&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Class&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font face=Verdana color=#003300 size=2&gt; 
&lt;hr id=null&gt;
Pretty, huh ? Considering that you dont even have to lift a single finger to generate
all these :) 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
So if you are going to use an Event-Based model to invoke a Service asynchronously,
you would so something like this [simplistically, of course] 
&lt;hr id=null&gt;
&gt;&gt;&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Private&lt;/span&gt; proxy &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; client.localhost.Index&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Private&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; Button1_Click(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; sender &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; System.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; e &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Handles&lt;/span&gt; Button1.Click&lt;br&gt;
proxy &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; Index&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;AddHandler&lt;/span&gt; a.HelloLongRunningWorldCompleted, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; HelloLongRunningWorldCompletedEventHandler(&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;AddressOf&lt;/span&gt; CallMeBack)&lt;br&gt;
proxy.HelloLongRunningWorldAsync()&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Private&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; CallMeBack(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; sender &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; e &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; HelloLongRunningWorldCompletedEventArgs)&lt;br&gt;
MessageBox.Show(e.Result)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
&lt;hr id=null&gt;
This looks so much cleaner and elegant and intuitive, which then makes maintenance
a lot easier. Most importantly, it keeps to the theme of VS2005 which is enhancing
Developer Productivity. 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The AddHandler method&amp;nbsp;provides&amp;nbsp;some sort of a dynamic&amp;nbsp;hook-up to basically
link an object's event to a method that should be called to handle that event. This
model is used very much in Windows VB/.NET programming with&amp;nbsp;keywords&amp;nbsp;like
Handles, RaiseEvent, Event, etc.
&lt;/p&gt;
&lt;p&gt;
For example...
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Class&lt;/span&gt; Man&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Event&lt;/span&gt; SawSomethingInteresting(s &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;as&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; SeeSomething(s &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;as&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;If&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TypeOf&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Is&lt;/span&gt; PrettyWoman&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;RaiseEvent&lt;/span&gt; SawSomethingInteresting(s)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Class&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Class&lt;/span&gt; Main&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; M &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;as&lt;/span&gt; Man &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; Man&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;AddHandler&lt;/span&gt; M.SawSomethingInteresting, &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;AddressOf&lt;/span&gt; OnSeeingSomethingInteresting&lt;br&gt;
&lt;br&gt;
M.SeeSomething(PrettyWoman)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; OnSeeingSomethingInteresting(s &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;as&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Object&lt;/span&gt;)&lt;br&gt;
Throat.VoiceBox.MakeFunnyNoises&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Class&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Another&amp;nbsp;good thing about AddHandlers is that it offers a dynamic Link-Up to Function
Pointers at Runtime. All those people who have, at some point in time, programmed
custom, dynamic controls at runtime will know the power of AddHandlers. You can specify
as many AddHandlers as you like, and the events raised are sent&amp;nbsp;to all handlers
in&amp;nbsp;a serial, synchronous process. This means that the event is not delivered
to the next handler until the current handler is completed. So, while its powerful,
use it with proper care.
&lt;/p&gt;
&lt;p&gt;
Moving on...
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;proxy.HelloLongRunningWorldCompleted&lt;/em&gt; is&amp;nbsp;of type &lt;em&gt;HelloLongRunningWorldCompletedEventHandler&lt;/em&gt;&amp;nbsp;with
a signature of 2 parameters (&lt;em&gt;object&lt;/em&gt; and &lt;em&gt;HelloLongRunningWorldCompletedEventArgs&lt;/em&gt;)
declared as an &lt;em&gt;event&lt;/em&gt;. With the hookup to&amp;nbsp;any CallBack Method (CallMeBack),
this also means that CallMeBack must have the same signatures or it will NOT compile.
This is one of the great type-safe features that Delegates offer in .NET. 
&lt;li&gt;
&lt;em&gt;proxy.HelloLongRunningWorldAsync&lt;/em&gt; is an overloaded method that basically calls
InvokeAsync of the base &lt;em&gt;SoapHttpClientProtocol&lt;/em&gt; class which calls the method
&amp;#8220;HelloLongRunningWorld&amp;#8221; asynchronously.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;hr id=null&gt;
&lt;p&gt;
OverLoads Protected Function InvokeAsync( _&lt;br&gt;
&amp;nbsp;ByVal methodName As String, _&lt;br&gt;
&amp;nbsp;ByVal parameters() As Object, _&lt;br&gt;
&amp;nbsp;ByVal callback As SendOrPostCallback, _&lt;br&gt;
&amp;nbsp;ByVal userState As Object _&lt;br&gt;
) As Void
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
where...
&lt;/p&gt;
&lt;ol&gt;
&lt;ol&gt;
&lt;li&gt;
methodName = The name of the method to invoke 
&lt;/li&gt;
&lt;li&gt;
parameters = The parameters to pass to the method. 
&lt;li&gt;
callback = The delegate called when the method invocation has completed. 
&lt;li&gt;
userState = An object used to pass state information into the callback delegate.&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;p&gt;
&lt;hr id=null&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
In our case of the client proxy stubs, 
&lt;/p&gt;
&lt;p&gt;
Me.InvokeAsync("HelloLongRunningWorld", New Object(-1) {}, Me.HelloLongRunningWorldOperationCompleted,
userState)
&lt;/p&gt;
&lt;ol&gt;
&lt;ol&gt;
&lt;li&gt;
methodName = HelloLongRunningWorld. This is self-explanatory 
&lt;li&gt;
parameters = New Object(-1) {}. This is how parameters are passed in .NET SOAP Calls. 
&lt;li&gt;
callback = HelloLongRunningWorldOperationCompleted which is of type System.Threading.SendOrPostCallback.
This is a new delegate in .NET 2.0 and it represents a callback method that you want
to execute when a message is to be dispatched to a synchronization context. Create
the delegate by passing your callback method to the SendOrPostCallback constructor.
The function pointer in this case is the AddressOf Me.OnHelloLongRunningWorldOperationCompleted.&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;ul&gt;
&lt;li&gt;
The OnHelloLongRunningWorldOperationCompleted method is the callback method I want
to execute in my proxy class when the message is ready to be dispatched. This will
then invoke the all-too-familiar RaiseEvent method. This method also instantiates
yet another new class in .NET 2.0 called InvokeCompletedEventArgs. It represents the
results of an asynchronously invoked web method. I wont go into much details about
this here. 
&lt;li&gt;
The RaiseEvent keyword, like I have mentioned earlier, sends the event to all Event
Handlers registered with the AddHandler keyword. In this case, it will be a callback
to the delegate (HelloLongRunningWorldCompletedEventHandler) which has a function
pointer to the CallMeBack Method. 
&lt;li&gt;
CallMeBack will produce a Messagebox with the results once the results are dispatched
and the asychronous callback is completed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
There, doesnt that look so much better, neater and definitely much more intuitive
? Anyways, the main chunk of code is now done at the client proxy stubs which is automatically
generated by WSDL v2.0.40607.16. It is therefore fair enough to assume that the inner
plumbings is and should be abstracted away from the business developers whose job
is to write lesser code and create more value and productivity. The asynchronous programming
of Services had just gotten so much more simplified !
&lt;/p&gt;
&lt;p&gt;
I believe that .NET developers will adapt to this new Event-Based Asynchronous programming
model in ASMX v2.0 easily and will show a preference for it over the slightly clunkier
Begin&amp;lt;YourMethodNameHere&amp;gt; and End&amp;lt;YourMethodNameHere&amp;gt; model of delegates
and asynchronous callbacks.
&lt;/p&gt;
&lt;p&gt;
This blog post is replicated from a previous blog &lt;a href="http://dotnetjunkies.com/WebLog/softwaremaker/archive/2004/07/31/20865.aspx" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e00392f5-185f-47fa-903e-dd9b0211f6d3" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>Visual Studio 2005;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=bed16320-8859-47dc-a15c-43d1591ab2ab</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,bed16320-8859-47dc-a15c-43d1591ab2ab.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Http.sys is a kernel-mode networking component of Windows and is baked into the base
OS of Windows Server 2003 and now, Windows XP SP2. See <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/http/http/http_api_start_page.asp" target="_blank">here</a> for
more information.
</p>
        <p>
According to Don Box <a href="http://www.gotdotnet.com/team/dbox/default.aspx?key=2004-03-29T05:40:47Z" target="_blank">here</a>,
the thinking is that it's better to have one hardened implementation in the base OS
than 4-5 one-off implementations in different products/technologies. Old-timers may
recall that early builds of the .NET Framework installed HTTP.SYS in order to get
.NET Remoting to work with HTTP (I think it was called the COM+ web server). The fact
that we had to ship a one-off HTTP server implementation in .NET Remoting was an unfortunate
byproduct of HTTP.SYS not having a ship vehicle that was close to .NET V1. Hopefully
making HTTP.SYS part of the base OS will keep others from going down the same path.
</p>
        <p>
VS2005 now comes with a <em>Managed Framework</em> for Http.sys (HttpListener). Even
though it was possible to host ASPX and ASMX in any managed process (WinForms, ConsoleApps,
WindowsServices...) since .NET v1.0, the HttpListener class that comes with VS2005
makes it a lot easier.
</p>
        <p>
          <a href="http://www.asp.net/projects/cassini/download/Default.aspx?tabindex=0&amp;tabid=1" target="_blank">ASP.NET
Cassini Web Server</a> is an example of a Windows Application hosting ASP.NET
and is used throughout ASP.NET v2.0. It can run on your desktop without the use of
IIS.
</p>
        <p>
I will show some very simplistic examples of the how-tos in hosting HTTP Processes
in a Console Application using a Console Application in .NET 2.0. In this case, I
have built a simple IIS-less Web Server that can churn out Web Pages, SOAP and even
SOAP that is WS-* Compliant using <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 2.0 !!!
</p>
        <p>
You can find information related to the above from my previous blog post <a href="http://dotnetjunkies.com/WebLog/softwaremaker/archive/2004/08/08/21447.aspx" target="_blank">here</a>.
Do take note that the codes show there are for test and demo purposes only. There
needs to be major re-work and re-factoring before it can even be considered usable.
</p>
        <p>
On another node, <a href="http://pluralsight.com/blogs/aaron/default.aspx" target="_blank">Aaron
Skonnard</a> has just published an article <a href="http://msdn.microsoft.com/msdnmag/issues/04/12/ServiceStation/default.aspx" target="_blank">here</a> that
gives a detailed explanation on the above. Do check it out.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=bed16320-8859-47dc-a15c-43d1591ab2ab" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>VS2005 Beta1, WSE2.0, http.sys and the HTTPListener: Look Ma, NO IIS</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,bed16320-8859-47dc-a15c-43d1591ab2ab.aspx</guid>
      <link>http://www.softwaremaker.net/blog/VS2005Beta1WSE20HttpsysAndTheHTTPListenerLookMaNOIIS.aspx</link>
      <pubDate>Mon, 22 Nov 2004 00:22:05 GMT</pubDate>
      <description>&lt;p&gt;
Http.sys is a kernel-mode networking component of Windows and is baked into the base
OS of Windows Server 2003 and now, Windows XP SP2. See &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/http/http/http_api_start_page.asp" target=_blank&gt;here&lt;/a&gt; for
more information.
&lt;/p&gt;
&lt;p&gt;
According to Don Box &lt;a href="http://www.gotdotnet.com/team/dbox/default.aspx?key=2004-03-29T05:40:47Z" target=_blank&gt;here&lt;/a&gt;,
the thinking is that it's better to have one hardened implementation in the base OS
than 4-5 one-off implementations in different products/technologies. Old-timers may
recall that early builds of the .NET Framework installed HTTP.SYS in order to get
.NET Remoting to work with HTTP (I think it was called the COM+ web server). The fact
that we had to ship a one-off HTTP server implementation in .NET Remoting was an unfortunate
byproduct of HTTP.SYS not having a ship vehicle that was close to .NET V1. Hopefully
making HTTP.SYS part of the base OS will keep others from going down the same path.
&lt;/p&gt;
&lt;p&gt;
VS2005 now comes with a &lt;em&gt;Managed Framework&lt;/em&gt; for Http.sys (HttpListener). Even
though it was possible to host ASPX and ASMX in any managed process (WinForms, ConsoleApps,
WindowsServices...) since .NET v1.0, the HttpListener class that comes with VS2005
makes it a lot easier.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.asp.net/projects/cassini/download/Default.aspx?tabindex=0&amp;amp;tabid=1" target=_blank&gt;ASP.NET
Cassini Web Server&lt;/a&gt; is an example of&amp;nbsp;a Windows Application hosting ASP.NET
and is used throughout ASP.NET v2.0. It can run on your desktop without the use of
IIS.
&lt;/p&gt;
&lt;p&gt;
I will&amp;nbsp;show some very simplistic examples of the how-tos in hosting HTTP Processes
in a Console Application using a Console Application in .NET 2.0. In this case, I
have built a simple IIS-less Web Server that can churn out Web Pages, SOAP and even
SOAP that is WS-* Compliant using &lt;a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements"&gt;Web
Services Enhancements (WSE)&lt;/a&gt; 2.0 !!!
&lt;/p&gt;
&lt;p&gt;
You can find information related to the above from my previous blog post &lt;a href="http://dotnetjunkies.com/WebLog/softwaremaker/archive/2004/08/08/21447.aspx" target=_blank&gt;here&lt;/a&gt;.
Do take note that the codes show there are for test and demo purposes only. There
needs to be major re-work and re-factoring before it can even be considered usable.
&lt;/p&gt;
&lt;p&gt;
On another node, &lt;a href="http://pluralsight.com/blogs/aaron/default.aspx" target=_blank&gt;Aaron
Skonnard&lt;/a&gt; has just published an article &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/12/ServiceStation/default.aspx" target=_blank&gt;here&lt;/a&gt; that
gives a detailed explanation on the above. Do check it out.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=bed16320-8859-47dc-a15c-43d1591ab2ab" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>Visual Studio 2005;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=2e0acdd5-7234-47b8-900b-1b2e43f0ccd2</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,2e0acdd5-7234-47b8-900b-1b2e43f0ccd2.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://dotnetjunkies.com/WebLog/softwaremaker/category/1373.aspx" target="_blank">My
previous blogs on Visual Studio 2005</a>
        </p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=2e0acdd5-7234-47b8-900b-1b2e43f0ccd2" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Previously, on Softwaremaker - Visual Studio 2005</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,2e0acdd5-7234-47b8-900b-1b2e43f0ccd2.aspx</guid>
      <link>http://www.softwaremaker.net/blog/PreviouslyOnSoftwaremakerVisualStudio2005.aspx</link>
      <pubDate>Fri, 29 Oct 2004 15:11:22 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://dotnetjunkies.com/WebLog/softwaremaker/category/1373.aspx" target=_blank&gt;My
previous blogs on Visual Studio 2005&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=2e0acdd5-7234-47b8-900b-1b2e43f0ccd2" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>Visual Studio 2005</category>
    </item>
  </channel>
</rss>