<?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 - .NET</title>
    <link>http://www.softwaremaker.net/blog/</link>
    <description>&lt;Challenging Conventions /&gt;</description>
    <language>en-us</language>
    <copyright>William T</copyright>
    <lastBuildDate>Thu, 12 Nov 2009 10:07:56 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=da04beac-4557-4f52-8af8-d76c167762e2</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,da04beac-4557-4f52-8af8-d76c167762e2.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Q: There is a <a href="http://msdn2.microsoft.com/en-us/netframework/aa663328.aspx" target="_blank">Windows
Workflow Foundation (WF)</a><font color="#000000" size="3" face="Calibri">workflow
service which contains only one pair of Receive and SendReply. Data will be sent through
the Receive activity and how do I get the workflow service to return the
GUID of the workflow instance in SendReply activity.</font></p>
        <p>
          <font color="#000000" size="3" face="Calibri">A: Write a custom activity to retrieve
it (See below). Bind that to a variable and bind that variable to the SendReply.Content</font>
        </p>
        <p>
          <font color="#808080">
            <strong>
              <em>    public sealed class GetWorkflowInstanceId
: CodeActivity&lt;Guid&gt;<br />
    {<br />
        protected override Guid Execute(CodeActivityContext
context)<br />
        {<br />
            return context.WorkflowInstanceId;<br />
        }<br />
    }</em>
            </strong>
          </font>
        </p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=da04beac-4557-4f52-8af8-d76c167762e2" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Retrieving GUID of a WF Workflow Service</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,da04beac-4557-4f52-8af8-d76c167762e2.aspx</guid>
      <link>http://www.softwaremaker.net/blog/RetrievingGUIDOfAWFWorkflowService.aspx</link>
      <pubDate>Thu, 12 Nov 2009 10:07:56 GMT</pubDate>
      <description>&lt;p&gt;
Q:&amp;nbsp;There is a &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663328.aspx target=_blank&gt;Windows
Workflow Foundation (WF)&lt;/a&gt; &lt;font color=#000000 size=3 face=Calibri&gt;workflow service
which contains only one pair of Receive and SendReply. Data will be sent through the
Receive activity and&amp;nbsp;how do I get the&amp;nbsp;workflow service to return the GUID
of the workflow instance in SendReply activity.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;A: Write a custom activity to retrieve it
(See below). Bind that to a variable and bind that variable to the SendReply.Content&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#808080&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public sealed class GetWorkflowInstanceId
: CodeActivity&amp;lt;Guid&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override Guid Execute(CodeActivityContext
context)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return context.WorkflowInstanceId;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=da04beac-4557-4f52-8af8-d76c167762e2" /&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;Windows Workflow Foundation (WF)</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=3f1b780e-f26d-4ebf-8708-92d127520d55</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,3f1b780e-f26d-4ebf-8708-92d127520d55.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Kirk has got a great series on <a href="http://www.microsoft.com/Sharepoint/default.mspx" target="_blank">Sharepoint</a> for
the developers on his blog <a href="http://blogs.msdn.com/kaevans" target="_blank">here</a>.
There is a whole wealth of information there and I am book-marking it here for my
own reference as well. Great work, Kirk ! You rock !
</p>
        <ol>
          <li>
            <a href="http://blogs.msdn.com/kaevans/archive/2009/03/13/sharepoint-developer-series-part-1-introducing-vsewss-1-3.aspx" target="_blank">SharePoint
Developer Series Part 1: Introducing VSeWSS 1.3</a>
          </li>
          <li>
            <a href="http://blogs.msdn.com/kaevans/archive/2009/03/24/consuming-sharepoint-lists-via-ajax.aspx" target="_blank">Consuming
SharePoint Lists via AJAX</a>
          </li>
          <li>
            <a href="http://blogs.msdn.com/kaevans/archive/2009/04/28/sharepoint-for-developers-part-3-expression-blend-and-silverlight.aspx" target="_blank">SharePoint
for Developers Part 3 – Expression Blend and Silverlight</a> / <a href="http://channel9.msdn.com/posts/kirke/SharePoint-for-Developers-Part-3-Expression-Blend-and-Silverlight/" target="_blank">Channel9</a></li>
          <li>
            <a href="http://blogs.msdn.com/kaevans/archive/2009/04/28/sharepoint-for-developers-part-4-consuming-sharepoint-web-services-from-silverlight.aspx" target="_blank">SharePoint
for Developers Part 4 – Consuming SharePoint Web Services from Silverlight</a>
          </li>
          <li>
            <a href="http://blogs.msdn.com/kaevans/archive/2009/04/28/sharepoint-for-developers-part-5-columns-content-types-and-lists.aspx" target="_blank">SharePoint
for Developers Part 5 – Columns, Content Types, and Lists</a>
          </li>
          <li>
            <a href="http://blogs.msdn.com/kaevans/archive/2009/04/30/sharepoint-for-developers-part-6-custom-web-services.aspx" target="_blank">SharePoint
for Developers Part 6 – Custom web services</a> / <a href="http://channel9.msdn.com/posts/kirke/SharePoint-for-Developers-Part-6-Custom-web-services/" target="_blank">Channel9</a></li>
          <li>
            <a href="http://blogs.msdn.com/kaevans/archive/2009/05/01/getting-xml-data-from-a-sharepoint-list-the-easy-way.aspx" target="_blank">Getting
XML Data From a SharePoint List – The Easy Way</a>
          </li>
        </ol>
        <p>
And knowing him, he would probably have a lot more to follow as well. Dont walk. Run.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3f1b780e-f26d-4ebf-8708-92d127520d55" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Sharepoint for Developer Series by Kirk Evans</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,3f1b780e-f26d-4ebf-8708-92d127520d55.aspx</guid>
      <link>http://www.softwaremaker.net/blog/SharepointForDeveloperSeriesByKirkEvans.aspx</link>
      <pubDate>Tue, 05 May 2009 02:16:00 GMT</pubDate>
      <description>&lt;p&gt;
Kirk has got a great series on &lt;a href="http://www.microsoft.com/Sharepoint/default.mspx" target=_blank&gt;Sharepoint&lt;/a&gt; for
the developers on his blog &lt;a href="http://blogs.msdn.com/kaevans" target=_blank&gt;here&lt;/a&gt;.
There is a whole wealth of information there and I am book-marking it here for my
own reference as well. Great work, Kirk ! You rock !
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/kaevans/archive/2009/03/13/sharepoint-developer-series-part-1-introducing-vsewss-1-3.aspx" target=_blank&gt;SharePoint
Developer Series Part 1: Introducing VSeWSS 1.3&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/kaevans/archive/2009/03/24/consuming-sharepoint-lists-via-ajax.aspx" target=_blank&gt;Consuming
SharePoint Lists via AJAX&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/kaevans/archive/2009/04/28/sharepoint-for-developers-part-3-expression-blend-and-silverlight.aspx" target=_blank&gt;SharePoint
for Developers Part 3 – Expression Blend and Silverlight&lt;/a&gt;&amp;nbsp;/ &lt;a href="http://channel9.msdn.com/posts/kirke/SharePoint-for-Developers-Part-3-Expression-Blend-and-Silverlight/" target=_blank&gt;Channel9&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/kaevans/archive/2009/04/28/sharepoint-for-developers-part-4-consuming-sharepoint-web-services-from-silverlight.aspx" target=_blank&gt;SharePoint
for Developers Part 4 – Consuming SharePoint Web Services from Silverlight&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/kaevans/archive/2009/04/28/sharepoint-for-developers-part-5-columns-content-types-and-lists.aspx" target=_blank&gt;SharePoint
for Developers Part 5 – Columns, Content Types, and Lists&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/kaevans/archive/2009/04/30/sharepoint-for-developers-part-6-custom-web-services.aspx" target=_blank&gt;SharePoint
for Developers Part 6 – Custom web services&lt;/a&gt;&amp;nbsp;/ &lt;a href="http://channel9.msdn.com/posts/kirke/SharePoint-for-Developers-Part-6-Custom-web-services/" target=_blank&gt;Channel9&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/kaevans/archive/2009/05/01/getting-xml-data-from-a-sharepoint-list-the-easy-way.aspx" target=_blank&gt;Getting
XML Data From a SharePoint List – The Easy Way&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
And knowing him, he would probably have a lot more to follow as well. Dont walk. Run.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3f1b780e-f26d-4ebf-8708-92d127520d55" /&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;Collaboration Platform;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=76a5eca5-57d9-47ed-9fca-b58b600b0d5f</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,76a5eca5-57d9-47ed-9fca-b58b600b0d5f.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Both references are good reads and would propbably be a good debate topic for many
but lets not do the religious cult thing:
</p>
        <ul>
          <li>
            <a href="http://davybrion.com/blog/2009/04/at-this-point-id-prefer-java-developers-over-net-developers/" target="blank">At
This Point, I’d Prefer Java Developers Over .NET Developers</a>
          </li>
          <li>
... and the ensuing: <a href="http://davybrion.com/blog/2009/04/the-good-the-bad-and-the-ugly-in-the-net-world/" target="blank">The
Good, The Bad And The Ugly In The .NET World</a></li>
        </ul>
        <p>
          <a href="http://en.wikipedia.org/wiki/Abstraction_%28computer_science%29" target="blank">Abstraction</a>, <a href="http://en.wikipedia.org/wiki/Component_%28software%29#Software_component" target="blank">Componentization</a>, <a href="http://en.wikipedia.org/wiki/Reusability" target="blank">Reusability</a>,
etc. They have all changed the world the developers live and breathe in, havent they
? No, I dont want to sauter transistors on a motherboard anymore. Give me a PC anytime.
Give me solutions.
</p>
        <p>
My personal opinion is that there is no end and you cannot find a answer that fits
all. Question one has to ask is:
</p>
        <ul>
          <li>
Are you looking for a brick builder/manufacturer 
</li>
          <li>
... Or are you just interested in building a wall/house ?</li>
        </ul>
        <p>
Make no mistake, I think there is a market for both. However, chances are, no one
single good person will fit both bills. 
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=76a5eca5-57d9-47ed-9fca-b58b600b0d5f" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Developer Platform Musings</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,76a5eca5-57d9-47ed-9fca-b58b600b0d5f.aspx</guid>
      <link>http://www.softwaremaker.net/blog/DeveloperPlatformMusings.aspx</link>
      <pubDate>Mon, 04 May 2009 03:40:46 GMT</pubDate>
      <description>&lt;p&gt;
Both references are good reads and would propbably be a good debate topic for many
but lets not do the religious cult thing:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://davybrion.com/blog/2009/04/at-this-point-id-prefer-java-developers-over-net-developers/" target=blank&gt;At
This Point, I’d Prefer Java Developers Over .NET Developers&lt;/a&gt; 
&lt;li&gt;
... and the ensuing: &lt;a href="http://davybrion.com/blog/2009/04/the-good-the-bad-and-the-ugly-in-the-net-world/" target=blank&gt;The
Good, The Bad And The Ugly In The .NET World&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/Abstraction_%28computer_science%29" target=blank&gt;Abstraction&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Component_%28software%29#Software_component" target=blank&gt;Componentization&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Reusability" target=blank&gt;Reusability&lt;/a&gt;,
etc. They have all changed the world the developers live and breathe in, havent they
? No, I dont want to sauter transistors on a motherboard anymore. Give me a PC anytime.
Give me solutions.
&lt;/p&gt;
&lt;p&gt;
My personal opinion is that there is no end and you cannot find a answer that fits
all. Question one has to ask is:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Are you looking for a brick builder/manufacturer 
&lt;li&gt;
...&amp;nbsp;Or are you just interested in&amp;nbsp;building a wall/house ?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Make no mistake, I think there is a market for both. However, chances are, no one
single good person will fit both&amp;nbsp;bills.&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=76a5eca5-57d9-47ed-9fca-b58b600b0d5f" /&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;Random Musings;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=a6f055b0-1b64-4d90-bf00-7e9ffd1b4dc5</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,a6f055b0-1b64-4d90-bf00-7e9ffd1b4dc5.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I remember back in 2005/2006 when I was still touring the APAC circuits such as <a href="http://www.softwaremaker.net/blog/IndigoAscendInAsiaPacific.aspx" target="_blank">Sydney
(Australia)</a> and <a href="http://www.softwaremaker.net/blog/GettingDownAndDirtyWithWFAndWCFInKualaLumpur.aspx" target="_blank">Kuala
Lumpur (Malaysia)</a> doing training and consulting gigs for customers, partners about <a href="http://msdn2.microsoft.com/en-us/netframework/aa663328.aspx" target="_blank">Windows
Workflow Foundation (WF)</a> and <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a> and some of the initial Windows
Workflow questions came up regarding the use of <a href="http://wiki.windowsworkflowfoundation.eu/default.aspx/WF/ParallelActivity.html" target="_blank">Parallel
Activities</a>. It came as a surprise to many people that parallel activities
are not independently asynchronous.
</p>
        <p>
I explained that a WF instance gets only one instance from the runtime. There are
reasons for this single-threaded execution model so each activity have to work with
this single thread efficiently. There are ways to spin off differents thread when <em>real</em> parallelism
activities are reqquired but because documentation was scare at that time, I had some
trouble articulating how to do so.
</p>
        <p>
I just read "<a href="http://msdn2.microsoft.com/en-us/library/bb887609.aspx" target="_blank">Multithreaded
Parallelism in Windows Workflow Foundation</a>" on MSDN and while it is a
definite deep technical article, if you can grok it, you will understand how "MultiThreaded
Parallelism" can be done in WF using both the (rather hard-to-use) "<a href="http://wiki.windowsworkflowfoundation.eu/default.aspx/WF/CallExternalMethodActivity.html" target="_blank">Call
External Method Activity (CEMA)</a>" and the "<a href="http://wiki.windowsworkflowfoundation.eu/default.aspx/WF/HandleExternalEventActivity.html" target="_blank">Handle
External Event Activity (HEMA)</a>". Not only that, the authors (whom actually implemented
such a system for their own use) also shared how to pair those 2 activities
up using correlation and how to create wrappers aoround them so that it can be reused
and therefore "<em>not require talented software developer use of call-external-method
and handle-external-event activities along with the CLR thread-pool</em>"
</p>
        <p>
A <a href="http://msdn2.microsoft.com/en-us/library/bb887609.aspx" target="_blank">gem
of a read</a>.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=a6f055b0-1b64-4d90-bf00-7e9ffd1b4dc5" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Windows Workflow Foundation: MultiThreaded Parallelism</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,a6f055b0-1b64-4d90-bf00-7e9ffd1b4dc5.aspx</guid>
      <link>http://www.softwaremaker.net/blog/WindowsWorkflowFoundationMultiThreadedParallelism.aspx</link>
      <pubDate>Mon, 25 Feb 2008 08:44:37 GMT</pubDate>
      <description>&lt;p&gt;
I remember back in 2005/2006 when I was still touring the APAC circuits such as &lt;a href="http://www.softwaremaker.net/blog/IndigoAscendInAsiaPacific.aspx" target=_blank&gt;Sydney
(Australia)&lt;/a&gt; and &lt;a href="http://www.softwaremaker.net/blog/GettingDownAndDirtyWithWFAndWCFInKualaLumpur.aspx" target=_blank&gt;Kuala
Lumpur (Malaysia)&lt;/a&gt; doing training and consulting gigs for customers, partners about &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663328.aspx target=_blank&gt;Windows
Workflow Foundation (WF)&lt;/a&gt; and &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 some of the initial Windows
Workflow questions came up regarding the use of &lt;a href="http://wiki.windowsworkflowfoundation.eu/default.aspx/WF/ParallelActivity.html" target=_blank&gt;Parallel
Activities&lt;/a&gt;. It came&amp;nbsp;as a surprise to many people that parallel activities
are not independently asynchronous.
&lt;/p&gt;
&lt;p&gt;
I explained that a WF instance gets only one instance from the runtime. There are
reasons for this single-threaded execution model so each activity have to work with
this single thread efficiently. There are ways to spin off differents thread&amp;nbsp;when &lt;em&gt;real&lt;/em&gt; parallelism
activities are reqquired but because documentation was scare at that time, I had some
trouble articulating how to do so.
&lt;/p&gt;
&lt;p&gt;
I just read&amp;nbsp;"&lt;a href="http://msdn2.microsoft.com/en-us/library/bb887609.aspx" target=_blank&gt;Multithreaded
Parallelism in Windows Workflow Foundation&lt;/a&gt;"&amp;nbsp;on MSDN and while it is&amp;nbsp;a
definite deep technical article, if you can grok it, you will understand how&amp;nbsp;"MultiThreaded
Parallelism" can be done in WF using both the (rather hard-to-use) "&lt;a href="http://wiki.windowsworkflowfoundation.eu/default.aspx/WF/CallExternalMethodActivity.html" target=_blank&gt;Call
External Method Activity (CEMA)&lt;/a&gt;" and the "&lt;a href="http://wiki.windowsworkflowfoundation.eu/default.aspx/WF/HandleExternalEventActivity.html" target=_blank&gt;Handle
External Event Activity (HEMA)&lt;/a&gt;". Not only that, the authors (whom actually implemented
such a system for their own use) also shared how&amp;nbsp;to pair&amp;nbsp;those 2 activities
up using correlation and how to create wrappers aoround them so that it can be reused
and therefore "&lt;em&gt;not require talented software developer use of call-external-method
and handle-external-event activities along with the CLR thread-pool&lt;/em&gt;"
&lt;/p&gt;
&lt;p&gt;
A &lt;a href="http://msdn2.microsoft.com/en-us/library/bb887609.aspx" target=_blank&gt;gem
of a read&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=a6f055b0-1b64-4d90-bf00-7e9ffd1b4dc5" /&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;Windows Workflow Foundation (WF)</category>
    </item>
    <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=2e5552e8-6a05-4ccd-a052-d18e1e257156</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,2e5552e8-6a05-4ccd-a052-d18e1e257156.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.microsoft.com" target="_blank">MSFT Corp</a> has always talked
about its ecosystem with regards to its developers and partners as one of its key
value propositions which it offers through its platform to its customers.
</p>
        <p>
Sometimes it is humbling to have customere call on you because its <em>other</em> systems
can only work with yours and no one else. I have totally lost track of our ISV partners
who are building great vertical solutions on top of our horizontal application stack,
such as <a href="http://office.microsoft.com/en-us/sharepointserver/FX100492001033.aspx?ofcresset=1" target="_blank">Microsoft
Office SharePoint Server (MOSS)</a> and others and that <a href="http://www.crn.com/software/201800400" target="_blank">list
is growing</a> as I write this.
</p>
        <p>
This is <a href="http://www.theregister.co.uk/2007/08/10/microsoft_open_source/" target="_blank">another
take on it</a>, albeit from another interesting perspective.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=2e5552e8-6a05-4ccd-a052-d18e1e257156" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>The Ecosystem Cloud</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,2e5552e8-6a05-4ccd-a052-d18e1e257156.aspx</guid>
      <link>http://www.softwaremaker.net/blog/TheEcosystemCloud.aspx</link>
      <pubDate>Fri, 17 Aug 2007 22:19:05 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href=http://www.microsoft.com target=_blank&gt;MSFT Corp&lt;/a&gt; has always talked about
its ecosystem with regards to its developers and partners as&amp;nbsp;one of&amp;nbsp;its&amp;nbsp;key
value propositions&amp;nbsp;which it offers through its platform&amp;nbsp;to its customers.
&lt;/p&gt;
&lt;p&gt;
Sometimes it is humbling to have customere call on you because its &lt;em&gt;other&lt;/em&gt; systems
can only work with yours and no one else. I have totally lost track of our ISV partners
who are building great vertical solutions on top of our horizontal application stack,
such as &lt;a href="http://office.microsoft.com/en-us/sharepointserver/FX100492001033.aspx?ofcresset=1" target=_blank&gt;Microsoft
Office SharePoint Server (MOSS)&lt;/a&gt;&amp;nbsp;and others and that &lt;a href="http://www.crn.com/software/201800400" target=_blank&gt;list
is growing&lt;/a&gt; as I write this.
&lt;/p&gt;
&lt;p&gt;
This is &lt;a href="http://www.theregister.co.uk/2007/08/10/microsoft_open_source/" target=_blank&gt;another
take on it&lt;/a&gt;, albeit from another interesting perspective.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=2e5552e8-6a05-4ccd-a052-d18e1e257156" /&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;Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=1d887875-3527-4b9e-8c35-249628cfdef5</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,1d887875-3527-4b9e-8c35-249628cfdef5.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://msdn2.microsoft.com/en-us/embedded/bb267253.aspx" target="_blank">Good
things do come in small packages</a> - not that I am. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /></p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1d887875-3527-4b9e-8c35-249628cfdef5" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Small is beautiful</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,1d887875-3527-4b9e-8c35-249628cfdef5.aspx</guid>
      <link>http://www.softwaremaker.net/blog/SmallIsBeautiful.aspx</link>
      <pubDate>Wed, 07 Mar 2007 14:12:58 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://msdn2.microsoft.com/en-us/embedded/bb267253.aspx" target=_blank&gt;Good
things do come in small packages&lt;/a&gt; - not that I am. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1d887875-3527-4b9e-8c35-249628cfdef5" /&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;Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=309d7b46-57be-4bdb-9c03-bd7605a4deae</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,309d7b46-57be-4bdb-9c03-bd7605a4deae.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Many people have asked how we can retrieve and process a token sent by a subject
or a Security Token Service. Just to showcase the non-intrusiveness of <a href="http://msdn.microsoft.com/en-us/netframework/aa663320.aspx" target="_blank">Microsoft
Cardspace</a>, in that we can easily incorporate a Cardspace "<strong><em>Sign-in
with Cardspace</em></strong>" into your website today such as <a href="https://sandbox.netfx3.com/login.aspx?ReturnUrl=/default.aspx" target="_blank">this</a> or <a href="https://identityblog.com/wp-login.php" target="_blank">this</a>,
I have shown snippets of how we can do so via <a href="http://www.php.net/" target="_blank">php</a><a href="http://www.softwaremaker.net/blog/UsingOpenSSLForCardspaceDemoOnPHP.aspx" target="_blank">here</a>.
</p>
        <p>
As an another example of non-intrusiveness, I have also got a simple working sample
that you can use to integrate into your ASP.NET 2.0 page today.
</p>
        <p>
Of course, this is a hack job and there are no try catch and the xml parsing code
is hastily done. To summarize, I wont win the elegance award here  ... but you
can get it to work on .NET 2.0 (or maybe even 1.1) <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /> ...
</p>
        <p>
Of course, this is a hack job and there are no try catch and the xml parsing code
is hastily done. To summarize, I wont win the elegance award here  ... but you
can get it to work on .NET 2.0 (or maybe even 1.1) ...
</p>
        <p>
          <strong>
            <font color="#808080">    [BEGIN]<br />
    'This will get you your encrypted token<br />
    Dim str As Stream<br />
    str = Request.InputStream<br />
    Dim sr As New StreamReader(str)<br />
    Dim s As String = sr.ReadToEnd<br />
    s = Server.HtmlDecode(Server.UrlDecode(s))</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'the stream will be ASCII encoded<br />
    Dim u8 As System.Text.UTF8Encoding = New System.Text.UTF8Encoding</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    Dim fs As New FileStream("C:\temp\CardspaceXMLToken.xml",
FileMode.Create)<br />
    'Remove the "xmlToken="<br />
    Dim i As Integer = s.IndexOf("&lt;")<br />
    s = s.Substring(i)<br />
    fs.Write(u8.GetBytes(s), 0, u8.GetBytes(s).Length)<br />
    fs.Flush()<br />
    fs.Close()<br />
    '--------------------------------<br />
    'The will decrypt that request token and return a Signed Security
SAML Token<br />
    Dim encryptedDoc As New XmlDocument()<br />
    encryptedDoc.Load("C:\temp\CardspaceXMLToken.xml")</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Check for &lt;EncryptedData&gt;
element<br />
    If encryptedDoc.GetElementsByTagName _<br />
    ("EncryptedData", "</font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#&quot;).Count">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#").Count</font>
            </strong>
          </a>
          <strong>
            <font color="#808080"> =
0 Then Return</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    Dim encryptedD As XmlElement = CType(encryptedDoc.GetElementsByTagName
_<br />
    ("EncryptedData", "</font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#&quot;)(0">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#")(0</font>
            </strong>
          </a>
          <strong>
            <font color="#808080">),
XmlElement)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Check for @Algorithm attribute
and make sure its </font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#aes256-cbc">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#aes256-cbc</font>
            </strong>
          </a>
          <br />
          <strong>
            <font color="#808080">    If encryptedD.ChildNodes(0).Attributes("Algorithm")
Is Nothing Or _<br />
    encryptedD.ChildNodes(0).Attributes("Algorithm").Value
&lt;&gt; _<br />
    "</font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#aes256-cbc">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#aes256-cbc</font>
            </strong>
          </a>
          <strong>
            <font color="#808080">"
Then Return</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    Dim a As New RijndaelManaged</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Check for &lt;KeyInfo&gt; element<br />
    If encryptedD.ChildNodes(1).Name &lt;&gt; "KeyInfo" Then
Return</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Check for &lt;EncryptionMethod&gt;
element<br />
    Dim encryptedM As XmlElement = CType(encryptedDoc.GetElementsByTagName
_<br />
    ("EncryptionMethod", "</font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#&quot;)(1">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#")(1</font>
            </strong>
          </a>
          <strong>
            <font color="#808080">),
XmlElement)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Check for @Algorithm attribute
and make sure its </font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p</font>
            </strong>
          </a>
          <br />
          <strong>
            <font color="#808080">    If encryptedM.Attributes("Algorithm")
Is Nothing Or _<br />
    encryptedM.Attributes("Algorithm").Value &lt;&gt; _<br />
    "</font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p</font>
            </strong>
          </a>
          <strong>
            <font color="#808080">"
Then Return</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Check for &lt;CipherData\CipherValue&gt;<br />
    If encryptedD.GetElementsByTagName("CipherValue", _<br />
    "</font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#&quot;).Count">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#").Count</font>
            </strong>
          </a>
          <strong>
            <font color="#808080"> =
0 Then Return</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Retrieving the Encrypted Symmetric
Key and the Security Token<br />
    Dim e_SymmKey As String = encryptedDoc.GetElementsByTagName _<br />
    ("CipherValue", "</font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#&quot;)(0).InnerText">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#")(0).InnerText</font>
            </strong>
          </a>
          <br />
          <strong>
            <font color="#808080">    Dim e_SecurityToken As String = encryptedDoc.GetElementsByTagName
_<br />
    ("CipherValue", "</font>
          </strong>
          <a href="http://www.w3.org/2001/04/xmlenc#&quot;)(1).InnerText">
            <strong>
              <font color="#808080">http://www.w3.org/2001/04/xmlenc#")(1).InnerText</font>
            </strong>
          </a>
        </p>
        <p>
          <strong>
            <font color="#808080">    Dim rsaCsp As New RSACryptoServiceProvider<br />
    Dim privatecert As New X509Certificates.X509Certificate2<br />
    privatecert.Import("Softwaremaker.NET.SSL.pfx", "Softwaremaker_NET_SSL_pfx_password",    
X509Certificates.X509KeyStorageFlags.Exportable)<br />
    rsaCsp.FromXmlString(privatecert.PrivateKey.ToXmlString(True))</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Now we have the Symmetric Key<br />
    Dim DecryptedStrAsByt() As Byte = _<br />
    rsaCsp.Decrypt(System.Convert.FromBase64String(e_SymmKey), True)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Moving on to use the Symmetric
Key to decrypt Token<br />
    Dim rijndaelM As New RijndaelManaged<br />
    rijndaelM.Mode = CipherMode.CBC</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    Dim swmDecryptor As ICryptoTransform<br />
    swmDecryptor = rijndaelM.CreateDecryptor(DecryptedStrAsByt, Nothing)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    'Define memory stream which will
be used to hold encrypted data.<br />
    Dim cipherTextBytes As Byte()<br />
    cipherTextBytes = System.Convert.FromBase64String(e_SecurityToken)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    Dim memoryStream As MemoryStream<br />
    memoryStream = New MemoryStream(cipherTextBytes)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    ' Define memory stream which
will be used to hold encrypted data.<br />
    Dim cryptoStream As CryptoStream<br />
    cryptoStream = New CryptoStream(memoryStream, swmDecryptor, CryptoStreamMode.Read)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    ' Since at this point we don't
know what the size of decrypted data<br />
    ' will be, allocate the buffer long enough to hold ciphertext;<br />
    ' plaintext is never longer than ciphertext.<br />
    Dim plainTextBytes As Byte()<br />
    ReDim plainTextBytes(cipherTextBytes.Length)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    ' Start decrypting.<br />
    Dim decryptedByteCount As Integer<br />
    decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    ' Close both streams.<br />
    memoryStream.Close()<br />
    cryptoStream.Close()</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    ' Convert decrypted data into
a string.<br />
    ' Let us assume that the original plaintext string was UTF8-encoded.<br />
    Dim plainTextToken As String<br />
    plainTextToken = System.Text.Encoding.UTF8.GetString(plainTextBytes,
16, _<br />
                                       
decryptedByteCount - 16)</font>
          </strong>
        </p>
        <p>
          <strong>
            <font color="#808080">    return plainTextToken<br />
    [END]<br />
    '--------------------------------</font>
          </strong>
        </p>
        <p>
Of course, you would have to verify the signed token yourself BUT this decryption
process is definitely a step in the right direction 
</p>
        <p>
If you have benefitted from these sample snippets, maybe you can pay-it-forward by
implementing and then sharing the signature-verification codes with me here?
I am too lazy ... <img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif" />.
</p>
        <p>
 
</p>
        <img src="http://www.softwaremaker.net/blog/cptrk.ashx?id=f3008aae-c3a8-4dbd-8cf1-ed1f95024f3f" alt="" width="0" height="0" />
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=309d7b46-57be-4bdb-9c03-bd7605a4deae" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>GetToken Helper for Cardspace on .NET 2.0</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,309d7b46-57be-4bdb-9c03-bd7605a4deae.aspx</guid>
      <link>http://www.softwaremaker.net/blog/GetTokenHelperForCardspaceOnNET20.aspx</link>
      <pubDate>Fri, 11 Aug 2006 06:18:49 GMT</pubDate>
      <description>&lt;p&gt;
Many people have asked how we can retrieve and process&amp;nbsp;a token sent by a subject
or a Security Token Service. Just to showcase the non-intrusiveness of &lt;a href=http://msdn.microsoft.com/en-us/netframework/aa663320.aspx target=_blank&gt;Microsoft
Cardspace&lt;/a&gt;, in that we can easily incorporate a Cardspace &amp;quot;&lt;strong&gt;&lt;em&gt;Sign-in
with Cardspace&lt;/em&gt;&lt;/strong&gt;&amp;quot; into your website today such as &lt;a href="https://sandbox.netfx3.com/login.aspx?ReturnUrl=/default.aspx" target="_blank"&gt;this&lt;/a&gt;&amp;nbsp;or &lt;a href="https://identityblog.com/wp-login.php" target="_blank"&gt;this&lt;/a&gt;,
I have shown snippets of how we can do so via &lt;a href="http://www.php.net/" target="_blank"&gt;php&lt;/a&gt; &lt;a href="http://www.softwaremaker.net/blog/UsingOpenSSLForCardspaceDemoOnPHP.aspx" target="_blank"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
As an another example of non-intrusiveness, I have also got a simple working sample
that you can use to integrate into your ASP.NET 2.0 page today.
&lt;/p&gt;
&lt;p&gt;
Of course, this is a hack job and there are no try catch and the xml parsing code
is hastily done. To summarize, I wont win the elegance award here&amp;nbsp; ... but you
can get it to work on .NET 2.0 (or maybe even 1.1) &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt; ...
&lt;/p&gt;
&lt;p&gt;
Of course, this is a hack job and there are no try catch and the xml parsing code
is hastily done. To summarize, I wont win the elegance award here&amp;nbsp; ... but you
can get it to work on .NET 2.0 (or maybe even 1.1) ...
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [BEGIN]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;This will get you your encrypted token&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim str As Stream&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; str = Request.InputStream&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim sr As New StreamReader(str)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim s As String = sr.ReadToEnd&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; s = Server.HtmlDecode(Server.UrlDecode(s))&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;the stream will be ASCII encoded&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim u8 As System.Text.UTF8Encoding = New System.Text.UTF8Encoding&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim fs As New FileStream(&amp;quot;C:\temp\CardspaceXMLToken.xml&amp;quot;,
FileMode.Create)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Remove the &amp;quot;xmlToken=&amp;quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim i As Integer = s.IndexOf(&amp;quot;&amp;lt;&amp;quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; s = s.Substring(i)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; fs.Write(u8.GetBytes(s), 0, u8.GetBytes(s).Length)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; fs.Flush()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; fs.Close()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;--------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;The will decrypt that request token and return a Signed Security
SAML Token&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim encryptedDoc As New XmlDocument()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; encryptedDoc.Load(&amp;quot;C:\temp\CardspaceXMLToken.xml&amp;quot;)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Check for &amp;lt;EncryptedData&amp;gt;
element&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If encryptedDoc.GetElementsByTagName _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;quot;EncryptedData&amp;quot;, &amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#&amp;quot;).Count"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#&amp;quot;).Count&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#808080"&gt; =
0 Then Return&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim encryptedD As XmlElement = CType(encryptedDoc.GetElementsByTagName
_&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;quot;EncryptedData&amp;quot;, &amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#&amp;quot;)(0"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#&amp;quot;)(0&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#808080"&gt;),
XmlElement)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Check for @Algorithm attribute
and make sure its &lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#aes256-cbc"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#aes256-cbc&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If encryptedD.ChildNodes(0).Attributes(&amp;quot;Algorithm&amp;quot;)
Is Nothing Or _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; encryptedD.ChildNodes(0).Attributes(&amp;quot;Algorithm&amp;quot;).Value
&amp;lt;&amp;gt; _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#aes256-cbc"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#aes256-cbc&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#808080"&gt;&amp;quot;
Then Return&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim a As New RijndaelManaged&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Check for &amp;lt;KeyInfo&amp;gt; element&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If encryptedD.ChildNodes(1).Name &amp;lt;&amp;gt; &amp;quot;KeyInfo&amp;quot; Then
Return&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Check for &amp;lt;EncryptionMethod&amp;gt;
element&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim encryptedM As XmlElement = CType(encryptedDoc.GetElementsByTagName
_&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;quot;EncryptionMethod&amp;quot;, &amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#&amp;quot;)(1"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#&amp;quot;)(1&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#808080"&gt;),
XmlElement)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Check for @Algorithm attribute
and make sure its &lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If encryptedM.Attributes(&amp;quot;Algorithm&amp;quot;)
Is Nothing Or _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; encryptedM.Attributes(&amp;quot;Algorithm&amp;quot;).Value &amp;lt;&amp;gt; _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#808080"&gt;&amp;quot;
Then Return&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Check for &amp;lt;CipherData\CipherValue&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If encryptedD.GetElementsByTagName(&amp;quot;CipherValue&amp;quot;, _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#&amp;quot;).Count"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#&amp;quot;).Count&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#808080"&gt; =
0 Then Return&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Retrieving the Encrypted Symmetric
Key and the Security Token&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim e_SymmKey As String = encryptedDoc.GetElementsByTagName _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;quot;CipherValue&amp;quot;, &amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#&amp;quot;)(0).InnerText"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#&amp;quot;)(0).InnerText&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim e_SecurityToken As String = encryptedDoc.GetElementsByTagName
_&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;quot;CipherValue&amp;quot;, &amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#&amp;quot;)(1).InnerText"&gt;&lt;strong&gt;&lt;font color="#808080"&gt;http://www.w3.org/2001/04/xmlenc#&amp;quot;)(1).InnerText&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim rsaCsp As New RSACryptoServiceProvider&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim privatecert As New X509Certificates.X509Certificate2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; privatecert.Import(&amp;quot;Softwaremaker.NET.SSL.pfx&amp;quot;, &amp;quot;Softwaremaker_NET_SSL_pfx_password&amp;quot;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
X509Certificates.X509KeyStorageFlags.Exportable)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rsaCsp.FromXmlString(privatecert.PrivateKey.ToXmlString(True))&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Now we have the Symmetric Key&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim DecryptedStrAsByt() As Byte = _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rsaCsp.Decrypt(System.Convert.FromBase64String(e_SymmKey), True)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Moving on to use the Symmetric
Key to decrypt Token&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim rijndaelM As New RijndaelManaged&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rijndaelM.Mode = CipherMode.CBC&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim swmDecryptor As ICryptoTransform&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; swmDecryptor = rijndaelM.CreateDecryptor(DecryptedStrAsByt, Nothing)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Define memory stream which will
be used to hold encrypted data.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim cipherTextBytes As Byte()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; cipherTextBytes = System.Convert.FromBase64String(e_SecurityToken)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim memoryStream As MemoryStream&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryStream = New MemoryStream(cipherTextBytes)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Define memory stream which
will be used to hold encrypted data.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim cryptoStream As CryptoStream&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; cryptoStream = New CryptoStream(memoryStream, swmDecryptor, CryptoStreamMode.Read)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Since at this point we don&amp;#39;t
know what the size of decrypted data&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; will be, allocate the buffer long enough to hold ciphertext;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; plaintext is never longer than ciphertext.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim plainTextBytes As Byte()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ReDim plainTextBytes(cipherTextBytes.Length)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Start decrypting.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim decryptedByteCount As Integer&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Close both streams.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryStream.Close()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; cryptoStream.Close()&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Convert decrypted data into
a string.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Let us assume that the original plaintext string was UTF8-encoded.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim plainTextToken As String&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; plainTextToken = System.Text.Encoding.UTF8.GetString(plainTextBytes,
16, _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
decryptedByteCount - 16)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#808080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return plainTextToken&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [END]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;--------------------------------&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Of course, you would have to verify the signed token yourself BUT this decryption
process is definitely a step in the right direction 
&lt;/p&gt;
&lt;p&gt;
If you have benefitted from these sample snippets, maybe you can pay-it-forward by
implementing and then sharing the signature-verification codes&amp;nbsp;with me here?
I am too lazy ... &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img src="http://www.softwaremaker.net/blog/cptrk.ashx?id=f3008aae-c3a8-4dbd-8cf1-ed1f95024f3f" alt="" width="0" height="0" /&gt;&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=309d7b46-57be-4bdb-9c03-bd7605a4deae" /&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;Windows Cardspace aka Infocards</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=0276246a-0384-45bd-ac6f-bf4c65a1c6b1</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,0276246a-0384-45bd-ac6f-bf4c65a1c6b1.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ar - Arguments...It does make us move forward at times.
</p>
        <p>
          <a href="http://www.grimes.demon.co.uk/" target="_blank">Richard Grimes</a> has managed
to kick up a storm again with his article <a href="http://www.grimes.demon.co.uk/dotnet/vistaAndDotnet.htm" target="_blank">here</a>,
again. While, I would not go very far in saying a kernel Operating System should be
written in <em>managed-code</em>. God knows I will not use one if it is and you shouldnt
to. As far as I can tell, <a href="http://www.microsoft.com/net/default.mspx" target="_blank">.NET</a> was
not created for writing operating systems?  It sits on top of the operating system
and thats that
</p>
        <p>
It is, however, very important to note, the investments <a href="http://www.microsoft.com" target="_blank">MSFT
Corp</a> have on managed code. Instead of giving you the usual bullets and docs. How
about this ?
</p>
        <p>
          <u>
            <strong>Lines of Managed Code</strong>
          </u>
        </p>
        <ul>
          <li>
            <a href="http://msdn.microsoft.com/vstudio/" target="_blank">Microsoft Visual Studio</a> 2005: <strong><em>7.5
million lines</em></strong></li>
          <li>
            <a href="http://www.microsoft.com/sql/default.mspx" target="_blank">Microsoft SQL
Server</a> 2005: <strong><em>3 million lines</em></strong></li>
          <li>
            <a href="http://www.microsoft.com/biztalk/default.mspx" target="_blank">Microsoft
BizTalk Server</a>: <strong><em>2 million lines</em></strong></li>
          <li>
            <a href="http://msdn.microsoft.com/vstudio/teamsystem/default.aspx" target="_blank">Microsoft
Visual Studio Team System</a>: <strong><em>1.7 million lines</em></strong></li>
          <li>
            <a href="http://msdn2.microsoft.com/en-us/netframework/aa663326.aspx" target="_blank">Windows
Presentation Foundation (WPF)</a>: <strong><em>900K lines</em></strong></li>
          <li>
            <a href="http://www.microsoft.com/windowsserver2003/technologies/sharepoint/default.mspx" target="_blank">Windows
Sharepoint Services</a>: <strong><em>750K lines</em></strong></li>
          <li>
Expression Interactive Designer: <strong><em>250K lines</em></strong></li>
          <li>
            <a href="http://www.microsoft.com/office/sharepoint/prodinfo/default.mspx" target="_blank">Microsoft
Sharepoint Portal Server</a>: <strong><em>200K lines</em></strong></li>
          <li>
            <a href="http://www.microsoft.com/cmserver/default.mspx" target="_blank">Microsoft
Content Management Server</a>: <strong><em>100K lines</em></strong></li>
        </ul>
        <p>
And lets not forget that <a href="http://www.microsoft.com/dynamics/crm/default.mspx" target="_blank">Microsoft
CRM</a> is the first Enterprise Business Solutions that is written on managed code
from Microsoft. Read: <a href="http://www.catb.org/jargon/html/D/dogfood.html" target="_blank">Dogfood</a></p>
        <p>
And <strong>YES</strong> - <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a> is written in C# as well. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /></p>
        <p>
Case Closed. &lt;EOM&gt;
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=0276246a-0384-45bd-ac6f-bf4c65a1c6b1" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Use Managed Code where it makes sense</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,0276246a-0384-45bd-ac6f-bf4c65a1c6b1.aspx</guid>
      <link>http://www.softwaremaker.net/blog/UseManagedCodeWhereItMakesSense.aspx</link>
      <pubDate>Tue, 14 Mar 2006 23:44:31 GMT</pubDate>
      <description>&lt;p&gt;
Ar - Arguments...It does make&amp;nbsp;us move forward at times.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.grimes.demon.co.uk/" target=_blank&gt;Richard Grimes&lt;/a&gt; has managed
to kick up a storm again with his article &lt;a href="http://www.grimes.demon.co.uk/dotnet/vistaAndDotnet.htm" target=_blank&gt;here&lt;/a&gt;,
again. While, I would not go very far in saying a kernel Operating System should be
written in &lt;em&gt;managed-code&lt;/em&gt;. God knows I will not use one if it is and you shouldnt
to. As far as I can tell,&amp;nbsp;&lt;a href=http://www.microsoft.com/net/default.mspx target=_blank&gt;.NET&lt;/a&gt; was
not created for writing operating systems?&amp;nbsp; It sits on top of the operating system
and thats that
&lt;/p&gt;
&lt;p&gt;
It is, however, very important to note, the investments &lt;a href=http://www.microsoft.com target=_blank&gt;MSFT
Corp&lt;/a&gt; have on managed code. Instead of giving you the usual bullets and docs. How
about this ?
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;&lt;strong&gt;Lines of Managed Code&lt;/strong&gt;&lt;/u&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=http://msdn.microsoft.com/vstudio/ target=_blank&gt;Microsoft Visual Studio&lt;/a&gt; 2005: &lt;strong&gt;&lt;em&gt;7.5
million lines&lt;/em&gt;&lt;/strong&gt; 
&lt;li&gt;
&lt;a href=http://www.microsoft.com/sql/default.mspx target=_blank&gt;Microsoft SQL Server&lt;/a&gt; 2005: &lt;strong&gt;&lt;em&gt;3
million lines&lt;/em&gt;&lt;/strong&gt; 
&lt;li&gt;
&lt;a href=http://www.microsoft.com/biztalk/default.mspx target=_blank&gt;Microsoft BizTalk
Server&lt;/a&gt;: &lt;strong&gt;&lt;em&gt;2 million lines&lt;/em&gt;&lt;/strong&gt; 
&lt;li&gt;
&lt;a href=http://msdn.microsoft.com/vstudio/teamsystem/default.aspx target=_blank&gt;Microsoft
Visual Studio Team System&lt;/a&gt;: &lt;strong&gt;&lt;em&gt;1.7 million lines&lt;/em&gt;&lt;/strong&gt; 
&lt;li&gt;
&lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663326.aspx target=_blank&gt;Windows
Presentation Foundation (WPF)&lt;/a&gt;: &lt;strong&gt;&lt;em&gt;900K lines&lt;/em&gt;&lt;/strong&gt; 
&lt;li&gt;
&lt;a href=http://www.microsoft.com/windowsserver2003/technologies/sharepoint/default.mspx target=_blank&gt;Windows
Sharepoint Services&lt;/a&gt;: &lt;strong&gt;&lt;em&gt;750K lines&lt;/em&gt;&lt;/strong&gt; 
&lt;li&gt;
Expression Interactive Designer: &lt;strong&gt;&lt;em&gt;250K lines&lt;/em&gt;&lt;/strong&gt; 
&lt;li&gt;
&lt;a href=http://www.microsoft.com/office/sharepoint/prodinfo/default.mspx target=_blank&gt;Microsoft
Sharepoint Portal Server&lt;/a&gt;: &lt;strong&gt;&lt;em&gt;200K lines&lt;/em&gt;&lt;/strong&gt; 
&lt;li&gt;
&lt;a href=http://www.microsoft.com/cmserver/default.mspx target=_blank&gt;Microsoft Content
Management Server&lt;/a&gt;: &lt;strong&gt;&lt;em&gt;100K lines&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
And lets not forget that &lt;a href=http://www.microsoft.com/dynamics/crm/default.mspx target=_blank&gt;Microsoft
CRM&lt;/a&gt; is the first Enterprise Business Solutions that is written on managed code
from Microsoft. Read: &lt;a href="http://www.catb.org/jargon/html/D/dogfood.html" target=_blank&gt;Dogfood&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
And &lt;strong&gt;YES&lt;/strong&gt; - &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx target=_blank&gt;Windows
Communication Foundation (WCF, previously - Indigo)&lt;/a&gt; is written in C# as well. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
Case Closed. &amp;lt;EOM&amp;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=0276246a-0384-45bd-ac6f-bf4c65a1c6b1" /&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;Biz Matters;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=76693c06-2717-4ca9-aa84-55567859b867</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,76693c06-2717-4ca9-aa84-55567859b867.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Sounds like SPAM ? It is not.
</p>
        <p>
This is a 100% ASP.NET 2.0 based CMS solution -- best of all it is free -- check
out <a href="http://weblogs.asp.net/axinom/archive/2006/01/19/435866.aspx" target="_blank">this</a> blog
post for some sites built with it.
</p>
        <p>
All the info you need is <a href="http://www.axcms.net/" target="_blank">here</a>.
Let me know your thoughts if you are using it. I will be embarking on it very soon.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=76693c06-2717-4ca9-aa84-55567859b867" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Enterprise Content Management Server on ASP.NET 2.0 - ALL FOR FREE !</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,76693c06-2717-4ca9-aa84-55567859b867.aspx</guid>
      <link>http://www.softwaremaker.net/blog/EnterpriseContentManagementServerOnASPNET20ALLFORFREE.aspx</link>
      <pubDate>Fri, 20 Jan 2006 13:22:50 GMT</pubDate>
      <description>&lt;p&gt;
Sounds like SPAM ? It is not.
&lt;/p&gt;
&lt;p&gt;
This is a&amp;nbsp;100% ASP.NET 2.0 based CMS solution -- best of all it is free -- check
out &lt;a href="http://weblogs.asp.net/axinom/archive/2006/01/19/435866.aspx" target=_blank&gt;this&lt;/a&gt; blog
post for some sites built with it.
&lt;/p&gt;
&lt;p&gt;
All the info you need is &lt;a href="http://www.axcms.net/" target=_blank&gt;here&lt;/a&gt;. Let
me know your thoughts if you are using it. I will be embarking on it very soon.
&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=76693c06-2717-4ca9-aa84-55567859b867" /&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;Community;Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=3f6875a5-7ef5-466f-9de5-585dce6c5e0c</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,3f6875a5-7ef5-466f-9de5-585dce6c5e0c.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
What an awesome <a href="http://www.carlosag.net/Tools/CodeTranslator/Default.aspx" target="_blank">Translator</a> !!!
</p>
        <p>
Where was this a year ago when I had to port something from C# to VB.NET ?
</p>
        <p>
The next enhancement should have something that translates business requirements to
code. I would definitely buy that.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3f6875a5-7ef5-466f-9de5-585dce6c5e0c" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>VB.NET &lt;-&gt; C# Translator</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,3f6875a5-7ef5-466f-9de5-585dce6c5e0c.aspx</guid>
      <link>http://www.softwaremaker.net/blog/VBNETCTranslator.aspx</link>
      <pubDate>Fri, 11 Nov 2005 01:32:31 GMT</pubDate>
      <description>&lt;p&gt;
What an awesome&amp;nbsp;&lt;a href="http://www.carlosag.net/Tools/CodeTranslator/Default.aspx" target=_blank&gt;Translator&lt;/a&gt;&amp;nbsp;!!!
&lt;/p&gt;
&lt;p&gt;
Where was this a year ago when I had to port something from C# to VB.NET ?
&lt;/p&gt;
&lt;p&gt;
The next enhancement should have something that translates business requirements to
code. I would definitely buy that.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3f6875a5-7ef5-466f-9de5-585dce6c5e0c" /&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;Random Musings;Technology;Useful Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=e18dff55-07bd-43a3-abb8-bdb54e572500</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,e18dff55-07bd-43a3-abb8-bdb54e572500.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I remember while I was chatting about one of the article I was working on for <a href="http://msdn.microsoft.com/" target="_blank">MSDN</a> with
some folks from <a href="http://www.microsoft.com" target="_blank">MSFT Corp</a> during
lunch at <a href="http://msdn.microsoft.com/events/pdc" target="_blank" rel="tag">PDC
2005</a> and I said that most of my code snippets are written in <a href="http://msdn.microsoft.com/vbasic/" target="_blank">Visual
Basic</a> and for once <strong><em>ever</em></strong>, no-one sniggered and laughed.
That moment was priceless. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /></p>
        <p>
This was because we just came off a fantastic talk on <strong>Visual Basic 9: Future
Directions in Language Innovations</strong>. In fact, someone echoed how cool Visual
Basic 9 <strong><em>IS</em></strong> now. I dont know how long was it when
"Cool" and "Visual Basic" got along together until today. WOW ! What can I say
? It is standing proud.
</p>
        <p>
There is a piece <a href="http://msdn.microsoft.com/vbasic/future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp" target="_blank">here</a> that
gives a brief overview on Visual Basic 9. What do I love most ? Its <a href="http://msdn.microsoft.com/vbasic/future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp#vb9overview_topic6" target="_blank">built-in
deep XML Support</a>. I cannot wait. Give it to me now !!!
</p>
        <p>
It was a great day.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e18dff55-07bd-43a3-abb8-bdb54e572500" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Visual Basic 9: Standing Proud</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,e18dff55-07bd-43a3-abb8-bdb54e572500.aspx</guid>
      <link>http://www.softwaremaker.net/blog/VisualBasic9StandingProud.aspx</link>
      <pubDate>Tue, 20 Sep 2005 06:23:25 GMT</pubDate>
      <description>&lt;p&gt;
I remember while I was chatting about one of the article I was working on for &lt;a href="http://msdn.microsoft.com/" target=_blank&gt;MSDN&lt;/a&gt;&amp;nbsp;with
some folks from &lt;a href=http://www.microsoft.com target=_blank&gt;MSFT Corp&lt;/a&gt;&amp;nbsp;during
lunch at &lt;a href='http://msdn.microsoft.com/events/pdc' target=_blank rel='tag'&gt;PDC
2005&lt;/a&gt; and I said that most of&amp;nbsp;my code snippets are written in &lt;a href="http://msdn.microsoft.com/vbasic/" target=_blank&gt;Visual
Basic&lt;/a&gt;&amp;nbsp;and for once &lt;strong&gt;&lt;em&gt;ever&lt;/em&gt;&lt;/strong&gt;, no-one sniggered and laughed.
That moment was priceless. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
This was because we just came off a fantastic talk on &lt;strong&gt;Visual Basic 9: Future
Directions in Language Innovations&lt;/strong&gt;. In fact, someone echoed how cool Visual
Basic 9&amp;nbsp;&lt;strong&gt;&lt;em&gt;IS&lt;/em&gt;&lt;/strong&gt; now.&amp;nbsp;I dont know how long was it when
"Cool" and "Visual Basic"&amp;nbsp;got along together until today. WOW ! What can I say
? It is standing proud.
&lt;/p&gt;
&lt;p&gt;
There is a piece &lt;a href="http://msdn.microsoft.com/vbasic/future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp" target=_blank&gt;here&lt;/a&gt; that
gives a brief overview on Visual Basic 9. What do I love most ? Its &lt;a href="http://msdn.microsoft.com/vbasic/future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp#vb9overview_topic6" target=_blank&gt;built-in
deep XML Support&lt;/a&gt;. I cannot wait. Give it to me now !!!
&lt;/p&gt;
&lt;p&gt;
It was a great day.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e18dff55-07bd-43a3-abb8-bdb54e572500" /&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;Random Musings;Software Development</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=fca840b0-5cc2-4034-8f44-f1c46f3f9698</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,fca840b0-5cc2-4034-8f44-f1c46f3f9698.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">You <a href="http://www.microsoft.com/windowsvista/default.mspx" target="_blank">may</a> ... when
it went under the <a href="http://www.microsoft.com/presspass/press/2005/jul05/07-22LHMA.mspx" target="_blank">moniker</a> called <a href="http://www.microsoft.com/windows/longhorn/default.mspx" target="_blank">Longhorn</a><img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=fca840b0-5cc2-4034-8f44-f1c46f3f9698" /><br /><hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Do you know what Windows Vista is ?</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,fca840b0-5cc2-4034-8f44-f1c46f3f9698.aspx</guid>
      <link>http://www.softwaremaker.net/blog/DoYouKnowWhatWindowsVistaIs.aspx</link>
      <pubDate>Fri, 22 Jul 2005 13:36:34 GMT</pubDate>
      <description>You &lt;a href="http://www.microsoft.com/windowsvista/default.mspx" target=_blank&gt;may&lt;/a&gt; ...&amp;nbsp;when
it&amp;nbsp;went&amp;nbsp;under the &lt;a href="http://www.microsoft.com/presspass/press/2005/jul05/07-22LHMA.mspx" target=_blank&gt;moniker&lt;/a&gt;&amp;nbsp;called &lt;a href="http://www.microsoft.com/windows/longhorn/default.mspx" target="_blank"&gt;Longhorn&lt;/a&gt;&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=fca840b0-5cc2-4034-8f44-f1c46f3f9698" /&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</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=73a67b18-80cd-4f57-bfeb-c5b7ae034a7c</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,73a67b18-80cd-4f57-bfeb-c5b7ae034a7c.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">Noted architecture author and guru Roger
Sessions of <a href="http://www.objectwatch.com/" target="_blank">ObjectWatch</a> has
this <a href="http://www.objectwatch.com/newsletters/ObjectWatchNewsletter050.pdf" target="_blank">wonderful
take-away observation</a> from the recently-concluded <a href="http://www.microsoft.com/events/teched2005/default.mspx" target="_blank">Microsoft
TechED 2005 in Orlando, Florida</a>.<img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=73a67b18-80cd-4f57-bfeb-c5b7ae034a7c" /><br /><hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Watch for the elephant (Invisible Big Mammoth) in TechED 2005</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,73a67b18-80cd-4f57-bfeb-c5b7ae034a7c.aspx</guid>
      <link>http://www.softwaremaker.net/blog/WatchForTheElephantInvisibleBigMammothInTechED2005.aspx</link>
      <pubDate>Wed, 29 Jun 2005 17:57:24 GMT</pubDate>
      <description>Noted architecture author and guru Roger Sessions of &lt;a href="http://www.objectwatch.com/" target=_blank&gt;ObjectWatch&lt;/a&gt; has
this &lt;a href="http://www.objectwatch.com/newsletters/ObjectWatchNewsletter050.pdf" target=_blank&gt;wonderful
take-away observation&lt;/a&gt; from the recently-concluded &lt;a href="http://www.microsoft.com/events/teched2005/default.mspx" target=_blank&gt;Microsoft
TechED 2005 in Orlando, Florida&lt;/a&gt;.&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=73a67b18-80cd-4f57-bfeb-c5b7ae034a7c" /&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;Random Musings;Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=5b8655de-02b5-4980-888c-90e94da8e246</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,5b8655de-02b5-4980-888c-90e94da8e246.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I will be delivering <a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank">Indigo</a> Ascend
in Asia Pacific in the coming months on behalf of the Indigo and Ascend team in <a href="http://www.microsoft.com" target="_blank">MSFT
Corp</a>, Redmond, US.
</p>
        <p>
It will start in Sydney, Australia later this month, then move upwards (northwards)
to my own local backyard, Singapore. There are a few more countries Microsoft and
I are interested to look at bringing this event as well.
</p>
        <p>
This will be a good time for me to meet up with real customers from the enterprises
who are using Microsoft distributed technologies or are planning to look into using
it in the future. Drop me an email <a href="http://www.softwaremaker.net/Contact.asp#EmailSvcs" target="_blank">here</a> if
you would like to engage me for a discussion.
</p>
        <p>
If you are reading this blog post and you work for an ISV or an enterprise that
does a fair bit of distributed computing technology and you are interested in attending
this Indigo Ascend in Singapore (I think we are a little bit late in nominations for
Australia), do drop me a mail <a href="http://www.softwaremaker.net/Contact.asp#EmailSvcs" target="_blank">here</a> and
I will see what I can do to hook you up for this 3 day event.
</p>
        <p>
If you are from anywhere else besides Australia or Singapore (in APAC) and would love
to attend an event like this, do drop me an email as well and I will see what I can
do to bring Indigo Ascend to your country.
</p>
        <p>
I have been invited to deliver a few Ascends before such as Visual Studio
2005 and such. However, I have always turned it down because I dont consider myself
to be a "<strong><em>professional</em></strong>" trainer since I have always been
on the field working on real projects with real problems in distributed technologies
for some time (and not some simulated fanciful classroom labs scenarios)
...
</p>
        <p>
... BUT...
</p>
        <p>
Indigo is an Ascend which I am proud and excited to deliver because it is a future
facet of Windows Server 2003 that I have spent quite some time on and I
believe it is something that real customers need in the field to solve real-world
problems <em><strong>today</strong></em>.
</p>
        <p>
There is really nothing quite like it out there at the moment or in the immediate
future outside of Microsoft. It is really one of Microsoft's innovation at its best.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=5b8655de-02b5-4980-888c-90e94da8e246" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Indigo Ascend in Asia Pacific</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,5b8655de-02b5-4980-888c-90e94da8e246.aspx</guid>
      <link>http://www.softwaremaker.net/blog/IndigoAscendInAsiaPacific.aspx</link>
      <pubDate>Sat, 11 Jun 2005 11:35:54 GMT</pubDate>
      <description>&lt;p&gt;
I will be delivering &lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank"&gt;Indigo&lt;/a&gt; Ascend
in Asia Pacific in the coming months on behalf of the Indigo and Ascend team in &lt;a href=http://www.microsoft.com target=_blank&gt;MSFT
Corp&lt;/a&gt;, Redmond, US.
&lt;/p&gt;
&lt;p&gt;
It will start in Sydney, Australia later this month, then move upwards (northwards)
to my own local backyard, Singapore. There are a few more countries Microsoft and
I&amp;nbsp;are&amp;nbsp;interested to look&amp;nbsp;at bringing this event as well.
&lt;/p&gt;
&lt;p&gt;
This will be a good time for me to meet up with real customers from the enterprises
who are using Microsoft distributed technologies or are planning to look into using
it in the future. Drop me an email &lt;a href="http://www.softwaremaker.net/Contact.asp#EmailSvcs" target=_blank&gt;here&lt;/a&gt;&amp;nbsp;if
you would like to engage me for a discussion.
&lt;/p&gt;
&lt;p&gt;
If you are reading this blog post and you work for an ISV or an enterprise&amp;nbsp;that
does a fair bit of distributed computing technology and you are interested in attending
this Indigo Ascend in Singapore (I think we are a little bit late in nominations for
Australia), do drop me a mail &lt;a href="http://www.softwaremaker.net/Contact.asp#EmailSvcs" target=_blank&gt;here&lt;/a&gt;&amp;nbsp;and
I will see what I can do to hook you up for this 3 day event.
&lt;/p&gt;
&lt;p&gt;
If you are from anywhere else besides Australia or Singapore (in APAC) and would love
to attend an event like this, do drop me an email as well and I will see what I can
do to bring Indigo Ascend to your country.
&lt;/p&gt;
&lt;p&gt;
I have been invited to deliver&amp;nbsp;a few&amp;nbsp;Ascends before such as Visual Studio
2005 and such. However, I have always turned it down because I dont consider myself
to be a "&lt;strong&gt;&lt;em&gt;professional&lt;/em&gt;&lt;/strong&gt;" trainer since I have always been
on the field working on real projects with real problems in distributed technologies
for some time (and&amp;nbsp;not&amp;nbsp;some simulated fanciful classroom labs scenarios)
...
&lt;/p&gt;
&lt;p&gt;
... BUT...
&lt;/p&gt;
&lt;p&gt;
Indigo is an Ascend which I am proud and excited to deliver because it is a future
facet of&amp;nbsp;Windows Server 2003 that I have&amp;nbsp;spent quite some time on and I
believe it is something that real customers need in the field to solve real-world
problems &lt;em&gt;&lt;strong&gt;today&lt;/strong&gt;&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
There is really nothing quite like it out there at the moment or in the immediate
future outside of Microsoft. It is really one of Microsoft's innovation at its best.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=5b8655de-02b5-4980-888c-90e94da8e246" /&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;Biz Matters;Windows Communication Foundation (WCF) aka Indigo</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=1cbb50a8-64dc-45d4-9a49-8b886ee8a95d</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,1cbb50a8-64dc-45d4-9a49-8b886ee8a95d.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://icelava.net/Forums/ShowPost.aspx?PostID=1034">Courtesy</a> of <a href="http://icelava.net">Aaron</a>,
a technically-brillant dude and a ASP.NET MVP of our Singapore Community.<br /><p><i><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #ffffcc"><img height="16" alt="SPONSOR.jpg" src="http://www.softwaremaker.net/blog/content/binary/SPONSOR.jpg" width="59" border="0" /><br />
With <a href="http://www.envisionwebhosting.com">cheap web hosting</a>, you can save
more on <a href="http://www.envisionwebhosting.com/domain-registration.htm">domain
name registration</a> and spend more on the <a href="http://www.envisionwebhosting.com/web-design.php">web
design</a> as well as the <a href="http://www.envisionwebhosting.com/seo.htm">seo
services</a>, particularly when you <a href="http://www.envisionwebhosting.com/business.php">work
at home</a>.</span></i></p><img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1cbb50a8-64dc-45d4-9a49-8b886ee8a95d" /><br /><hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Counting Queue items in MSMQ</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,1cbb50a8-64dc-45d4-9a49-8b886ee8a95d.aspx</guid>
      <link>http://www.softwaremaker.net/blog/CountingQueueItemsInMSMQ.aspx</link>
      <pubDate>Sat, 04 Jun 2005 07:58:14 GMT</pubDate>
      <description>&lt;a href="http://icelava.net/Forums/ShowPost.aspx?PostID=1034"&gt;Courtesy&lt;/a&gt; of &lt;a href="http://icelava.net"&gt;Aaron&lt;/a&gt;,
a technically-brillant dude and a ASP.NET MVP of our Singapore Community.&lt;br&gt;
&lt;p&gt;
&lt;i&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #ffffcc"&gt;&lt;img height=16 alt=SPONSOR.jpg src="http://www.softwaremaker.net/blog/content/binary/SPONSOR.jpg" width=59 border=0&gt;
&lt;br&gt;
With &lt;a href="http://www.envisionwebhosting.com"&gt;cheap web hosting&lt;/a&gt;, you can save
more on &lt;a href="http://www.envisionwebhosting.com/domain-registration.htm"&gt;domain
name registration&lt;/a&gt; and spend more on the &lt;a href="http://www.envisionwebhosting.com/web-design.php"&gt;web
design&lt;/a&gt; as well as the &lt;a href="http://www.envisionwebhosting.com/seo.htm"&gt;seo
services&lt;/a&gt;, particularly when you &lt;a href="http://www.envisionwebhosting.com/business.php"&gt;work
at home&lt;/a&gt;.&lt;/span&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1cbb50a8-64dc-45d4-9a49-8b886ee8a95d" /&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;Useful Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=e4ee50b6-3d23-4a1b-98bc-65a296409bf8</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,e4ee50b6-3d23-4a1b-98bc-65a296409bf8.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.port80software.com/about/press/060105" target="_blank">First Survey</a> of
U.S. Corporate Application Server and Scripting Deployments Reveals Microsoft® Ahead
of Competing Web Platforms.
</p>
        <p>
Not really a surprise to me but good to know nonetheless.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e4ee50b6-3d23-4a1b-98bc-65a296409bf8" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Survey Press Release from Port80 Software: ASP.NET and IIS Serve More Fortune 1000 Sites than Any Other Web Server Technologies</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,e4ee50b6-3d23-4a1b-98bc-65a296409bf8.aspx</guid>
      <link>http://www.softwaremaker.net/blog/SurveyPressReleaseFromPort80SoftwareASPNETAndIISServeMoreFortune1000SitesThanAnyOtherWebServerTechnologies.aspx</link>
      <pubDate>Wed, 01 Jun 2005 14:13:11 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.port80software.com/about/press/060105" target=_blank&gt;First Survey&lt;/a&gt; of
U.S. Corporate Application Server and Scripting Deployments Reveals Microsoft® Ahead
of Competing Web Platforms.
&lt;/p&gt;
&lt;p&gt;
Not really a surprise to me but good to know nonetheless.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e4ee50b6-3d23-4a1b-98bc-65a296409bf8" /&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</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=79619a6f-1391-4cf4-972e-8e68beb36220</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,79619a6f-1391-4cf4-972e-8e68beb36220.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
With reference to my earlier post <a href="http://www.softwaremaker.net/blog/PermaLink,guid,7cdccdaf-2795-417d-92fd-e44d0b546970.aspx" target="_blank">here</a>,
more details on the conference (SDA.NET 2005) are now publicly available <a href="http://www.sda-asia.com/dotnet/" target="_blank">here</a>.
This is a paid event and it is rarity in Singapore as technological conferences are
usually presented free. BUT I am sure attendees can find a lot of value here as top
notch speakers from all over the world will be flying over here to share their industry
experience and knowledge.
</p>
        <p>
Who are these speakers, you ask ? There is the famous <a href="http://www.thinktecture.com/staff/ingo/weblog/" target="_blank">Ingo
Rammer</a> and <a href="http://staff.newtelligence.net/clemensv/" target="_blank">Clemens
Vasters</a> and of course, moi <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" />.
</p>
        <p>
I will be making 2 presentations in the VIP Tracks, namely
</p>
        <li>
          <strong>Demystifying WSDL (26 May 2005 1045 hours)</strong>
          <p>
While developers rely on the many powerful features of today's IDEs, inner technical
plumbings are often ignored and worst yet - misrepresented and misunderstood. This
ignorance of inner workings can lead developers to choose the wrong technologies and
solutions for solving specific problems. Nevertheless, when it comes to troubleshooting
the nooks, crannies and crevices at crunch time with no extra help, nothing beats
a dirty pair of hands, a hammer and screwdriver. William Tay attempts to get everyone's
hands dirty with a detailed look at WSDL, one of the most core and mature XML service
technologies of today. 
</p>
          <p>
Topics to be covered include: what is WSDL, WSDL's critical role in service-orientated
architecture (SOA), and WSDL's core elements and definitions. He will also survey
WSDL best practices (eg. interoperability, extensibility, versioning, etc.) and the
application of WSDL concepts in Indigo. The new features and enhanced functionality
incorporated into the upcoming release of WSDL 2.0 are explained and compared with
the current WSDL version.
</p>
          <p>
            <em>NOTE: This is a (Level 400) deep technical session that is not for the faint-hearted.
However, it will be a angle-bracket fest.</em>
          </p>
        </li>
        <li>
          <strong>SOAP Message-based Security: Today and Tomorrow (26 May 2005 1415 hours)</strong>
          <p>
One of the three key pillars of critical importance in the adoption of SOAP messaging-based
services in an enterprise is security. In fact, the security aspect of standards-based
messaging system has been singled out by worldwide CXOs as the most inhibiting factor
in the mainstream-wide adoption within an enterprise. The ratification of WS-Security
1.0 by OASIS on 6 April 2004 has gone into great lengths to change that perception.
William will show how and what you can do to secure your SOAP messaging-based services
today. You will also learn how the same standards-based WS-Security Specifications
can be used to secure the next generation of distributed web services with Indigo.
</p>
          <p>
All 3 of us are presenting on Indigo as well. This will be a good time to catch a
preview of Indigo and have a feel of what it is all about. I really hope to see a
good turnout there and it will be a good time to catch up with Ingo, Clemens and the
rest of the folks.
</p>
          <p>
See you there.
</p>
        </li>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=79619a6f-1391-4cf4-972e-8e68beb36220" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Software Development Architecture's DotNet Conference 2005</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,79619a6f-1391-4cf4-972e-8e68beb36220.aspx</guid>
      <link>http://www.softwaremaker.net/blog/SoftwareDevelopmentArchitecturesDotNetConference2005.aspx</link>
      <pubDate>Fri, 29 Apr 2005 23:20:56 GMT</pubDate>
      <description>&lt;p&gt;
With reference to my earlier post &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,7cdccdaf-2795-417d-92fd-e44d0b546970.aspx" target=_blank&gt;here&lt;/a&gt;,
more details on the conference (SDA.NET 2005) are now publicly available &lt;a href="http://www.sda-asia.com/dotnet/" target=_blank&gt;here&lt;/a&gt;.
This is a paid event and it is rarity in Singapore as technological conferences are
usually presented free. BUT I am sure attendees can find a lot of value here as top
notch speakers from all over the world will be flying over here to share their industry
experience and knowledge.
&lt;/p&gt;
&lt;p&gt;
Who are these speakers, you ask ? There is the famous &lt;a href="http://www.thinktecture.com/staff/ingo/weblog/" target=_blank&gt;Ingo
Rammer&lt;/a&gt; and &lt;a href="http://staff.newtelligence.net/clemensv/" target=_blank&gt;Clemens
Vasters&lt;/a&gt; and of course, moi &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
I will be making 2 presentations in the VIP Tracks, namely
&lt;/p&gt;
&lt;li&gt;
&lt;strong&gt;Demystifying WSDL (26 May 2005 1045 hours)&lt;/strong&gt; 
&lt;p&gt;
While developers rely on the many powerful features of today's IDEs, inner technical
plumbings are often ignored and worst yet - misrepresented and misunderstood. This
ignorance of inner workings can lead developers to choose the wrong technologies and
solutions for solving specific problems. Nevertheless, when it comes to troubleshooting
the nooks, crannies and crevices at crunch time with no extra help, nothing beats
a dirty pair of hands, a hammer and screwdriver. William Tay attempts to get everyone's
hands dirty with a detailed look at WSDL, one of the most core and mature XML service
technologies of today. 
&lt;/p&gt;
&lt;p&gt;
Topics to be covered include: what is WSDL, WSDL's critical role in service-orientated
architecture (SOA), and WSDL's core elements and definitions. He will also survey
WSDL best practices (eg. interoperability, extensibility, versioning, etc.) and the
application of WSDL concepts in Indigo. The new features and enhanced functionality
incorporated into the upcoming release of WSDL 2.0 are explained and compared with
the current WSDL version.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;NOTE: This is a (Level 400) deep technical session that is not for the faint-hearted.
However, it will be a angle-bracket fest.&lt;/em&gt;
&lt;/p&gt;
&lt;li&gt;
&lt;strong&gt;SOAP Message-based Security: Today and Tomorrow (26 May 2005 1415 hours)&lt;/strong&gt; 
&lt;p&gt;
One of the three key pillars of critical importance in the adoption of SOAP messaging-based
services in an enterprise is security. In fact, the security aspect of standards-based
messaging system has been singled out by worldwide CXOs as the most inhibiting factor
in the mainstream-wide adoption within an enterprise. The ratification of WS-Security
1.0 by OASIS on 6 April 2004 has gone into great lengths to change that perception.
William will show how and what you can do to secure your SOAP messaging-based services
today. You will also learn how the same standards-based WS-Security Specifications
can be used to secure the next generation of distributed web services with Indigo.
&lt;/p&gt;
&lt;p&gt;
All 3 of us are presenting on Indigo as well. This will be a good time to catch a
preview of Indigo and have a feel of what it is all about. I really hope to see a
good turnout there and it will be a good time to catch up with Ingo, Clemens and the
rest of the folks.
&lt;/p&gt;
&lt;p&gt;
See you there.
&lt;/p&gt;
&lt;/li&gt;&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=79619a6f-1391-4cf4-972e-8e68beb36220" /&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;Presentations;Windows Communication Foundation (WCF) aka Indigo</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=a245c28c-e613-4e58-9975-34fb4e654566</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,a245c28c-e613-4e58-9975-34fb4e654566.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some of the folks in the <a href="http://www.sgdotnet.org/" target="_blank" title="Singapore Professional DotNet Usergroup">Spore
DotNet Usergroup</a> got together one night to run a practical <a href="http://forums.sgdotnet.org/ShowPost.aspx?PostID=8946" target="_blank">project</a>.
The idea behind the link is to build a bridge to access Visual SourceSafe over the
internet. It was built <a href="http://forums.sgdotnet.org/ShowPost.aspx?PostID=6857" target="_blank">successfully</a> with
the help of <a href="http://www.nesterovsky-bros.com/html/css2/SCCBridge.htm" target="_blank">SCCBridge</a>.
</p>
        <p>
Incidentally, SCCBridge relies heavily on SOAP and DIME for its purpose and it is
therefore no surprise that <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 2.0 was heavily involved in use here.
</p>
        <p>
"<em><font face="Tahoma">Both the server and the client are written in <b>C#</b> in <b>Microsoft
Visual Studio .NET</b>. In the project is used library <b>SharpZipLib</b> created
by <b>Mike Krueger</b> (for more info see </font></em><a href="http://www.icsharpcode.net/" target="_blank"><em><font face="Tahoma">http://www.icsharpcode.net/</font></em></a><em><font face="Tahoma"> ).
The algorithm for text files comparing was taken from </font></em><a href="http://www.codeproject.com/cpp/vdiff.asp?target=vdiff" target="_blank"><em><font face="Tahoma">The
Code Porject</font></em></a><em><font face="Tahoma"> site, and was written by Shankar
Pratap.</font></em>"
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=a245c28c-e613-4e58-9975-34fb4e654566" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Setting up the SCCBridge project for Version Control</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,a245c28c-e613-4e58-9975-34fb4e654566.aspx</guid>
      <link>http://www.softwaremaker.net/blog/SettingUpTheSCCBridgeProjectForVersionControl.aspx</link>
      <pubDate>Fri, 28 Jan 2005 15:28:07 GMT</pubDate>
      <description>&lt;p&gt;
Some of&amp;nbsp;the folks in the &lt;a href="http://www.sgdotnet.org/" target="_blank" title="Singapore Professional DotNet Usergroup"&gt;Spore
DotNet Usergroup&lt;/a&gt; got together one night to run a practical &lt;a href="http://forums.sgdotnet.org/ShowPost.aspx?PostID=8946" target=_blank&gt;project&lt;/a&gt;.
The idea behind the link is to build a bridge to access Visual SourceSafe over the
internet.&amp;nbsp;It was built &lt;a href="http://forums.sgdotnet.org/ShowPost.aspx?PostID=6857" target=_blank&gt;successfully&lt;/a&gt; with
the help of &lt;a href="http://www.nesterovsky-bros.com/html/css2/SCCBridge.htm" target=_blank&gt;SCCBridge&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Incidentally, SCCBridge relies heavily on SOAP and DIME for its purpose and it is
therefore no surprise that &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 was heavily involved in use here.
&lt;/p&gt;
&lt;p&gt;
"&lt;em&gt;&lt;font face=Tahoma&gt;Both the server and the client are written in &lt;b&gt;C#&lt;/b&gt; in &lt;b&gt;Microsoft
Visual Studio .NET&lt;/b&gt;. In the project&amp;nbsp;is used library &lt;b&gt;SharpZipLib&lt;/b&gt; created
by &lt;b&gt;Mike Krueger&lt;/b&gt; (for more info see &lt;/font&gt;&lt;/em&gt;&lt;a href="http://www.icsharpcode.net/" target=_blank&gt;&lt;em&gt;&lt;font face=Tahoma&gt;http://www.icsharpcode.net/&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font face=Tahoma&gt; ).
The algorithm for text files comparing was taken from &lt;/font&gt;&lt;/em&gt;&lt;a href="http://www.codeproject.com/cpp/vdiff.asp?target=vdiff" target=_blank&gt;&lt;em&gt;&lt;font face=Tahoma&gt;The
Code Porject&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font face=Tahoma&gt; site, and was written by Shankar
Pratap.&lt;/font&gt;&lt;/em&gt;"
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=a245c28c-e613-4e58-9975-34fb4e654566" /&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;Community;Software Development;Technology</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=7f374c71-56ab-4469-8693-d306680115cd</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,7f374c71-56ab-4469-8693-d306680115cd.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <title>Hungarian Notation, Microsoft JET Reserved Keywords and the Square Brackets</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,7f374c71-56ab-4469-8693-d306680115cd.aspx</guid>
      <link>http://www.softwaremaker.net/blog/HungarianNotationMicrosoftJETReservedKeywordsAndTheSquareBrackets.aspx</link>
      <pubDate>Sat, 18 Dec 2004 23:50:06 GMT</pubDate>
      <description>&lt;p&gt;
Having been developing for a number of years since the late 80s, I have been very
used to the programming practice of using &lt;a href="http://www.hyperdictionary.com/computing/hungarian+notation" target=_blank&gt;hungarian
notation&lt;/a&gt;. I not only used it in variables, but in the database naming as well.
Yes, I used &lt;em&gt;tbl&lt;/em&gt; and &lt;em&gt;fld&lt;/em&gt; prefixes for my Tablenames and Fieldnames
respectively.
&lt;/p&gt;
&lt;p&gt;
Of course, recent recommendations is to dump hungarian notation in your programming
style and opt to use meaningfull, descriptive words instead. I have also been&amp;nbsp;poked
fun at&amp;nbsp;for using hungarian notation&amp;nbsp;while doing&amp;nbsp;some&amp;nbsp;testing work
for &lt;a href="http://workspaces.gotdotnet.com/paladin" target="_blank"&gt;Paladin&lt;/a&gt; by
its author. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/cry.gif"&lt;/P&gt; 
&lt;p&gt;
So there I decided to adopt&amp;nbsp;a new developing and programming lifestyle and was
happily humming along when I got hit face-first by a (JET Engine) ADO.NET Exception &lt;font color=#ff0000&gt;&lt;em&gt;Syntax
error in UPDATE&amp;nbsp; (0x80040E14)&lt;/em&gt;&lt;/font&gt;. Having been doing the same UPDATE
statement style and using the same Data Access Layer blocks for so long, the ego-monster
in me&amp;nbsp;looked for a system bug right away. Running this same query within MS Access
itself would be fine but if I used JET as the Data Provider, the same exception would
occur. Try as I have to google'd it, I cannot seem to find out what was wrong. Most
of them poined to the use of JET's keywords such as [PASSWORD] which I have learnt
from previous experience to just use PWD. Here is my &amp;#8220;post-hungarian notation&amp;#8221;
UPDATE Statement:
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Georgia color=#006633&gt;"UPDATE LibraryItems SET Title = '" &amp;amp; psTitle
&amp;amp; _&lt;br&gt;
"', AuthorArtist = '" &amp;amp; psAuthorArtist &amp;amp; "' , ItemTypeID = " &amp;amp; piItemTypeID
&amp;amp; _&lt;br&gt;
" , GenreID = " &amp;amp; piItemTypeID &amp;amp; " , ContentFormatID = " &amp;amp; piContentFormatID
&amp;amp; _&lt;br&gt;
" , Qty = " &amp;amp; piQty &amp;amp; " , DateBought = #" &amp;amp; pdDateBought &amp;amp; "# , PriceBought
= " &amp;amp; _&lt;br&gt;
pcPriceBought &amp;amp; " , DateSold = #" &amp;amp; pdDateSold &amp;amp; "# , PriceSold = " &amp;amp;
_&lt;br&gt;
pcPriceSold &amp;amp; " , StatusID = " &amp;amp; piStatusID &amp;amp; " , References = '" &amp;amp;
psReferences &amp;amp; _&lt;br&gt;
"' , Remarks = '" &amp;amp; psRemarks &amp;amp; "' WHERE ID = " &amp;amp; CommonUtil.ValidateSQLSafeString(mRecID)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Can you spot my mistake ? I didnt until I stumbled across this &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;321266" target=_blank&gt;MS
Support&amp;nbsp;article&lt;/a&gt; about JET's reserved keywords...
&lt;/p&gt;
&lt;p&gt;
AARRGH !!! So, REFERENCES is a JET's reserved keyword as well. In the past, I would
have used fldReferences and therefore would NOT have encountered such an exception.
&lt;/p&gt;
&lt;p&gt;
The FIX: Wrap Square brackets around the column name [References]. In fact, I recommend
to wrap it around all column names, not just suspect ones. OR just use the CommandBuilder
QuotePrefix and QuoteSuffix command to bypass the reserved keyword error.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
CommandBuilder.QuotePrefix = "[" 
&lt;li&gt;
CommandBuilder.QuoteSuffix = "]"&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=7f374c71-56ab-4469-8693-d306680115cd" /&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;Random Musings;Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=9e8cff20-4bd5-46cc-bb98-7f6019a1dc46</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,9e8cff20-4bd5-46cc-bb98-7f6019a1dc46.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have came across many questions regarding the generation of self-signed <a href="http://www.ietf.org/html.charters/pkix-charter.html" target="_blank">X.509
PKI Digital Certificates</a> using makecert.exe. Please use the makecert.exe that
comes with the Platform SDK *<strong><em>Feb 2003</em></strong>* and <strong>NOT</strong> the
one that came with the .NET SDK.
</p>
        <p>
With the help of <a href="http://www.dynamic-cast.com/" target="_blank">Hervey</a>,
these are the steps:
</p>
        <ol>
          <li>
makecert -cy authority -r -n "CN=demos1.Softwaremaker.NET" -sr localmachine -ss "Trust" 
</li>
          <li>
makecert -cy end -n "CN=demos1.Softwaremaker.NET SERVER" -sky exchange -sk "demos1.Softwaremaker.NET
Server" -ss "My" -sr localmachine -in "demos1.Softwaremaker.NET" -ir localmachine
-is "Trust" 
</li>
          <li>
makecert -cy end -n "CN=demos1.Softwaremaker.NET CLIENT" -sky exchange -sk "demos1.Softwaremaker.NET
Client" -ss "My" -sr localmachine -in "demos1.Softwaremaker.NET" -ir localmachine
-is "Trust"</li>
        </ol>
        <p>
The -sk option specifies a key name, you can use any value that *<strong>SHOULD</strong>*
relate to the name of the certificate. The -sk exchange option ensures that the certificate
can be used to encrypt
</p>
        <p>
Note that after the Step 1, a certificate is created in the "Enterprise Trust" folder
in *both* the Local Machine as well as the Current User store. If you delete this
certificate to recreate this scenario, then you need to:
</p>
        <ol>
          <li>
record the name of the private key file using the X509Certificate tool 
</li>
          <li>
B. delete the certificate using mmc, from both the Local Machine (Trust) 
<br />
as well as the Current User (Trust) 
</li>
          <li>
C. ensure that the private key file has been removed from the machine.</li>
        </ol>
        <p>
To obtain a .cer file, use the certificate snap-in in the MMC console, find the certificate
and export it without it's private key.
</p>
        <p>
Finally, notice that Step 3 places the client certificate in the LocalMachine store;
clients certs are more generally placed in the CurrentUser store.
</p>
        <p>
          <strong>
            <em>Please take note that X.509 Digital Certs generated this way are for testing
and development purposes only. It is best to *purchase* a digital certification from
a TRUE Certificate Authority (CA) for production purposes. Performance is usually
better with digital certificates issued from a true CA as well.</em>
          </strong>
        </p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=9e8cff20-4bd5-46cc-bb98-7f6019a1dc46" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Using Platform SDK MakeCert Utility to generate Self-Signed Certs</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,9e8cff20-4bd5-46cc-bb98-7f6019a1dc46.aspx</guid>
      <link>http://www.softwaremaker.net/blog/UsingPlatformSDKMakeCertUtilityToGenerateSelfSignedCerts.aspx</link>
      <pubDate>Fri, 19 Nov 2004 23:42:40 GMT</pubDate>
      <description>&lt;p&gt;
I have came across many questions regarding the generation of self-signed &lt;a href="http://www.ietf.org/html.charters/pkix-charter.html" target="_blank"&gt;X.509
PKI Digital Certificates&lt;/a&gt; using makecert.exe. Please use the makecert.exe that
comes with the Platform SDK *&lt;strong&gt;&lt;em&gt;Feb 2003&lt;/em&gt;&lt;/strong&gt;* and &lt;strong&gt;NOT&lt;/strong&gt; the
one that came with the .NET SDK.
&lt;/p&gt;
&lt;p&gt;
With the help of &lt;a href="http://www.dynamic-cast.com/" target=_blank&gt;Hervey&lt;/a&gt;,
these are the steps:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
makecert -cy authority -r -n "CN=demos1.Softwaremaker.NET" -sr localmachine -ss "Trust" 
&lt;li&gt;
makecert -cy end -n "CN=demos1.Softwaremaker.NET SERVER" -sky exchange -sk "demos1.Softwaremaker.NET
Server" -ss "My" -sr localmachine -in "demos1.Softwaremaker.NET" -ir localmachine
-is "Trust" 
&lt;li&gt;
makecert -cy end -n "CN=demos1.Softwaremaker.NET CLIENT" -sky exchange -sk "demos1.Softwaremaker.NET
Client" -ss "My" -sr localmachine -in "demos1.Softwaremaker.NET" -ir localmachine
-is "Trust"&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
The -sk option specifies a key name, you can use any value that *&lt;strong&gt;SHOULD&lt;/strong&gt;*
relate to the name of the certificate. The -sk exchange option ensures that the certificate
can be used to encrypt
&lt;/p&gt;
&lt;p&gt;
Note that after the Step 1, a certificate is created in the "Enterprise Trust" folder
in *both* the Local Machine as well as the Current User store. If you delete this
certificate to recreate this scenario, then you need to:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
record the name of the private key file using the X509Certificate tool 
&lt;li&gt;
B. delete the certificate using mmc, from both the Local Machine (Trust) 
&lt;br&gt;
as well as the Current User (Trust) 
&lt;li&gt;
C. ensure that the private key file has been removed from the machine.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
To obtain a .cer file, use the certificate snap-in in the MMC console, find the certificate
and export it without it's private key.
&lt;/p&gt;
&lt;p&gt;
Finally, notice that Step 3 places the client certificate in the LocalMachine store;
clients certs are more generally placed in the CurrentUser store.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Please take note that X.509 Digital Certs generated this way are for testing
and development purposes only. It is best to *purchase* a digital certification from
a TRUE Certificate Authority (CA) for production purposes. Performance is usually
better with digital certificates issued from a true CA as well.&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=9e8cff20-4bd5-46cc-bb98-7f6019a1dc46" /&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;Web Services Enhancements (WSE)</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=dd97ba6e-53a4-4b45-9a87-81447a0b99e9</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,dd97ba6e-53a4-4b45-9a87-81447a0b99e9.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
With reference to my previous posted here on <a href="http://www.softwaremaker.net/blog/PermaLink,guid,43d85031-3e0b-48a7-bdd7-1f49932db40a.aspx" target="_blank">Real
World UsernameToken Authentication Scenarios with WSE 2.0</a></p>
        <p>
I have received some very good responses and feedback based on that and the questions
tend to continue:
</p>
        <p>
Some of the feedback I have received asked about the Encryption of the UsernameToken
in the ResponseStream in the example given above. Here is a sample question:
</p>
        <p>
          <font color="#000080">
            <em>Encrypting the username token using the public key of the
server ensures<br />
that the password is encrypted in the request to the server. What happens<br />
when the response from the server is sent to the client ? I have looked at the<br />
the trace the output tace at the client has no password in clear text. But<br />
the input trace on the client has a clear text password. Why ?</em>
          </font>
        </p>
        <p>
The username credentials returned will follow that of the request method. So, if you
send a SendPlainText mode of the PasswordOption in a request [even though you encrypt
the UsernameToken afterwards], the UsernameToken in the response will be sent back
in PlainText as well. This happens, of course, if you added the mutable UsernameToken
back into the response stream<br />
 <br /><font color="#000080"><em><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><font face="Verdana"><font size="2"><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Add
Mutable Token into the Token Collection of the Response</span><br />
ResponseSoapContext.Current.Security.Tokens.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(RetrievedUsernameTokenFromRequestStream)<br /></font></font></span></em></font></p>
        <p>
We cannot re-do the process we did earlier in the RequestStream by encrypting the
UsernameToken again. If you remember, that was done because we had to do some Hash-Digest
comparision with the Hash value stored in the user db against the Hash value generated
from the Password sent in the RequestStream. Thus, the Password send have to be in
PlainText mode. However, we will encrypt the UsernameToken so that it doesnt get seen
on the wire. We encrypt it with the Recipient's PublicKey for the Recipient's perusal.
At least, an encrypted token <strong>CAN</strong> be decrypted, a Hashed one <strong>CANNOT</strong>.<br />
 <br />
However, we cannot do the same in the reverse ResponseStream. This is because we cannot
encrypt the Recipient's SecurityToken with the Recipient's key. The Recipient machine
would not know how to decrypt it.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" size="2">
              <em>ResponseSoapContext.Security.Elements.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> EncryptedData(eTok, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"#"</span> &amp;
eTok.Id))</em>
            </font>
          </span>
        </p>
        <p>
doesnt make any sense and would be invalid and the Recipient would respond with a
SOAP Client error:<br />
 <br /><font color="#000080"><em>    ApplicationException: WSE507: The order
of security elements and security tokens<br />
    will cause a processing failure on the receiving end, and they
must be reordered<br />
    to create a valid message.<br /></em></font> <br />
To hack around this constraint in WSE 2.0, the best alternative I could think of and
tried is to intercept the process and force the UsernameToken to be sent back with
a SendHashed or better, with a SendNone Option. This can be done by typeCasting the
SecurityToken that is retrieved from the earlier RequestStream to that of a UsernameToken.
Then retrieve all the necessary credentials of the casted UsernameToken (eg. Username,
Password) and send that details into a new instantiated UsernameToken. Then, add this
newly created mutable UsernameToken into the ResponseSoapContext Stream.<font color="#000080"><em></em></font></p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana">
              <font size="2">
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Retrieve
the Signing Token from the Request Message</span>
                <br />
                <br />
                <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> eTok <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> SecurityToken <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> GetBodySigningToken(RequestStream)<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Retrieve
the Encrypting X509Security Token from the Request Message</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> sTok <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> X509SecurityToken <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> GetBodyEncryptingToken(RequestStream)<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'CAST
the SecurityToken into a UsernameToken type</span><br /><br />
eTok <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>(eTok,
UsernameToken) 
<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Force
the process to send back a Hashed or NO Password</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> ut <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> UsernameToken <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> UsernameToken
_CType(eTok, UsernameToken).Username, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CType</span>(eTok,
UsernameToken).Password, PasswordOption.SendHashed)<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Retrieve
the same Cert from the Local Machine store and Check if it supports Digital Signing</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> sX509KeyID <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><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> Convert.ToBase64String(sTok.Certificate.GetKeyIdentifier)<br />
sTok <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> Helpers.GetSigningX509Cert(sX509KeyID)<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Add
Mutable Token into the Token Collection of the Response</span><br /><br />
ResponseSoapContext.Security.Tokens.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(ut)<br />
ResponseSoapContext.Security.Tokens.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(sTok)<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Add
the Message Signature into the message</span><br /><br />
Resp.Security.Elements.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> MessageSignature(sTok))<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Add
the Encrypted data into the message</span><br /><br />
Resp.Security.Elements.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> EncryptedData(ut))<br /></font>
            </font>
          </span>
        </p>
        <p>
From the ResponseStream generated, you will be able to look at the UsernameToken sent
back now to the Recipient. However, the Password will be Hashed or there may be <strong>NO</strong> Password
at all (if you configured to be sent back with a PasswordNone Option). Below is the
trace snippet sent back from the Server to the Recipient.<br />
 <br /><font color="#000080"><em>        &lt;wsse:UsernameToken...&gt;<br />
          &lt;wsse:Username&gt;TestAccount&lt;/wsse:Username&gt;<br />
          &lt;wsse:Password Type=...&gt;wc9Xl04zDgbbd0NIrOuHuRcsRVs=&lt;/wsse:Password&gt;<br />
          &lt;wsse:Nonce&gt;qr7saTsm5H/YNSjIl3w2kA==&lt;/wsse:Nonce&gt;<br />
          &lt;wsu:Created&gt;2004-08-05T09:38:53Z&lt;/wsu:Created&gt;<br />
        &lt;/wsse:UsernameToken&gt;</em></font></p>
        <p>
Of course, if the Service Consumer has their X.509 Digital Certs as well, we
can always embed a binarySecurityToken representation of the client's Public Key into
the SOAP Request stream and then, in the Service Response Stream, encrypt the Consumer's
UsernameToken with his own Public Key taken from the binarySecurityToken representation
and dispatches it. However, this is not an elegant solution as
</p>
        <ol>
          <li>
Most Service Consumers do not have their own X.509 Digital Certs and therefore, we
have to cater for those who dont. This means extra processing power and code is needed
to parse the SOAP Message to check for the binarySecurityToken and extra logic is
required to hash it back using the above method if the binarySecurityToken is not
found. 
</li>
          <li>
Message Payload will increase with any type of encryption as compared to hash digest
and with the attachment of the binarySecurityToken as well.</li>
        </ol>
        <p>
Do let me know if this works for any of you or, if you have better suggestions.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=dd97ba6e-53a4-4b45-9a87-81447a0b99e9" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Continuing: Real World UsernameToken Authentication Scenarios with WSE2.0</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,dd97ba6e-53a4-4b45-9a87-81447a0b99e9.aspx</guid>
      <link>http://www.softwaremaker.net/blog/ContinuingRealWorldUsernameTokenAuthenticationScenariosWithWSE20.aspx</link>
      <pubDate>Thu, 04 Nov 2004 06:06:28 GMT</pubDate>
      <description>&lt;p&gt;
With reference to my previous posted here on &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,43d85031-3e0b-48a7-bdd7-1f49932db40a.aspx" target=_blank&gt;Real
World UsernameToken Authentication Scenarios with WSE 2.0&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I&amp;nbsp;have received some very good responses and feedback based on that and the questions
tend to continue:
&lt;/p&gt;
&lt;p&gt;
Some&amp;nbsp;of the feedback I have received asked&amp;nbsp;about the Encryption of the UsernameToken
in the ResponseStream in the example given above. Here is a sample question:
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#000080&gt;&lt;em&gt;Encrypting the username token using the public key of the
server ensures&lt;br&gt;
that the password is encrypted in the request to the server. What happens&lt;br&gt;
when the response from the server is sent to the client ? I have looked at the&lt;br&gt;
the trace the output tace at the client has no password in clear text. But&lt;br&gt;
the input trace on the client has a clear text password. Why ?&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
The username credentials returned will follow that of the request method. So, if you
send a SendPlainText mode of the PasswordOption in a request [even though you encrypt
the UsernameToken afterwards], the UsernameToken in the response will be sent back
in PlainText as well. This happens, of course, if you added the mutable UsernameToken
back into the response stream&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&lt;font color=#000080&gt;&lt;em&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font face=Verdana&gt;&lt;font size=2&gt;&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Add
Mutable Token into the Token Collection of the Response&lt;/span&gt;
&lt;br&gt;
ResponseSoapContext.Current.Security.Tokens.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(RetrievedUsernameTokenFromRequestStream)&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&gt;&gt;We cannot re-do the process we did earlier in the RequestStream by encrypting the
UsernameToken again. If you remember, that was done because we had to do some Hash-Digest
comparision with the Hash value stored in the user db against the Hash value generated
from the Password sent in the RequestStream. Thus, the Password send have to be in
PlainText mode. However, we will encrypt the UsernameToken so that it doesnt get seen
on the wire. We encrypt it with the Recipient's PublicKey for the Recipient's perusal.
At least, an encrypted token &lt;strong&gt;CAN&lt;/strong&gt; be decrypted, a Hashed one &lt;strong&gt;CANNOT&lt;/strong&gt;.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
However, we cannot do the same in the reverse ResponseStream. This is because we cannot
encrypt the Recipient's SecurityToken with the Recipient's key. The Recipient machine
would not know how to decrypt it.
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font face=Verdana size=2&gt;&lt;em&gt;ResponseSoapContext.Security.Elements.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; EncryptedData(eTok, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"#"&lt;/span&gt; &amp;amp;
eTok.Id))&lt;/em&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
doesnt make any sense and would be invalid and the Recipient would respond with a
SOAP Client error:&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&lt;font color=#000080&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ApplicationException: WSE507: The order
of security elements and security tokens&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; will cause a processing failure on the receiving end, and they
must be reordered&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; to create a valid message.&lt;br&gt;
&lt;/em&gt;&lt;/font&gt;&amp;nbsp;&lt;br&gt;
To hack around this constraint in WSE 2.0, the best alternative I could think of and
tried is to intercept the process and force the UsernameToken to be sent back with
a SendHashed or better, with a SendNone Option. This can be done by typeCasting the
SecurityToken that is retrieved from the earlier RequestStream to that of a UsernameToken.
Then retrieve all the necessary credentials of the casted UsernameToken (eg. Username,
Password) and send that details into a new instantiated UsernameToken. Then, add this
newly created mutable UsernameToken into the ResponseSoapContext Stream.&lt;font color=#000080&gt;&lt;em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font face=Verdana&gt;&lt;font size=2&gt;&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Retrieve
the Signing Token from the Request Message&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;Dim&lt;/span&gt; eTok &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; SecurityToken &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; GetBodySigningToken(RequestStream)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Retrieve
the Encrypting X509Security Token from the Request Message&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;Dim&lt;/span&gt; sTok &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; X509SecurityToken &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; GetBodyEncryptingToken(RequestStream)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'CAST
the SecurityToken into a UsernameToken type&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
eTok &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;(eTok,
UsernameToken) 
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Force
the process to send back a Hashed or NO Password&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;Dim&lt;/span&gt; ut &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; UsernameToken &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; UsernameToken
_CType(eTok, UsernameToken).Username, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;CType&lt;/span&gt;(eTok,
UsernameToken).Password, PasswordOption.SendHashed)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Retrieve
the same Cert from the Local Machine store and Check if it supports Digital Signing&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;Dim&lt;/span&gt; sX509KeyID &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;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; Convert.ToBase64String(sTok.Certificate.GetKeyIdentifier)&lt;br&gt;
sTok &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; Helpers.GetSigningX509Cert(sX509KeyID)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Add
Mutable Token into the Token Collection of the Response&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
ResponseSoapContext.Security.Tokens.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(ut)&lt;br&gt;
ResponseSoapContext.Security.Tokens.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(sTok)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Add
the Message Signature into the message&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
Resp.Security.Elements.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; MessageSignature(sTok))&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Add
the Encrypted data into the message&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
Resp.Security.Elements.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; EncryptedData(ut))&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&gt;&gt;From the ResponseStream generated, you will be able to look at the UsernameToken
sent back now to the Recipient. However, the Password will be Hashed or there may
be &lt;strong&gt;NO&lt;/strong&gt; Password at all (if you configured to be sent back with a PasswordNone
Option). Below is the trace snippet sent back from the Server to the Recipient.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&lt;font color=#000080&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsse:UsernameToken...&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsse:Username&amp;gt;TestAccount&amp;lt;/wsse:Username&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsse:Password Type=...&amp;gt;wc9Xl04zDgbbd0NIrOuHuRcsRVs=&amp;lt;/wsse:Password&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsse:Nonce&amp;gt;qr7saTsm5H/YNSjIl3w2kA==&amp;lt;/wsse:Nonce&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsu:Created&amp;gt;2004-08-05T09:38:53Z&amp;lt;/wsu:Created&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/wsse:UsernameToken&amp;gt;&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Of course, if the Service Consumer has&amp;nbsp;their X.509 Digital Certs as well, we
can always embed a binarySecurityToken representation of the client's Public Key into
the SOAP Request stream and then, in the Service Response Stream, encrypt the Consumer's
UsernameToken with his own Public Key taken from the binarySecurityToken representation
and&amp;nbsp;dispatches it. However, this is not an elegant solution as
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Most Service Consumers do not have their own X.509 Digital Certs and therefore, we
have to cater for those who dont. This means extra processing power and code is needed
to parse the SOAP Message to check for the binarySecurityToken and extra logic is
required to hash it back using the above method if the binarySecurityToken is not
found. 
&lt;li&gt;
Message Payload will increase with any type of encryption as compared to hash digest
and with the attachment of the binarySecurityToken as well.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Do let me know if this works for any of you&amp;nbsp;or, if you have better suggestions.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=dd97ba6e-53a4-4b45-9a87-81447a0b99e9" /&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;Web Services Enhancements (WSE);XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=43d85031-3e0b-48a7-bdd7-1f49932db40a</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,43d85031-3e0b-48a7-bdd7-1f49932db40a.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It sure is great to see many people beginning to experiment and use <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 2.0. Many people I speak to and come across today
are still trying to grasp the security features of WSE.
</p>
        <p>
I had blogged about this earlier in my old weblog host <a href="http://dotnetjunkies.com/WebLog/softwaremaker/archive/2004/06/10/16012.aspx" target="_blank">here</a>.
However, I will just summed it up for interested parties in this post.
</p>
        <p>
...While the Documentation of WSE 2.0 teaches on how to authenticate a usernameToken
from a client request against a database query [I print it here for your benefit]:
</p>
        <font color="#000080">
          <em>
            <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
              <font face="Verdana">
                <font size="3">
                  <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
                    <p>
                      <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
                        <font face="Verdana">
                          <font size="2">
                            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Protected</span>
                            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Overrides</span>
                            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span> AuthenticateToken(userName <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> UsernameToken) <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 /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'BLAH
BLAH BLAH</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'You
are supposed to be reading from a returned Database query based on the UsernameToken.userName
property.</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Then
you are supposed to return the Password that is returned from the DB Query here</span><br /><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></font>
                        </font>
                      </span>
                    </p>
                    <p>
                    </p>
                  </span>
                </font>
              </font>
            </span>
          </em>
        </font>However, it doesnt touch on one of the
best practices of Security of storing passwords into a database which is to hash userpasswords
and then store it in the DB. So the question is how do we compare then ?
<p>
Bearing in mind the constraints of
</p><ol><li>
Passwords must be sent from the client in PlainText Form so the service can hash it
and compare against the database 
</li><li>
Passwords cannot be sent in Hash Digest form as the service would have NO idea on
how to re-engineer the actual password from the Hash Digest</li></ol><p>
I suggest a couple of alternatives to solve this problem....Most of what you choose
will depend on very much how much control you have over the client<br /></p><ol><li>
SSL it [The ugliest, expensive and least scalable way...but requires the least coding
work] 
</li><li>
Send the username, password in ClearText Via the usernameToken. However, encrypt this
entire usernameToken before sending it over. The pipelines of WSE will handle the
decryption for you. Once it reaches your service application, you will know what the
ClearText password is. Hash it and then do a straight comparison of the Hash Digest
against the one returned from the Database. This method assumes that the server has
the Private Key portion of an asymmetric token such as a X509 Digital Certificate
or even the service has a X509 Digital Certificate to begin with and it also assumes
the knowledge of the Hash Algorithm method employed by the user DB.</li></ol><p>
While the documentation may be poor, the extensibility of the UsernameTokenManager
is great ! I will reproduce snippets of option [2] for your benefit
</p><p>
[Calling Client]
</p><font color="#000080"><em><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><font face="Verdana"><font size="2"><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> a <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> localhost.IndexWse <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> localhost.IndexWse<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Send
PlainText Password across so that the Service can hash Digest</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'this
value for comparison later</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> ut <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> UsernameToken <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> UsernameToken
_<br />
(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"TestAccount"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"TestPassword"</span>,
PasswordOption.SendPlainText) 
<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Include
the usernameToken in the message so the Server can verify that</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'this
usernameToken actually came from you</span><br />
a.RequestSoapContext.Security.Tokens.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(ut)<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Blah
- Find the Service Public Key of its X509 Cert so only the Service</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'can
decrypt and read this Token</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> store <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> X509CertificateStore <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> _<br />
X509CertificateStore.CurrentUserStore(X509CertificateStore.OtherPeople)<br />
store.OpenRead()<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> cert <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> X509Certificate <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> store.FindCertificateByKeyIdentifier
_<br />
(Convert.FromBase64String(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"bBwPfItvKp3b6TNDq+14qs58VJQ="</span>))(0)<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> tok <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> X509SecurityToken <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> X509SecurityToken(cert)<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Sign
and Encrypt everything in the message. Beware of the Payload !</span><br />
a.RequestSoapContext.Security.Elements.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> MessageSignature(ut))<br />
a.RequestSoapContext.Security.Elements.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> EncryptedData(tok, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"#"</span> &amp;
ut.Id))<br />
a.RequestSoapContext.Security.Elements.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> EncryptedData(tok))<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'VOILA</span><br />
MessageBox.Show(a.HelloWorld)</font></font></span></p></em></font><p>
[Service Side]
</p><font color="#000080"><em><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><font face="Verdana"><font size="2"><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> CustomUsernameTokenManager<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Inherits</span> UsernameTokenManager<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Protected</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Overrides</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span> AuthenticateToken(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> token <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> UsernameToken) <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 /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> pw <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><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> token.Password<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Employ
the same Hash function on the password that you deployed saving the passwords</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'into
the User DB</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> hpw <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><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> userDBHash(pw)<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Compare
the hpw result with the one returned from the oledbReader from the Database</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'with
the username as the Reference</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'If
it matches, return the same password from the Token</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Return</span> token.Password<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'Else</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Return</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"A
Password that is impossible to GUESS"</span><br /><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><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'AuthenticateToken</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 style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'CustomUsernameTokenManager</span></font></font></span></p><p></p></em></font>If you check your diagnostics and the SOAP Message Tracing Files,
you will notice that the entire usernameToken is encrypted and nothing is sent over
in ClearText even tho the passwordOption is set to SendPlainText.
<p></p><img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=43d85031-3e0b-48a7-bdd7-1f49932db40a" /><br /><hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Real World UsernameToken Authentication Scenarios with WSE2.0</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,43d85031-3e0b-48a7-bdd7-1f49932db40a.aspx</guid>
      <link>http://www.softwaremaker.net/blog/RealWorldUsernameTokenAuthenticationScenariosWithWSE20.aspx</link>
      <pubDate>Thu, 04 Nov 2004 05:46:54 GMT</pubDate>
      <description>&lt;p&gt;
It sure is great to see many people beginning to experiment and use &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. Many people I speak to and come across today
are still trying to grasp the security features of WSE.
&lt;/p&gt;
&lt;p&gt;
I had blogged about this earlier in my old weblog host&amp;nbsp;&lt;a href="http://dotnetjunkies.com/WebLog/softwaremaker/archive/2004/06/10/16012.aspx" target=_blank&gt;here&lt;/a&gt;.
However, I will just summed it up for interested parties in this post.
&lt;/p&gt;
&lt;p&gt;
...While the Documentation of WSE 2.0 teaches on how to authenticate a usernameToken
from a client request against a database query [I print it here for your benefit]:
&lt;/p&gt;
&lt;font color=#000080&gt;&lt;em&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font face=Verdana&gt;&lt;font size=3&gt;&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font face=Verdana&gt;&lt;font size=2&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Protected&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Overrides&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt; AuthenticateToken(userName &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; UsernameToken) &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;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'BLAH
BLAH BLAH&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'You
are supposed to be reading from a returned Database query based on the UsernameToken.userName
property.&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Then
you are supposed to return the Password that is returned from the DB Query here&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;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;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/em&gt;&lt;/font&gt;However, it doesnt touch on one of the best
practices of Security of storing passwords into a database which is to hash userpasswords
and then store it in the DB. So the question is how do we compare then ?&gt;
&lt;p&gt;
Bearing in mind the constraints of
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Passwords must be sent from the client in PlainText Form so the service can hash it
and compare against the database 
&lt;li&gt;
Passwords cannot be sent in Hash Digest form as the service would have NO idea on
how to re-engineer the actual password from the Hash Digest&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
I suggest a couple of alternatives to solve this problem....Most of what you choose
will depend on very much how much control you have over the client&lt;br&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
SSL it [The ugliest, expensive and least scalable way...but requires the least coding
work] 
&lt;li&gt;
Send the username, password in ClearText Via the usernameToken. However, encrypt this
entire usernameToken before sending it over. The pipelines of WSE will handle the
decryption for you. Once it reaches your service application, you will know what the
ClearText password is. Hash it and then do a straight comparison of the Hash Digest
against the one returned from the Database. This method assumes that the server has
the Private Key portion of an asymmetric token such as a X509 Digital Certificate
or even the service has a X509 Digital Certificate to begin with and it also assumes
the knowledge of the Hash Algorithm method employed by the user DB.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
While the documentation may be poor, the extensibility of the UsernameTokenManager
is great ! I will reproduce snippets of option [2] for your benefit
&lt;/p&gt;
&lt;p&gt;
[Calling Client]
&lt;/p&gt;
&lt;font color=#000080&gt;&lt;em&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font face=Verdana&gt;&lt;font size=2&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; a &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; localhost.IndexWse &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; localhost.IndexWse&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Send
PlainText Password across so that the Service can hash Digest&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'this
value for comparison later&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; ut &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; UsernameToken &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; UsernameToken
_&lt;br&gt;
(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"TestAccount"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"TestPassword"&lt;/span&gt;,
PasswordOption.SendPlainText) 
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Include
the usernameToken in the message so the Server can verify that&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'this
usernameToken actually came from you&lt;/span&gt;
&lt;br&gt;
a.RequestSoapContext.Security.Tokens.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(ut)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Blah
- Find the Service Public Key of its X509 Cert so only the Service&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'can
decrypt and read this Token&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; store &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; X509CertificateStore &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; _&lt;br&gt;
X509CertificateStore.CurrentUserStore(X509CertificateStore.OtherPeople)&lt;br&gt;
store.OpenRead()&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; cert &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; X509Certificate &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; store.FindCertificateByKeyIdentifier
_&lt;br&gt;
(Convert.FromBase64String(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"bBwPfItvKp3b6TNDq+14qs58VJQ="&lt;/span&gt;))(0)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; tok &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; X509SecurityToken &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; X509SecurityToken(cert)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Sign
and Encrypt everything in the message. Beware of the Payload !&lt;/span&gt;
&lt;br&gt;
a.RequestSoapContext.Security.Elements.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; MessageSignature(ut))&lt;br&gt;
a.RequestSoapContext.Security.Elements.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; EncryptedData(tok, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"#"&lt;/span&gt; &amp;amp;
ut.Id))&lt;br&gt;
a.RequestSoapContext.Security.Elements.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; EncryptedData(tok))&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'VOILA&lt;/span&gt;
&lt;br&gt;
MessageBox.Show(a.HelloWorld)&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/em&gt;&lt;/font&gt; 
&lt;p&gt;
[Service Side]
&lt;/p&gt;
&lt;font color=#000080&gt;&lt;em&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font face=Verdana&gt;&lt;font size=2&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; CustomUsernameTokenManager&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Inherits&lt;/span&gt; UsernameTokenManager&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Protected&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Overrides&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt; AuthenticateToken(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; token &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; UsernameToken) &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;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; pw &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;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; token.Password&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Employ
the same Hash function on the password that you deployed saving the passwords&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'into
the User DB&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; hpw &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;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; userDBHash(pw)&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Compare
the hpw result with the one returned from the oledbReader from the Database&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'with
the username as the Reference&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'If
it matches, return the same password from the Token&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Return&lt;/span&gt; token.Password&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'Else&lt;/span&gt;
&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: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"A
Password that is impossible to GUESS"&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;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;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'AuthenticateToken&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 style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'CustomUsernameTokenManager&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/em&gt;&lt;/font&gt;If you check your diagnostics and the SOAP Message Tracing Files, you
will notice that the entire usernameToken is encrypted and nothing is sent over in
ClearText even tho the passwordOption is set to SendPlainText.&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=43d85031-3e0b-48a7-bdd7-1f49932db40a" /&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;Web Services Enhancements (WSE);XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=3f6836c1-d2b8-4da9-be7d-fee9bef24a10</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,3f6836c1-d2b8-4da9-be7d-fee9bef24a10.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/1371.aspx" target="_blank">My
previous blogs on .NET</a>
        </p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3f6836c1-d2b8-4da9-be7d-fee9bef24a10" />
        <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 - .NET</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,3f6836c1-d2b8-4da9-be7d-fee9bef24a10.aspx</guid>
      <link>http://www.softwaremaker.net/blog/PreviouslyOnSoftwaremakerNET.aspx</link>
      <pubDate>Fri, 29 Oct 2004 15:39:57 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://dotnetjunkies.com/WebLog/softwaremaker/category/1371.aspx" target=_blank&gt;My
previous blogs on .NET&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3f6836c1-d2b8-4da9-be7d-fee9bef24a10" /&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</category>
    </item>
  </channel>
</rss>