<?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 - XML Services</title>
    <link>http://www.softwaremaker.net/blog/</link>
    <description>&lt;Challenging Conventions /&gt;</description>
    <language>en-us</language>
    <copyright>William T</copyright>
    <lastBuildDate>Fri, 24 Oct 2008 00:58:46 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=ed446f21-e2ca-46a7-8dad-5ab67a0fdf85</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,ed446f21-e2ca-46a7-8dad-5ab67a0fdf85.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ahhh ... it has been a while, hasnt it ?
</p>
        <p>
My life is just torn between working with bits of 2, beats of 4 and nucleotides of
4. But while challenging, it has been really <a href="http://sg.vr-zone.com/articles/acryan-playon-hdmi-network-digital-video-recorder-review-updated-13-oct-/6084.html" target="_blank">fun</a>.
As spoken to a friend today, my passions in life seeks out to expand the comfort boundaries
of gray matter, which we called the mind and to constantly challenge and stimulate
the brain to learn and absorb new things that one would never think of learning if
one boxed themself in a virtual space, which techies like me would call "typecast".
</p>
        <p>
One example that I highlighted to my friend today, which I respectfully pointed out
to them that he falls under, is when he said: "<em>But we tech people are not good
at talking to people and engaging them in meaningful conversations ...</em>"
</p>
        <p>
Typecast alert !
</p>
        <p>
I ended up talking with him (not to him) for a good 20 minutes and told him we just
had a meaningful conversation and that he could hold one really well. I told him that
he himself set up this virtual boundary to box himself in. No one did and that he
could easily remove this barrier and elevate himself to do and more importantly, to
learn new things and behaviors. Instead of having new curiousities about old things,
have new questions, passions and interests towards <em><strong>new</strong></em> things.
</p>
        <p>
Anyways, I wont be talking about my new-found passions here but I will be briefly
touching on a topic that many people knew I have passions for (and I still do) - and
that is the innards and the plumbings of software technologies.
</p>
        <p>
I came across types of this type of questions a lot in emails, forum questions and
usergroup events:
</p>
        <p>
          <img height="34" alt="openquotes.png" src="http://www.softwaremaker.net/blog/content/binary/openquotes.png" width="44" border="0" /> I
have this WSDL file that looks something like this:
</p>
        <p>
&lt;?xml version='1.0' encoding='UTF-8'?&gt;
</p>
        <p>
&lt;definitions name="someCustomer" targetNamespace="urn:someCustomer" xmlns:typens="urn:someCustomer"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/"&gt;<br />
      &lt;message name="add_someCustomer"&gt;<br />
            &lt;part name="resId"
type="xsd:string"/&gt;<br />
            &lt;part name="cPortable"
type="xsd:string"/&gt;<br />
      &lt;/message&gt;<br />
      &lt;message name="add_someCustomerResponse"&gt;<br />
            &lt;part name="add_someCustomerReturn"
type="xsd:string"/&gt;<br />
      &lt;/message&gt;<br />
      &lt;portType name="someCustomerPortType"&gt;<br />
            &lt;operation name="add_someCustomer"&gt;<br />
                 
&lt;input message="typens:add_someCustomer"/&gt;<br />
                 
&lt;output message="typens:add_someCustomerResponse"/&gt;<br />
            &lt;/operation&gt;<br />
      &lt;/portType&gt;<br />
      &lt;binding name="someCustomerBinding" type="typens:someCustomerPortType"&gt;<br />
            &lt;soap:binding
style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/&gt;<br />
            &lt;operation name="add_someCustomer"&gt;<br />
                 
&lt;soap:operation soapAction="urn:someCustomerAction"/&gt;<br />
                 
&lt;input&gt;<br />
                       
&lt;soap:body namespace="urn:someCustomer" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/&gt;<br />
                 
&lt;/input&gt;<br />
                 
&lt;output&gt;<br />
                       
&lt;soap:body namespace="urn:someCustomer" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/&gt;<br />
                 
&lt;/output&gt;<br />
            &lt;/operation&gt;<br />
      &lt;/binding&gt;<br />
      &lt;service name="someCustomerService"&gt;<br />
            &lt;port name="someCustomerPort"
binding="typens:someCustomerBinding"&gt;<br />
                 
&lt;soap:address location="http://foo/bar/someCustomer.php"/&gt;<br />
            &lt;/port&gt;<br />
      &lt;/service&gt;<br />
&lt;/definitions&gt;<br /></p>
        <p>
However, I need to change the add_someCustomerReturn  type from xsd:string to
a complex type.
</p>
        <p>
I’ve made several tests variants around trying to add a complex type, like the following:
</p>
        <p>
      &lt;message name="add_someCustomerResponse"&gt;<br />
            &lt;xsd:complexType
name="respType" &gt;<br />
                 
&lt;xsd:sequence&gt;<br />
                       
&lt;xsd:element name="someStatus" type="xsd:boolean" /&gt;<br />
                       
&lt;xsd:element name="someResult" type="xsd:boolean" /&gt;<br />
                 
&lt;/xsd:sequence&gt;<br />
            &lt;/xsd:complexType&gt;<br />
            &lt;part name="add_someCustomerReturn"
type="typens:respType"/&gt;<br />
      &lt;/message&gt;
</p>
        <p>
However I always end up having an error like:
</p>
        <p>
Custom tool error: Unable to import WebService/Schema. Unable to import binding 'customerBinding'
from namespace 'urn:customer'. Unable to import operation 'add_customer'. The datatype
'urn:customer:respType' is missing. <img height="34" alt="closequotes.png" src="http://www.softwaremaker.net/blog/content/binary/closequotes.png" width="44" border="0" /></p>
        <p>
          <br />
One thing to note is the above "web service" is using: <strong><em><u>soap:binding
style="rpc"</u></em></strong>. While I am not advocating one over another (<strong><em><u>document/literal</u></em></strong>),
I personally think that if you stripped the religious and philisophical debates, one
can certainly build a RPC-style web service using doc/literal encoding.
</p>
        <p>
The above exceptions funs afoul of what many techies called: <a href="http://www.w3.org/TR/wsdl" target="_blank">Section
5 Encoding</a></p>
        <p>
For the above to be resolved, you need to define a complexType reference by wsdl:part
“add_someCustomerReturn” <strong><em>in the schema</em></strong>.<br />
To do this, you MUST define wsdl:types and add the schema to the WSDL that defines
the complex and change the type=”xsd:string” (of the wsdl:part) to the identifying
complexType in the schema (encoded in wsdl:types)<br /></p>
        <p>
While this is an old article written by Tim, the same principles apply. Do check it
out of you need to stimulate your brain: <a href="http://msdn.microsoft.com/en-us/library/ms995710.aspx" target="_blank">The
Argument against SOAP Encoding</a></p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=ed446f21-e2ca-46a7-8dad-5ab67a0fdf85" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>All about WSDL, Types and Section 5 Encoding (again)</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,ed446f21-e2ca-46a7-8dad-5ab67a0fdf85.aspx</guid>
      <link>http://www.softwaremaker.net/blog/AllAboutWSDLTypesAndSection5EncodingAgain.aspx</link>
      <pubDate>Fri, 24 Oct 2008 00:58:46 GMT</pubDate>
      <description>&lt;p&gt;
Ahhh ... it has been a while, hasnt it ?
&lt;/p&gt;
&lt;p&gt;
My life is just torn between working with bits of 2, beats of 4 and nucleotides of
4. But while challenging, it has been really &lt;a href="http://sg.vr-zone.com/articles/acryan-playon-hdmi-network-digital-video-recorder-review-updated-13-oct-/6084.html" target=_blank&gt;fun&lt;/a&gt;.
As spoken to a friend today, my passions in life seeks out to expand the comfort boundaries
of gray matter, which we called the mind and to constantly challenge and stimulate
the brain to learn and absorb new things that one would never think of learning if
one boxed themself in a virtual space, which techies like me&amp;nbsp;would call "typecast".
&lt;/p&gt;
&lt;p&gt;
One example that I highlighted to my friend today, which I respectfully pointed out
to them that he falls under, is when he said: "&lt;em&gt;But we tech people are not good
at talking to people and engaging them in meaningful conversations ...&lt;/em&gt;"
&lt;/p&gt;
&lt;p&gt;
Typecast alert !
&lt;/p&gt;
&lt;p&gt;
I ended up talking with him (not to him) for a good 20 minutes and told him we just
had a meaningful conversation and that he could hold one really well. I told him that
he himself set up this virtual boundary to box himself in. No one did and that he
could easily remove this barrier and elevate himself to do and more importantly, to
learn new things and behaviors. Instead of having new curiousities about old things,
have new questions, passions and interests&amp;nbsp;towards &lt;em&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/em&gt; things.
&lt;/p&gt;
&lt;p&gt;
Anyways, I wont be talking about my new-found passions here but I will be briefly
touching on a topic that many people knew I have passions for (and I still do) - and
that is the innards and the plumbings of software technologies.
&lt;/p&gt;
&lt;p&gt;
I came across types of this type of questions a lot in emails, forum questions and
usergroup events:
&lt;/p&gt;
&lt;p&gt;
&lt;img height=34 alt=openquotes.png src="http://www.softwaremaker.net/blog/content/binary/openquotes.png" width=44 border=0&gt;&amp;nbsp;I
have this WSDL file that looks something like this:
&lt;/p&gt;
&lt;p&gt;
&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;
&lt;/p&gt;
&lt;p&gt;
&amp;lt;definitions name="someCustomer" targetNamespace="urn:someCustomer" xmlns:typens="urn:someCustomer"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;message name="add_someCustomer"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;part name="resId"
type="xsd:string"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;part name="cPortable"
type="xsd:string"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/message&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;message name="add_someCustomerResponse"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;part name="add_someCustomerReturn"
type="xsd:string"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/message&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;portType name="someCustomerPortType"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;operation name="add_someCustomer"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;input message="typens:add_someCustomer"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;output message="typens:add_someCustomerResponse"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/operation&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/portType&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binding name="someCustomerBinding" type="typens:someCustomerPortType"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:binding
style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;operation name="add_someCustomer"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;soap:operation soapAction="urn:someCustomerAction"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;input&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;soap:body namespace="urn:someCustomer" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/input&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;output&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;soap:body namespace="urn:someCustomer" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/output&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/operation&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service name="someCustomerService"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;port name="someCustomerPort"
binding="typens:someCustomerBinding"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;soap:address location="http://foo/bar/someCustomer.php"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/port&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;br&gt;
&amp;lt;/definitions&amp;gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
However, I need to change the add_someCustomerReturn&amp;nbsp; type from xsd:string to
a complex type.
&lt;/p&gt;
&lt;p&gt;
I’ve made several tests variants around trying to add a complex type, like the following:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;message name="add_someCustomerResponse"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:complexType
name="respType" &amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsd:sequence&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsd:element name="someStatus" type="xsd:boolean" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsd:element name="someResult" type="xsd:boolean" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsd:sequence&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:complexType&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;part name="add_someCustomerReturn"
type="typens:respType"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/message&amp;gt;
&lt;/p&gt;
&lt;p&gt;
However I always end up having an error like:
&lt;/p&gt;
&lt;p&gt;
Custom tool error: Unable to import WebService/Schema. Unable to import binding 'customerBinding'
from namespace 'urn:customer'. Unable to import operation 'add_customer'. The datatype
'urn:customer:respType' is missing. &lt;img height=34 alt=closequotes.png src="http://www.softwaremaker.net/blog/content/binary/closequotes.png" width=44 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
One thing to note is the above "web service" is using: &lt;strong&gt;&lt;em&gt;&lt;u&gt;soap:binding
style="rpc"&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;. While I am not advocating one over another (&lt;strong&gt;&lt;em&gt;&lt;u&gt;document/literal&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;),
I personally think that if you stripped the religious and&amp;nbsp;philisophical debates,&amp;nbsp;one
can certainly build a RPC-style web service using doc/literal encoding.
&lt;/p&gt;
&lt;p&gt;
The above exceptions funs afoul of what many techies called: &lt;a href="http://www.w3.org/TR/wsdl" target=_blank&gt;Section
5 Encoding&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
For the above to be resolved, you need to define a complexType reference by wsdl:part
“add_someCustomerReturn” &lt;strong&gt;&lt;em&gt;in the schema&lt;/em&gt;&lt;/strong&gt;.&lt;br&gt;
To do this, you MUST define wsdl:types and add the schema to the WSDL that defines
the complex and change the type=”xsd:string” (of the wsdl:part) to the identifying
complexType in the schema (encoded in wsdl:types)&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
While this is an old article written by Tim, the same principles apply. Do check it
out of you need to stimulate your brain: &lt;a href="http://msdn.microsoft.com/en-us/library/ms995710.aspx" target=_blank&gt;The
Argument against SOAP Encoding&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=ed446f21-e2ca-46a7-8dad-5ab67a0fdf85" /&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>Interoperability;Software Development;Useful Tips;WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=ffb0444f-6f6f-4840-9082-9f3bf0e2a4c6</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,ffb0444f-6f6f-4840-9082-9f3bf0e2a4c6.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Finally, <a href="http://www.oasis-open.org" target="_blank">OASIS</a> announced last
week that it is <a href="http://www.oasis-open.org/archives/members/200704/msg00023.html" target="_blank">calling
for participation for Web Services Federation</a>. The formation of the WS-Federation
Technical Committee is announced <a href="http://www.oasis-open.org/news/oasis-news-2007-05-02.php" target="_blank">here</a>.
</p>
        <p>
WS-Fed is an important addition to the WS-* protocol suite that enables users to sign-in
seamlessly to systems outside of their own organization without requiring (more) new
usernames and passwords using Single-Sign-On (SSO) between separate organizations
with an established trust relationship.
</p>
        <p>
          <em>
            <strong>WS-Fed builds upon and composes with other WS-* protocols:</strong>
          </em>
        </p>
        <ul>
          <li>
WS-Fed extends WS-Trust 
</li>
          <li>
WS-Fed composes with WS-Security and WS-SecureConversation to ensure data integrity
and privacy 
</li>
          <li>
WS-Fed composes with WS-MetadataExchange and WS-Policy to enable simple provisioning
and trust relationship configuration</li>
        </ul>
        <p>
          <strong>
            <em>Does WS-Fed compete with Liberty SAML?<br /></em>
          </strong>
        </p>
        <ul>
          <li>
Both SAML and WS-Fed enable browser-based identity federation (<em>Passive-Mode</em>) 
</li>
          <li>
However, WS-Fed enables a superset of scenarios, including: 
<ul><li>
Seamless federation with Web Services and/or Rick-Client applications 
</li><li>
Separation of identities, token types, protocols and encodings 
</li><li>
Multi-purpose Security Token Service (STS) that can return tokens stating different
assertions based upon the scenario<br /></li></ul></li>
        </ul>
        <p>
          <strong>
            <em>WS-Fed adds identity federation capabilities to the existing WS-* suite
of protocols resulting in:</em>
          </strong>
          <br />
        </p>
        <ul>
          <li>
A single protocol stack that supports the majority of your needs and scenarios 
</li>
          <li>
Simplified development, deployment, management and control</li>
        </ul>
        <p>
The formation of the Technical Committee to drive the standardization of the WS-Fed
is an important step in evolution of the industry-wide effort to create a single,
comprehensive communication protocol suite that enables many current and new scenarios
most effectively.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=ffb0444f-6f6f-4840-9082-9f3bf0e2a4c6" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>OASIS and the WS-Federation Specifications</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,ffb0444f-6f6f-4840-9082-9f3bf0e2a4c6.aspx</guid>
      <link>http://www.softwaremaker.net/blog/OASISAndTheWSFederationSpecifications.aspx</link>
      <pubDate>Wed, 02 May 2007 03:39:08 GMT</pubDate>
      <description>&lt;p&gt;
Finally, &lt;a href="http://www.oasis-open.org" target="_blank"&gt;OASIS&lt;/a&gt; announced last
week that it is &lt;a href="http://www.oasis-open.org/archives/members/200704/msg00023.html" target=_blank&gt;calling
for participation for Web Services Federation&lt;/a&gt;. The formation of the WS-Federation
Technical Committee is announced &lt;a href="http://www.oasis-open.org/news/oasis-news-2007-05-02.php" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
WS-Fed is an important addition to the WS-* protocol suite that enables users to sign-in
seamlessly to systems outside of their own organization without requiring (more) new
usernames and passwords using Single-Sign-On (SSO) between separate organizations
with an established trust relationship.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;WS-Fed builds upon and composes with other WS-* protocols:&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
WS-Fed extends WS-Trust 
&lt;li&gt;
WS-Fed composes with WS-Security and WS-SecureConversation to ensure data integrity
and privacy 
&lt;li&gt;
WS-Fed composes with WS-MetadataExchange and WS-Policy to enable simple provisioning
and trust relationship configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Does WS-Fed compete with Liberty SAML?&lt;br&gt;
&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Both SAML and WS-Fed enable browser-based identity federation (&lt;em&gt;Passive-Mode&lt;/em&gt;) 
&lt;li&gt;
However, WS-Fed enables a superset of scenarios, including: 
&lt;ul&gt;
&lt;li&gt;
Seamless federation with Web Services and/or Rick-Client applications 
&lt;li&gt;
Separation of identities, token types, protocols and encodings 
&lt;li&gt;
Multi-purpose Security Token Service (STS) that can return tokens stating different
assertions based upon the scenario&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;WS-Fed adds identity federation capabilities to the existing WS-* suite
of protocols resulting in:&lt;/em&gt;&lt;/strong&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
A single protocol stack that supports the majority of your needs and scenarios 
&lt;li&gt;
Simplified development, deployment, management and control&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The formation of the Technical Committee to drive the standardization of the WS-Fed
is an important step in evolution of the industry-wide effort to create a single,
comprehensive communication protocol suite that enables many current and new scenarios
most effectively.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=ffb0444f-6f6f-4840-9082-9f3bf0e2a4c6" /&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>Interoperability;WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=c52b3cdf-7d79-4423-9312-010c54ddcca5</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,c52b3cdf-7d79-4423-9312-010c54ddcca5.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Apache Axis2/C version 0.93 is released. This should please the REST camp and highlights
the momentum of how REST can be implemented in Web Services. If you are in KL next
week, I will be <a href="http://www.softwaremaker.net/blog/ExtraReasonsForGoingToMicrosoftTechEDAsia2006.aspx" target="_blank">briefly
touching base</a> on the <strong><a href="http://en.wikipedia.org/wiki/REST" target="_blank">REST</a>-vs-<a href="http://en.wikipedia.org/wiki/SOAP" target="_blank">SOAP</a></strong> style
of implementing Web Services.
</p>
        <p>
          <u>Key Features</u>
        </p>
        <ol>
          <li>
AXIOM, an XML object model optimized for SOAP 1.1/1.2 Messages. 
<br />
This has complete XML infoset support. 
</li>
          <li>
Support for one-way messaging (In-Only) and request response 
<br />
messaging (In-Out) 
</li>
          <li>
Description hierarchy (configuration, service groups, services, 
<br />
operations and messages) 
</li>
          <li>
Directory based deployment model 
</li>
          <li>
Archive based deployment model 
</li>
          <li>
Context hierarchy (corresponding contexts to map to each level of 
<br />
description hierarchy) 
</li>
          <li>
Raw XML message receiver 
</li>
          <li>
Module architecture, mechanism to extend the SOAP processing model 
</li>
          <li>
Module version support 
</li>
          <li>
Transports supports: HTTP\ 
<ol><li>
Both simple axis server and Apache2 httpd module for server side 
</li><li>
Client transport with ability to enable SSL support</li></ol></li>
          <li>
Service client and operation client APIs 
</li>
          <li>
REST support (HTTP POST case) 
</li>
          <li>
WS-Addressing, both the submission (2004/08) and final (2005/08) versions 
</li>
          <li>
MTOM/XOP support 
</li>
          <li>
Code generation tool for stub and skeleton generation for a given 
<br />
WSDL (based on Java tool) 
<ol><li>
Axis Data Binding (ADB) support</li></ol></li>
          <li>
Security module with UsernameToken support 
</li>
          <li>
REST support (HTTP GET case) - <strong><em>New</em></strong></li>
          <li>
Dynamic invocation support (based on XML schema and WSDL 
<br />
implementations) - <strong><em>New</em></strong></li>
        </ol>
        <p>
          <u>Major Changes Since Last Release</u>
        </p>
        <ol>
          <li>
REST support for HTTP GET case 
</li>
          <li>
XML Schema implementation 
</li>
          <li>
Woden/C implementation that supports both WSDL 1.1 and WSDL 2.0 
</li>
          <li>
Dynamic client invocation (given a WSDL, consume services dynamically) 
</li>
          <li>
Numerous improvements to API and API documentation 
</li>
          <li>
Many bug fixes, especially, many paths of execution previously untouched were tested
along with Sandesha2/C implementation</li>
        </ol>
        <p>
Download the above release <a href="http://ws.apache.org/axis2/c/download.cgi" target="_blank">here</a>.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=c52b3cdf-7d79-4423-9312-010c54ddcca5" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Axis2/C Version 0.93 - REST Support on Http-GET and Http-POST is here</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,c52b3cdf-7d79-4423-9312-010c54ddcca5.aspx</guid>
      <link>http://www.softwaremaker.net/blog/Axis2CVersion093RESTSupportOnHttpGETAndHttpPOSTIsHere.aspx</link>
      <pubDate>Sun, 03 Sep 2006 08:41:45 GMT</pubDate>
      <description>&lt;p&gt;
Apache Axis2/C version 0.93 is released. This should please the REST camp and highlights
the momentum of how REST can be implemented in Web Services. If you are in KL next
week, I will be &lt;a href="http://www.softwaremaker.net/blog/ExtraReasonsForGoingToMicrosoftTechEDAsia2006.aspx" target=_blank&gt;briefly
touching base&lt;/a&gt; on the &lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/REST" target=_blank&gt;REST&lt;/a&gt;-vs-&lt;a href="http://en.wikipedia.org/wiki/SOAP" target=_blank&gt;SOAP&lt;/a&gt;&lt;/strong&gt; style
of implementing Web Services.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Key Features&lt;/u&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
AXIOM, an XML object model optimized for SOAP 1.1/1.2 Messages. 
&lt;br&gt;
This has complete XML infoset support. 
&lt;li&gt;
Support for one-way messaging (In-Only) and request response 
&lt;br&gt;
messaging (In-Out) 
&lt;li&gt;
Description hierarchy (configuration, service groups, services, 
&lt;br&gt;
operations and messages) 
&lt;li&gt;
Directory based deployment model 
&lt;li&gt;
Archive based deployment model 
&lt;li&gt;
Context hierarchy (corresponding contexts to map to each level of 
&lt;br&gt;
description hierarchy) 
&lt;li&gt;
Raw XML message receiver 
&lt;li&gt;
Module architecture, mechanism to extend the SOAP processing model 
&lt;li&gt;
Module version support 
&lt;li&gt;
Transports supports: HTTP\ 
&lt;ol&gt;
&lt;li&gt;
Both simple axis server and Apache2 httpd module for server side 
&lt;li&gt;
Client transport with ability to enable SSL support&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
Service client and operation client APIs 
&lt;li&gt;
REST support (HTTP POST case) 
&lt;li&gt;
WS-Addressing, both the submission (2004/08) and final (2005/08) versions 
&lt;li&gt;
MTOM/XOP support 
&lt;li&gt;
Code generation tool for stub and skeleton generation for a given 
&lt;br&gt;
WSDL (based on Java tool) 
&lt;ol&gt;
&lt;li&gt;
Axis Data Binding (ADB) support&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
Security module with UsernameToken support 
&lt;li&gt;
REST support (HTTP GET case) - &lt;strong&gt;&lt;em&gt;New&lt;/em&gt;&lt;/strong&gt; 
&lt;li&gt;
Dynamic invocation support (based on XML schema and WSDL 
&lt;br&gt;
implementations) - &lt;strong&gt;&lt;em&gt;New&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;u&gt;Major Changes Since Last Release&lt;/u&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
REST support for HTTP GET case 
&lt;li&gt;
XML Schema implementation 
&lt;li&gt;
Woden/C implementation that supports both WSDL 1.1 and WSDL 2.0 
&lt;li&gt;
Dynamic client invocation (given a WSDL, consume services dynamically) 
&lt;li&gt;
Numerous improvements to API and API documentation 
&lt;li&gt;
Many bug fixes, especially, many paths of execution previously untouched were tested
along with Sandesha2/C implementation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Download the above release &lt;a href="http://ws.apache.org/axis2/c/download.cgi" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=c52b3cdf-7d79-4423-9312-010c54ddcca5" /&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>Announcements;Community;Software Development;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=899fe212-5778-451a-b2cc-0b27f39349c2</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,899fe212-5778-451a-b2cc-0b27f39349c2.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <title>Published: WCF Interoperability with WSE 2.0 and the Migration Incentive</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,899fe212-5778-451a-b2cc-0b27f39349c2.aspx</guid>
      <link>http://www.softwaremaker.net/blog/PublishedWCFInteroperabilityWithWSE20AndTheMigrationIncentive.aspx</link>
      <pubDate>Fri, 07 Jul 2006 06:11:57 GMT</pubDate>
      <description>&lt;p&gt;
Blasphemy ...
&lt;/p&gt;
&lt;p&gt;
It is finally &lt;a href="http://wcf.netfx3.com/content/WindowsCommunicationFoundationWCFInteroperabilityandMigrationwithWSE20.aspx" target="_blank"&gt;published&lt;/a&gt;.
After many, many, and I mean, many months of paying the process tax for this piece,
it is finally &lt;a href="http://wcf.netfx3.com/content/WindowsCommunicationFoundationWCFInteroperabilityandMigrationwithWSE20.aspx" target="_blank"&gt;LIVE&lt;/a&gt; !
&lt;/p&gt;
&lt;p&gt;
I started this piece with the first ever March 2005 CTP of &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 I went through so many
port demos and edit document cycles its so unbelievably painful ...
&lt;/p&gt;
&lt;p&gt;
But it is really good to see this in online form and shape.
&lt;/p&gt;
&lt;p&gt;
I started with this idea even though &lt;a href=http://www.microsoft.com target=_blank&gt;MSFT
Corp&lt;/a&gt; has &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/WSS_Appx_InteropCons_WSE30.asp" target="_blank"&gt;explicity
stated that it will not support any form of interoperability&lt;/a&gt; between &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=1ba1f631-c3e7-420a-bc1e-ef18bab66122&amp;amp;displaylang=en" target="_blank"&gt;WSE
2.0&lt;/a&gt; and WCF, even though it is &amp;quot;&lt;em&gt;theoretically possible to develop Web
services using WSE 2.0 in such a way that they can interoperate with WSE 3.0 (and
WCF) by using only a &lt;strong&gt;reduced set of specifications&lt;/strong&gt;&lt;/em&gt;&amp;quot;
&lt;/p&gt;
&lt;p&gt;
More importantly, the main reason for the motivation to write such a piece&amp;nbsp;is
written in the article itself and I quote:
&lt;/p&gt;
&lt;p&gt;
[BEGIN QUOTE] 
&lt;/p&gt;
&lt;hr /&gt;
&lt;em&gt;&lt;font color="#808080"&gt;...WSE 2.0 has seen 3 service pack releases since its official
launch in 2004. It implemented the OASIS Web Services Security 1.0 specification which
was the widely accepted interoperability standard protocols between secured web services
as well as the implementations of WS-Addressing, WS-SecureConversation and WS-Trust.
It was integrated very nicely into Visual Studio 2003. Even BizTalk Server 2004 carries
with it a WSE 2.0 adapter for securing of Web Services. Thus, it would be fair to
assume that there is more than its fair share of implementations in the market today.&lt;/font&gt;&lt;/em&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color="#808080"&gt;Depending on timing, budget, complexity and a whole host
of other requirements, some of these applications will need to be moved and migrated
to WSE3.0 and some to WCF. Aaron Skonnard has provided a great &lt;/font&gt;&lt;/em&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/04/ServiceStation/" target="_blank"&gt;&lt;em&gt;&lt;font color="#808080"&gt;resource&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font color="#808080"&gt; in
his &amp;ldquo;Service Station&amp;rdquo; column on MSDN on a brief overview on the migration
of WSE 2.0 applications to WSE 3.0 ones. However, as stated in his article, there
are some major changes in the programming model and architecture in WSE 3.0 and migrating
them from WSE 2.0 may not be trivial.&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color="#808080"&gt;Another very important factor to take note is while WinFX,
and therefore WCF, is available downstream from Windows Vista to Windows 2003 and
Windows XP. That is as far down as it goes. There still exists a huge installed base
of Windows 2000 Servers out there running on server and data farms and if you need
to implement the advanced Web Services stacks on those servers, WSE is still a very
important strategy you cannot ignore.&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color="#808080"&gt;As noted in the above guidelines, even though Microsoft
will not guarantee interoperability between WSE 2.0 and WCF, the good news is that
there are a few WSE 2.0 common scenarios, which can allow wire-interoperability with
WCF. I will illustrate them in the next section...&lt;/font&gt;&lt;/em&gt; 
&lt;/p&gt;
&lt;hr /&gt;
[END QUOTE] 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
So, &lt;a href="http://wcf.netfx3.com/content/WindowsCommunicationFoundationWCFInteroperabilityandMigrationwithWSE20.aspx" target="_blank"&gt;this
article&lt;/a&gt; will outlined &lt;strong&gt;WHAT&lt;/strong&gt; that reduced set of specifications
are and &lt;strong&gt;HOW&lt;/strong&gt; to go about using them.
&lt;/p&gt;
&lt;p&gt;
Many Special Thanks go to &lt;a href="http://pluralsight.com/blogs/kirillg/" target="_blank"&gt;Kirill&lt;/a&gt;,&amp;nbsp;the
Interop PM on WCF, who&amp;nbsp;gave me&amp;nbsp;a couple of&amp;nbsp;tips to get over the&amp;nbsp;port-over
humps I had thoughout this piece since last year. And of course, I cannot forget &lt;a href="http://friends.newtelligence.net/clemensv/" target="_blank"&gt;Clemens&lt;/a&gt;,
who is the catalyst to making this publication happen when he came onboard.
&lt;/p&gt;
&lt;p&gt;
I hope this helps at least someone out there. Enjoy !
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=899fe212-5778-451a-b2cc-0b27f39349c2" /&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>Articles;Community;Interoperability;Software Development;Web Services Enhancements (WSE);Windows Communication Foundation (WCF) aka Indigo;WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=af9c64c8-73cf-4ba2-a1b1-536a4c871dae</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,af9c64c8-73cf-4ba2-a1b1-536a4c871dae.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
During my <a href="http://www.softwaremaker.net/blog/MSDNRedmondWebcastingFromSingapore.aspx" target="_blank">webcast</a> on
"Why we need Reliablility in SOAP: Web Services", there were a couple of
hiccups which hindered a better listening experience.
</p>
        <ol>
          <li>
I cannot see the animation on the slides I am presenting, even though I am assured
by the producer that the floor is seeing it. Therefore, I am "guessing"
what the audience is actually seeing in my click-animation and gauging my content
from there. It was neither easy nor pleasant. 
</li>
          <li>
There was a disconnect incident in my demos that also marred the listener's experience.
I had to re-login again. Not Good.</li>
        </ol>
        <p>
Isnt it ironic? My network connection showed lack of reliability when I am talking
about Reliability as a topic. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" />. Now
the least I can do is to answer a couple of questions that popped up after the session:
</p>
        <p>
Q: Is RM available for all the bindings in <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a> ? <br />
A: <strong>Yes, it is available for MOST of the standard bindings in WCF. In some
bindings such as the netTcpBinding I showed, it is On-by-Default. In bindings such
as wsDualHttpBinding where you need correlation of different channels and such, it
is Always-On. It doesnt make sense to stick &lt;reliableSession /&gt; in a netMsmqBinding,
for example.</strong></p>
        <p>
Q: Is this the same WS-RM spec that is authored by IBM, Microsoft
and TIBCO ? <br />
A: <strong>Yes. In my slide, I mentioned - I.B.M and <a href="http://www.tibco.com/" target="_blank">TIBCO</a>.
I.B.M is actually the acronym I used for <a href="http://www.ibm.com/" target="_blank">IBM</a>, <a href="http://www.bea.com/" target="_blank">BEA</a> and <a href="http://www.microsoft.com/" target="_blank">Microsoft</a>. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /></strong></p>
        <p>
Q: Can I get the demo you showed? <br />
A: <strong>No, I am sorry. In any case, my demos will not work with the lastest
WinFX B2 bits today. I will need time to port them over. I recommend you go bug <a href="http://blogs.msdn.com/shycohen" target="_blank">Shy</a> when
you see him and ask him for his WS-RM demo which consists of a WPF stack in there
and a "awesomely" cool Rubik's Cube demo and is 100x better than mine.</strong></p>
        <p>
All in all, it is quite a different experience than doing an on-stage presentation,
especially when you spent an hour talking to yourself and you cannot see the audience
faces and cannot manipulate your content and presentation based on their moods.
</p>
        <p>
But then again, no one can see that I am wearing my <a href="http://www.treasurekingdom.com/miva/graphics/00000001/boxerlarge3.jpg" target="_blank">Mickey-Mouse
boxers</a> while I am presenting, so I guess that is a good trade-off.
</p>
        <img src="http://www.softwaremaker.net/blog/cptrk.ashx?id=45671be1-e92e-44f8-9862-f72f472f67ee" alt="" width="0" height="0" />
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=af9c64c8-73cf-4ba2-a1b1-536a4c871dae" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Webcast Experience: WS-ReliableMessaging in WCF</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,af9c64c8-73cf-4ba2-a1b1-536a4c871dae.aspx</guid>
      <link>http://www.softwaremaker.net/blog/WebcastExperienceWSReliableMessagingInWCF.aspx</link>
      <pubDate>Wed, 07 Jun 2006 06:06:48 GMT</pubDate>
      <description>&lt;p&gt;
During my &lt;a href="http://www.softwaremaker.net/blog/MSDNRedmondWebcastingFromSingapore.aspx" target="_blank"&gt;webcast&lt;/a&gt; on
&amp;quot;Why we need Reliablility in SOAP: Web Services&amp;quot;, there were a couple of
hiccups which hindered a better listening experience.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
I cannot see the animation on the slides I am presenting, even though I am assured
by the producer that&amp;nbsp;the floor is seeing it. Therefore, I am &amp;quot;guessing&amp;quot;
what the audience is actually seeing in my click-animation and gauging my content
from there. It was neither easy nor pleasant. 
&lt;/li&gt;
&lt;li&gt;
There was a disconnect incident in my demos that also marred the listener&amp;#39;s experience.
I had to re-login again. Not Good.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Isnt it ironic? My network connection showed&amp;nbsp;lack of reliability when I am talking
about Reliability&amp;nbsp;as a topic. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;.&amp;nbsp;Now
the least I can do is to answer a couple of questions that popped up after the session:
&lt;/p&gt;
&lt;p&gt;
Q: Is RM available for all the bindings in &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx target=_blank&gt;Windows
Communication Foundation (WCF, previously - Indigo)&lt;/a&gt; ?&amp;nbsp;&lt;br /&gt;
A: &lt;strong&gt;Yes, it is available for MOST of the standard bindings in WCF. In some
bindings such as the netTcpBinding I showed, it is On-by-Default. In bindings such
as wsDualHttpBinding where you need correlation of different channels and such, it
is Always-On. It doesnt make sense to stick &amp;lt;reliableSession /&amp;gt; in a netMsmqBinding,
for example.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Q:&amp;nbsp;Is this the same&amp;nbsp;WS-RM spec&amp;nbsp;that is&amp;nbsp;authored by IBM, Microsoft
and TIBCO&amp;nbsp;?&amp;nbsp;&lt;br /&gt;
A: &lt;strong&gt;Yes. In my slide, I mentioned - I.B.M&amp;nbsp;and &lt;a href="http://www.tibco.com/" target="_blank"&gt;TIBCO&lt;/a&gt;.
I.B.M&amp;nbsp;is actually the acronym I&amp;nbsp;used for &lt;a href="http://www.ibm.com/" target="_blank"&gt;IBM&lt;/a&gt;, &lt;a href="http://www.bea.com/" target="_blank"&gt;BEA&lt;/a&gt; and &lt;a href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt;. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Q:&amp;nbsp;Can I get the demo you showed?&amp;nbsp;&lt;br /&gt;
A: &lt;strong&gt;No, I am sorry.&amp;nbsp;In any case, my demos will not work with the lastest
WinFX B2 bits&amp;nbsp;today. I will need time to port them over. I recommend you go bug &lt;a href="http://blogs.msdn.com/shycohen" target="_blank"&gt;Shy&lt;/a&gt; when
you see him and ask him for his WS-RM demo which consists of a WPF stack in there
and a &amp;quot;awesomely&amp;quot; cool Rubik&amp;#39;s Cube demo and is 100x better than mine.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
All in all, it is quite a different experience than doing an on-stage presentation,
especially when you spent an hour talking to yourself and you cannot see the audience
faces and cannot manipulate your content and presentation based on their moods.
&lt;/p&gt;
&lt;p&gt;
But then again, no one can see that I am wearing my &lt;a href="http://www.treasurekingdom.com/miva/graphics/00000001/boxerlarge3.jpg" target="_blank"&gt;Mickey-Mouse
boxers&lt;/a&gt; while I am presenting, so I guess that is a good trade-off.
&lt;/p&gt;
&lt;img src="http://www.softwaremaker.net/blog/cptrk.ashx?id=45671be1-e92e-44f8-9862-f72f472f67ee" alt="" width="0" height="0" /&gt;&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=af9c64c8-73cf-4ba2-a1b1-536a4c871dae" /&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>Windows Communication Foundation (WCF) aka Indigo;WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=83fc4d6e-6612-46a0-9111-113e759ffc83</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,83fc4d6e-6612-46a0-9111-113e759ffc83.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here I am - proud to announce that I will be doing a <a href="http://msdn.microsoft.com/" target="_blank">MSDN</a> Redmond-hosted <a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032299329%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e" target="_blank">Webcast</a> right
from the other side of the hemisphere in Singapore.
</p>
        <p>
I will be speaking on concepts of Reliability in Soap:Web Services, why its needed, as
well as the context of it in <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a>.
</p>
        <p>
More importantly, a 40GB <a href="http://www.creative.com/" target="_blank">Creative</a> (another
homegrown Singapor<em>ean</em> product) ZEN MP3 player is at stake here waiting to
be won. So, do sign up quickly for a chance to win this. Rules <a href="http://www.microsoft.com/events/officialrules_mp3.mspx" target="_blank">here</a>.
</p>
        <p>
If you are one of those <a href="http://en.wikipedia.org/wiki/Insomniac_(health)" target="_blank">insomniacs</a> in
Asia-Pacific, do try to tune-in. I hope this blazes a trail for the other community
leaders in Asia-Pacific to follow suit and show that we are right on par there with
the best in technology. <img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif" /></p>
        <p>
Click <a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032299329&amp;Culture=en-US" target="_blank">here</a> for
more details on this webcast.
</p>
        <img src="http://www.softwaremaker.net/blog/cptrk.ashx?id=85f01ab2-ee37-48c8-bd25-8f1d68347c29" alt="" width="0" height="0" />
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=83fc4d6e-6612-46a0-9111-113e759ffc83" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>MSDN Redmond Webcasting from Singapore</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,83fc4d6e-6612-46a0-9111-113e759ffc83.aspx</guid>
      <link>http://www.softwaremaker.net/blog/MSDNRedmondWebcastingFromSingapore.aspx</link>
      <pubDate>Sat, 27 May 2006 06:03:37 GMT</pubDate>
      <description>&lt;p&gt;
Here I am - proud to announce that I will be doing a &lt;a href="http://msdn.microsoft.com/" target="_blank"&gt;MSDN&lt;/a&gt; Redmond-hosted &lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032299329%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e" target="_blank"&gt;Webcast&lt;/a&gt; right
from the other side of the hemisphere&amp;nbsp;in Singapore.
&lt;/p&gt;
&lt;p&gt;
I will be speaking on concepts of Reliability in Soap:Web Services, why&amp;nbsp;its needed,&amp;nbsp;as
well as the context of it in &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx target=_blank&gt;Windows
Communication Foundation (WCF, previously - Indigo)&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
More importantly, a 40GB &lt;a href="http://www.creative.com/" target="_blank"&gt;Creative&lt;/a&gt; (another
homegrown Singapor&lt;em&gt;ean&lt;/em&gt; product) ZEN MP3 player is at stake here waiting to
be won. So, do sign up quickly for a chance to win this. Rules &lt;a href="http://www.microsoft.com/events/officialrules_mp3.mspx" target="_blank"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
If you are one of those &lt;a href="http://en.wikipedia.org/wiki/Insomniac_(health)" target="_blank"&gt;insomniacs&lt;/a&gt; in
Asia-Pacific, do try to tune-in. I hope this blazes a trail for the other community
leaders in Asia-Pacific to follow suit and show that we are right on par there with
the best in technology. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
Click &lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032299329&amp;amp;Culture=en-US" target="_blank"&gt;here&lt;/a&gt; for
more details on this webcast.
&lt;/p&gt;
&lt;img src="http://www.softwaremaker.net/blog/cptrk.ashx?id=85f01ab2-ee37-48c8-bd25-8f1d68347c29" alt="" width="0" height="0" /&gt;&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=83fc4d6e-6612-46a0-9111-113e759ffc83" /&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>Community;Presentations;Software Development;Windows Communication Foundation (WCF) aka Indigo;WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=e9191220-ebe7-4f78-b771-711b4a261da2</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,e9191220-ebe7-4f78-b771-711b4a261da2.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Apache Axis2/C version 0.91 has been released via here:<br /><a href="http://ws.apache.org/axis2/c/download.cgi" target="_blank">http://ws.apache.org/axis2/c/download.cgi</a></p>
        <p>
Key Features
</p>
        <ol>
          <li>
AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages with complete XML Infoset
support 
</li>
          <li>
Support for One-Way Messaging (In-Only) and Request Response Messaging (In-Out) 
</li>
          <li>
Module architecture, mechanism to extend the SOAP processing model 
</li>
          <li>
Context hierarchy 
</li>
          <li>
Directory based deployment model 
</li>
          <li>
Raw XML providers 
</li>
          <li>
WS-Addressing, both the submission (2004/08) and final (2005/08) versions 
</li>
          <li>
Transports: HTTP * Both simple axis server and Apache2 httpd module and * SSL client
transport - New 
</li>
          <li>
Service Groups - New 
</li>
          <li>
Service client and operation client APIs - New 
</li>
          <li>
REST support (POST case) - New 
</li>
          <li>
Module version support - New 
</li>
          <li>
MTOM support - New</li>
        </ol>
        <p>
Other notes
</p>
        <ol>
          <li>
Interoperability tested with Axis2/Java for XML in/out client and services 
</li>
          <li>
Addressing 1.0 interoperability</li>
        </ol>
        <p>
Major changes since last release
</p>
        <ol>
          <li>
Full Addressing 1.0 support 
</li>
          <li>
Improved fault handling model 
</li>
          <li>
SSL client transport 
</li>
          <li>
MTOM implementation 
</li>
          <li>
Implementation of easy to use service client and operation client APIs for client
side programming 
</li>
          <li>
REST support (POST case) 
</li>
          <li>
Module version support 
</li>
          <li>
Service groups 
</li>
          <li>
Numerous bug fixes since last release</li>
        </ol>
        <p>
Un-Implemented Architecture Features (TBD in 1.0)
</p>
        <ol>
          <li>
Sessions scoping for application, SOAP, transport and request levels 
</li>
          <li>
Different character encoding support 
</li>
          <li>
Dynamic invocation 
</li>
          <li>
Archive based deployment Model</li>
        </ol>
        <p>
Un-Implemented Architecture Features (TBD post 1.0)
</p>
        <ol>
          <li>
WSDL code generation tool for stub and skeletons (based on Java tool) 
</li>
          <li>
Security module 
</li>
          <li>
REST (REpresentational State Transfer) support (GET case) 
</li>
          <li>
Web Services policy support 
</li>
          <li>
Axis2 Web application (Web App)</li>
        </ol>
        <img src="http://www.softwaremaker.net/blog/cptrk.ashx?id=43c3ff61-2a3f-449f-8e27-9cff541a6e2c" alt="" width="0" height="0" />
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e9191220-ebe7-4f78-b771-711b4a261da2" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Thumbs up for the Apache Axis2 team</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,e9191220-ebe7-4f78-b771-711b4a261da2.aspx</guid>
      <link>http://www.softwaremaker.net/blog/ThumbsUpForTheApacheAxis2Team.aspx</link>
      <pubDate>Tue, 16 May 2006 05:59:18 GMT</pubDate>
      <description>&lt;p&gt;
Apache Axis2/C version 0.91 has been released via here:&lt;br /&gt;
&lt;a href="http://ws.apache.org/axis2/c/download.cgi" target="_blank"&gt;http://ws.apache.org/axis2/c/download.cgi&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Key Features
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages with complete XML Infoset
support 
&lt;/li&gt;
&lt;li&gt;
Support for One-Way Messaging (In-Only) and Request Response Messaging (In-Out) 
&lt;/li&gt;
&lt;li&gt;
Module architecture, mechanism to extend the SOAP processing model 
&lt;/li&gt;
&lt;li&gt;
Context hierarchy 
&lt;/li&gt;
&lt;li&gt;
Directory based deployment model 
&lt;/li&gt;
&lt;li&gt;
Raw XML providers 
&lt;/li&gt;
&lt;li&gt;
WS-Addressing, both the submission (2004/08) and final (2005/08) versions 
&lt;/li&gt;
&lt;li&gt;
Transports: HTTP * Both simple axis server and Apache2 httpd module and * SSL client
transport - New 
&lt;/li&gt;
&lt;li&gt;
Service Groups - New 
&lt;/li&gt;
&lt;li&gt;
Service client and operation client APIs - New 
&lt;/li&gt;
&lt;li&gt;
REST support (POST case) - New 
&lt;/li&gt;
&lt;li&gt;
Module version support - New 
&lt;/li&gt;
&lt;li&gt;
MTOM support - New&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Other notes
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Interoperability tested with Axis2/Java for XML in/out client and services 
&lt;/li&gt;
&lt;li&gt;
Addressing 1.0 interoperability&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Major changes since last release
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Full Addressing 1.0 support 
&lt;/li&gt;
&lt;li&gt;
Improved fault handling model 
&lt;/li&gt;
&lt;li&gt;
SSL client transport 
&lt;/li&gt;
&lt;li&gt;
MTOM implementation 
&lt;/li&gt;
&lt;li&gt;
Implementation of easy to use service client and operation client APIs for client
side programming 
&lt;/li&gt;
&lt;li&gt;
REST support (POST case) 
&lt;/li&gt;
&lt;li&gt;
Module version support 
&lt;/li&gt;
&lt;li&gt;
Service groups 
&lt;/li&gt;
&lt;li&gt;
Numerous bug fixes since last release&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Un-Implemented Architecture Features (TBD in 1.0)
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Sessions scoping for application, SOAP, transport and request levels 
&lt;/li&gt;
&lt;li&gt;
Different character encoding support 
&lt;/li&gt;
&lt;li&gt;
Dynamic invocation 
&lt;/li&gt;
&lt;li&gt;
Archive based deployment Model&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Un-Implemented Architecture Features (TBD post 1.0)
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
WSDL code generation tool for stub and skeletons (based on Java tool) 
&lt;/li&gt;
&lt;li&gt;
Security module 
&lt;/li&gt;
&lt;li&gt;
REST (REpresentational State Transfer) support (GET case) 
&lt;/li&gt;
&lt;li&gt;
Web Services policy support 
&lt;/li&gt;
&lt;li&gt;
Axis2 Web application (Web App)&lt;/li&gt;
&lt;/ol&gt;
&lt;img src="http://www.softwaremaker.net/blog/cptrk.ashx?id=43c3ff61-2a3f-449f-8e27-9cff541a6e2c" alt="" width="0" height="0" /&gt;&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e9191220-ebe7-4f78-b771-711b4a261da2" /&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>Software Development;WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=090d9f24-6788-49e4-ba2b-1a775a2033b6</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,090d9f24-6788-49e4-ba2b-1a775a2033b6.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Fellow <a href="http://msdn.microsoft.com/isv/rd/default.aspx" target="_blank" title="Microsoft Regional Director">Microsoft
Regional Director</a> and well-known distributed systems expert <a href="http://www.request-response.com/blog" target="_blank">Matevz
Gacnik</a> has a great blog to add on top of mine called: <a href="http://www.request-response.com/blog/PermaLink,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx" target="_blank">Windows
Workflow Foundation: Exposing Workflows as Services</a>. Trust me, Matevz is a lot
more than Request-Response or what his blog suggested <img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif" />.
</p>
        <p>
In it, he explains some of the ways you can do so and the pitfalls to watch out for.
Of course, you can get around the "<em>workflow runtime can only get loaded once per
appdomain</em>" issues by having it static to the service implementation class OR
if you want only one instance of each - <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a> also gives you a singleton-like
instancing mode as well - <strong><em>InstanceContextMode:=InstanceContextMode.Single</em></strong>.
</p>
        <p>
(<em>I would be interested to find out the naming convention to call it Single in
the latest CTP instead of Singleton</em>)
</p>
        <p>
My tip highlighted <a href="http://www.softwaremaker.net/blog/HookingAWorkflowIntoYourWCFDispatcher.aspx" target="_blank">here</a> is
not really about exposing workflows as services. It is more about how you can hook
a workflow into a already-hosted WCF service as part of its configured behavior, if
need be. For example, you may want to have a non-intrusive workflow for you to raise
an event that calls into your defined <strong>HandleExternalMethod</strong> (called
EventSink before) and then you may just terminate that activity. The reason is because
the workflow thread doesnt return unless you called a <strong>WaitHandle.Set</strong>,
which you can call when a workflow is completed or terminated.
</p>
        <p>
Having said all that - Remember that most of the current implementations of Web Services
today work on a Request-Response model and many more are betting on that it will remain
like that for a long time. Isnt this one of the reasons we have long arguments
of <a href="http://en.wikipedia.org/wiki/POX" target="_blank">POX</a>/<a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank">REST</a> ?
Workflows, on the other hand, are made to handle long running work and therefore,
you need to design and handle both properly as its design principles and most-used
implementations do conflict.
</p>
        <p>
Now, if you forsake the Request-Response model and think about the wonderful partnership
and the options abound once you hit <strong>&lt;OperationContract(IsOneWay:=True)&gt;</strong> on
top of the MSMQ transport, <a href="http://msdn2.microsoft.com/en-us/netframework/aa663328.aspx" target="_blank">Windows
Workflow Foundation (WF)</a> + <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a> does look very delicious and
promising indeed.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=090d9f24-6788-49e4-ba2b-1a775a2033b6" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Matevz adds his weight on Workflows and Services...</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,090d9f24-6788-49e4-ba2b-1a775a2033b6.aspx</guid>
      <link>http://www.softwaremaker.net/blog/MatevzAddsHisWeightOnWorkflowsAndServices.aspx</link>
      <pubDate>Wed, 10 May 2006 10:21:25 GMT</pubDate>
      <description>&lt;p&gt;
Fellow &lt;a href="http://msdn.microsoft.com/isv/rd/default.aspx" target="_blank" title="Microsoft Regional Director"&gt;Microsoft
Regional Director&lt;/a&gt; and well-known distributed systems expert &lt;a href="http://www.request-response.com/blog" target=_blank&gt;Matevz
Gacnik&lt;/a&gt; has a great blog to add on top of mine called: &lt;a href="http://www.request-response.com/blog/PermaLink,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx" target=_blank&gt;Windows
Workflow Foundation: Exposing Workflows as Services&lt;/a&gt;. Trust me, Matevz is a lot
more than Request-Response or what his blog suggested &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
In it, he explains some of the ways you can do so and the pitfalls to watch out for.
Of course, you can get around the "&lt;em&gt;workflow runtime can only get loaded once per
appdomain&lt;/em&gt;" issues by having it static to the service implementation class OR
if you want only one instance of each - &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx target=_blank&gt;Windows
Communication Foundation (WCF, previously - Indigo)&lt;/a&gt; also gives you a singleton-like
instancing mode as well - &lt;strong&gt;&lt;em&gt;InstanceContextMode:=InstanceContextMode.Single&lt;/em&gt;&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
(&lt;em&gt;I would be interested to find out the naming convention to call it Single in
the latest CTP instead of Singleton&lt;/em&gt;)
&lt;/p&gt;
&lt;p&gt;
My&amp;nbsp;tip highlighted &lt;a href="http://www.softwaremaker.net/blog/HookingAWorkflowIntoYourWCFDispatcher.aspx" target=_blank&gt;here&lt;/a&gt;&amp;nbsp;is
not really about exposing workflows as services. It is more about how you can hook
a workflow into a already-hosted WCF service as part of its configured behavior, if
need be. For example, you may want to have a non-intrusive workflow for you to raise
an event that calls into your defined &lt;strong&gt;HandleExternalMethod&lt;/strong&gt; (called
EventSink before) and then you may just terminate that activity. The reason is because
the workflow thread doesnt return unless you called a &lt;strong&gt;WaitHandle.Set&lt;/strong&gt;,
which you can call when a workflow is completed or terminated.
&lt;/p&gt;
&lt;p&gt;
Having said all that - Remember that most of the current implementations of Web Services
today work on a Request-Response model and many more are betting on that it will remain
like that for a long time. Isnt this&amp;nbsp;one of the reasons we have long arguments
of &lt;a href="http://en.wikipedia.org/wiki/POX" target=_blank&gt;POX&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target=_blank&gt;REST&lt;/a&gt; ?
Workflows, on the other hand, are made to handle long running work and therefore,
you need to design and handle both properly as its&amp;nbsp;design principles and most-used
implementations do conflict.
&lt;/p&gt;
&lt;p&gt;
Now, if you forsake the Request-Response model and think about the wonderful partnership
and the options abound once you hit &lt;strong&gt;&amp;lt;OperationContract(IsOneWay:=True)&amp;gt;&lt;/strong&gt; on
top of the MSMQ transport, &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663328.aspx target=_blank&gt;Windows
Workflow Foundation (WF)&lt;/a&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; does look very delicious and
promising indeed.
&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=090d9f24-6788-49e4-ba2b-1a775a2033b6" /&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>Windows Communication Foundation (WCF) aka Indigo;XML Services;Windows Workflow Foundation (WF)</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=83b172cb-5d1a-4d8e-96a3-2d67208499fc</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,83b172cb-5d1a-4d8e-96a3-2d67208499fc.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Now if XML-RPC aint enough (I had blogged about this <a href="http://www.softwaremaker.net/blog/HistoryLessonXMLRPCVsSOAPPartI.aspx" target="_blank">here</a> and <a href="http://www.softwaremaker.net/blog/HistoryLessonXMLRPCVsSOAPPartII.aspx" target="_blank">here</a>),
now we can add <a href="http://xins.sourceforge.net/restrpc.html" target="_blank">REST-RPC</a> into
the mix. The main difference would be the use of HTTP to provide application
semantics via its verbs. This would mean that there would hardly be any XML or
Request payload of any kind.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=83b172cb-5d1a-4d8e-96a3-2d67208499fc" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>More alternatives to SOAP: Rest-RPC</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,83b172cb-5d1a-4d8e-96a3-2d67208499fc.aspx</guid>
      <link>http://www.softwaremaker.net/blog/MoreAlternativesToSOAPRestRPC.aspx</link>
      <pubDate>Tue, 07 Mar 2006 01:01:34 GMT</pubDate>
      <description>&lt;p&gt;
Now if XML-RPC aint enough (I had blogged about this &lt;a href="http://www.softwaremaker.net/blog/HistoryLessonXMLRPCVsSOAPPartI.aspx" target=_blank&gt;here&lt;/a&gt; and &lt;a href="http://www.softwaremaker.net/blog/HistoryLessonXMLRPCVsSOAPPartII.aspx" target=_blank&gt;here&lt;/a&gt;),
now we can add &lt;a href="http://xins.sourceforge.net/restrpc.html" target=_blank&gt;REST-RPC&lt;/a&gt; into
the mix. The main difference would be the use of HTTP to provide&amp;nbsp;application
semantics via its verbs. This would mean that&amp;nbsp;there would hardly be any XML or
Request payload of any kind.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=83b172cb-5d1a-4d8e-96a3-2d67208499fc" /&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>Software Architectures;Software Development;Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=5814b1a6-ffe2-477a-aa0c-aea01f205635</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,5814b1a6-ffe2-477a-aa0c-aea01f205635.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
What a way to start off a new category on my blog called "Interoperability".<br />
I recently came across an interesting post in the forums that goes something like
this:
</p>
        <p>
          <strong>[QUOTE] 
<hr /></strong>
          <em>
            <font color="#808080">Currently I'm working with Visual Studio 2003 in
order to generate xmldsig signature. I'm using the class signedxml  to create
the xmldsig signature and I get somthing like this:</font>
          </em>
        </p>
        <p>
        </p>
        <p>
          <em>
            <font color="#808080">  [Signature xmlns="http://www.w3.org/2000/09/xmldsig#"]<br />
    [SignedInfo]<br />
      [CanonicalizationMethod<br />
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /]<br />
............<br />
  [/Signature]</font>
          </em>
        </p>
        <p>
          <em>
            <font color="#808080">But I need the signature to be in a namespace that should
be identified by<br />
the dsig prefix:</font>
          </em>
        </p>
        <p>
          <em>
            <font color="#808080">[dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"]<br />
[dsig:SignedInfo]<br />
.....<br />
[/dsig:Signature]</font>
          </em>
          <hr />
        </p>
        <p>
        </p>
        <p>
I really didnt think anything of this. At first glance, I thought the problem lies
not in the code BUT the processor / validator that was used to read this.
</p>
        <p>
The dsig or any prefix, for that matter, doesn't indicate whether they 2 use
different namespaces. Check<br />
the [default] namespaces and compare.
</p>
        <p>
Strictly speaking - 
</p>
        <ul>
          <li>
            <strong>[ds:Signature xmlns:ds="urn:softwaremaker.net-foo.bar" /]</strong>
          </li>
          <li>
            <strong>[dsig:Signature xmlns:dsig="urn:softwaremaker.net-foo.bar" /]</strong>
          </li>
          <li>
            <strong>[Signature xmlns="urn:softwaremaker.net-foo.bar /]</strong>
          </li>
        </ul>
        <p>
are <a href="http://www.google.com.sg/search?hl=en&amp;q=define%3A+Isomorphic&amp;meta=" target="_blank">isomorphically</a> the
same. If the end processor / validator reads it and treats differently, I believe
that it should be a design flaw at the other end as it is really poor design
to rely on namespace prefix.
</p>
        <p>
If you look at the <a href="http://www.w3.org/TR/xmldsig-core/" target="_blank">XML-Digital
Signature</a> Specifications, Section 1.3 states that:
</p>
        <p>
          <em>
            <font color="#808080">This namespace is also used as the prefix for algorithm
identifiers used by this specification. While applications MUST support XML and XML
namespaces, the use of internal entities [XML] or our "dsig" XML namespace prefix
and defaulting/scoping conventions are OPTIONAL; we use these facilities to provide
compact and readable examples.</font>
          </em>
        </p>
        <p>
Therefore, it is NOT necessarily to have a prefix to it as long as it points to the
same namespace.
</p>
        <p>
However, I spoke too fast. Further explanations by the other party has made me put
my thinking cap on. He provided 2 reasons being:
</p>
        <ol>
          <li>
Compatibility with our existing signer. 
</li>
          <li>
We are planning to extend the signature to <a href="http://www.w3.org/TR/XAdES/" target="_blank">XML
Advanced Electronic Signatures (XAdES)</a> format. In that case the <strong><em>prefix
is mandatory</em></strong>.</li>
        </ol>
        <p>
I am surprised [which kinda shows how much I know, or dont know ???]. I spent some
minutes digging into the <a href="http://www.w3.org/TR/XAdES/" target="_blank">XML
Advanced Electronic Signatures (XAdES)</a> specifications and true enough, it declares: 
<hr /><em><font color="#808080">The XML schema definition in clause 5 Qualifying properties
syntax defines the prefix "ds" for all the XML elements already defined in [XMLDSIG],
and states that the default namespace is the one defined for the present document.
In consequence, in the examples of this clause, the elements already defined in [XMLDSIG]
appear with the prefix "ds", whereas the new XML elements defined in the present document
appear without prefix.</font></em></p>
        <p>
        </p>
        <p>
          <table class="eg" cellpadding="5" width="100%" bgcolor="#99ffff" summary="Example" border="1">
            <tbody>
              <tr>
                <td>
                  <pre>                              XMLDSIG 
                                   |
&lt;ds:Signature ID?&gt;- - - - - - - - -+- - - - -+
  &lt;ds:SignedInfo&gt;                  |         |
    &lt;ds:CanonicalizationMethod/&gt;   |         |
    &lt;ds:SignatureMethod/&gt;          |         |
    (&lt;ds:Reference URI? &gt;          |         |
      (&lt;ds:Transforms&gt;)?           |         |
      &lt;ds:DigestMethod&gt;            |         |
      &lt;ds:DigestValue&gt;             |         |
    &lt;/ds:Reference&gt;)+              |         |
  &lt;/ds:SignedInfo&gt;                 |         |
  &lt;ds:SignatureValue&gt;              |         |
  (&lt;ds:KeyInfo&gt;)?- - - - - - - - - +         |
                                             |
  &lt;ds:Object&gt;                                |
                                             |
    &lt;QualifyingProperties&gt;                   |
                                             |
      &lt;SignedProperties&gt;                     |
                                             |
        &lt;SignedSignatureProperties&gt;          |
          (SigningTime)                      |
          (SigningCertificate)               |
          (SignaturePolicyIdentifier)        |
          (SignatureProductionPlace)?        |
          (SignerRole)?                      |
        &lt;/SignedSignatureProperties&gt;         |
                                             |
        &lt;SignedDataObjectProperties&gt;         |
          (DataObjectFormat)*                |
          (CommitmentTypeIndication)*        |
          (AllDataObjectsTimeStamp)*         |
          (IndividualDataObjectsTimeStamp)*  |
        &lt;/SignedDataObjectProperties&gt;        |
                                             |
      &lt;/SignedProperties&gt;                    |
                                             |
      &lt;UnsignedProperties&gt;                   |
                                             |
        &lt;UnsignedSignatureProperties&gt;        |
          (CounterSignature)*                |
        &lt;/UnsignedSignatureProperties&gt;       |
                                             |
      &lt;/UnsignedProperties&gt;                  |
                                             |
    &lt;/QualifyingProperties&gt;                  |
                                             |
  &lt;/ds:Object&gt;                               |
                                             |
&lt;/ds:Signature&gt;- - - - - - - - - - - - - - - +
                                             |
                                          XAdES</pre>
                </td>
              </tr>
            </tbody>
          </table>
                       <br /><font color="#808080"><em>Readers must take into account that the XAdES forms build
up on the[XMLDSIG] by adding new XML elements containing qualifying information within
the shown [XMLDSIG]ds:Object element, according to the rules defined in the present
document. This ds:Object element will act as a bag for the whole set of qualifying
properties defined in the present document, conveniently grouped. 
<hr /></em></font></p>
        <p>
        </p>
        <p>
So, there are 2 questions to answer here:
</p>
        <ol>
          <li>
Is there a way to handle the Digital Signature prefix in the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecuritycryptographyxmlsignedxmlclasstopic.asp" target="_blank">SignedXML
Class</a> in .NET Framework 1.1 
</li>
          <li>
If so - How ? If not - How ?</li>
        </ol>
        <p>
I decided to spend some time on this and after much disassembling some of the <em>System.Security.Crytography.XML</em> binaries,
I found out to my dismay that the answer to Question [1] is NO. This is because the
constants and the URIs of the XML Digital Signature functions in the <em>System.Security.Crytography.XML</em> space
are found in the <strong><em>XMLSignature</em></strong> class and that class is declared
as an <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfInternalPG.asp" target="_blank">internal</a> class <img src="http://www.softwaremaker.net/pictures/swmemoticons/sad.gif" />.
</p>
        <p>
Therefore, the answer to Question [2] would be to build our own customized Digital
Signature stack. This may actually sound harder than it is. Truth is:- With <a href="http://www.aisto.com/roeder/dotnet/" target="_blank">Reflector</a> and
work done behind the <a href="http://www.mono-project.com/" target="_blank">MONO-Project</a> and
published on <a href="http://www.koders.com/" target="_blank">Koders.com</a>, I hacked
a workaround in a few hours time. That actually means that I didnt really do much
testing on it and so I <a href="http://www.softwaremaker.net/SWMTNC.asp" target="_blank">disclaim</a> myself
from any liabilities, including, but not limited to, mistakes, injuries, deaths,
etc caused if you choose to use it.
</p>
        <p>
You would use this assembly just like you would with System.Security.Cryptography.Xml.
The namespace would be <strong>Softwaremaker.NET.Security.Cryptography.Xml.PfDsigInterop</strong>.
</p>
        <p>
Do take note that I has ONLY implemented the XML Digital Signature in this assembly. 
<hr /><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> System<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> System.IO<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> System.Security.Cryptography<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> System.Xml<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> System.text<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> Mono.Xml<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> System.Text.UTF8Encoding<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> Softwaremaker.NET.Security.Cryptography.Xml.PfDsigInterop<br /><br />
myRSA <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> RSACryptoServiceProvider<br />
myRSA.FromXmlString(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"..."</span>)<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> doc <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> XmlDocument <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> XmlDocument<br />
doc.PreserveWhitespace <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">False</span><br />
doc.Load(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> XmlTextReader(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"..."</span>))<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> mySignedXML <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> SignedXml <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> SignedXml(doc)<br />
mySignedXML.SigningKey <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> myRSA<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'
Create a data object to hold the data to sign.</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> dataObject <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">New</span> DataObject<br />
dataObject.Data <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> doc.ChildNodes<br />
dataObject.Id <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"someSWMId"</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'
Add the data object to the signature.</span><br />
mySignedXML.AddObject(dataObject)<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> ref <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">New</span> Reference<br />
ref.Uri <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"#someSWMId"</span><br />
mySignedXML.AddReference(ref)<br /><br />
mySignedXML.ComputeSignature()<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> xmldg <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> XmlElement <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> mySignedXML.GetXml<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'
Append the element to the XML document.</span><br />
doc.DocumentElement.AppendChild(doc.ImportNode(xmldg, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">True</span>))<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'
Save the signed XML document to a file</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> xmltw <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">New</span> XmlTextWriter(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"..."</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> UTF8Encoding(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">False</span>))<br />
doc.WriteTo(xmltw)<br />
xmltw.Close() 
<hr /></span></p>
        <p>
        </p>
        <p>
To verify the signed XML, we would just have to use back the <strong>System.Security.Cryptography.Xml</strong> found
in the .NET Framework. At least, the .NET stack got the design of the namespaces and
the prefixes right. 
<hr /><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'
Create a new XML document.</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> xmlDocument <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">New</span> XmlDocument<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'
Load the passedXML file into the document.</span><br />
xmlDocument.Load(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"..."</span>)<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'
Create a new original SignedXml object and pass it the XML document class.</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> signedXml <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">New</span> System.Security.Cryptography.Xml.SignedXml<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'
Find the "Signature" node and create a new XmlNodeList object.</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> xmlnsmgr <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">New</span> XmlNamespaceManager(xmlDocument.NameTable)<br />
xmlnsmgr.AddNamespace(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"SWM"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://www.w3.org/2000/09/xmldsig#"</span>)<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> nodeList <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> XmlNodeList <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> xmlDocument.SelectNodes(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"//SWM:Signature"</span>,
xmlnsmgr)<br />
signedXml.LoadXml(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CType</span>(nodeList(0),
XmlElement))<br /><br />
myRSA <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> RSACryptoServiceProvider<br />
myRSA.FromXmlString(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"..."</span>)<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Return</span> signedXml.CheckSignature(myRSA) 
<hr /></span></p>
        <p>
        </p>
        <p>
You can download my [prefixed-XMLDSIG] custom assembly <a href="http://www.softwaremaker.net/DownloadSvcs/dsSWMPfDSigInteropLIB.asp" target="_blank">here</a>.
Do let me know if you have any comments or feedback. Enjoy !!!
</p>
        <p>
          <font color="#ff0000">
            <strong>[AUTHOR UPDATE]:</strong>
          </font>
          <hr />
          <font color="#ff0000">
            <em>I have spoken to a few experts [on the standards body] about
this and it seems that the concensus is that the prefix is NOT needed at all.</em>
          </font>
        </p>
        <p>
        </p>
        <p>
          <font color="#ff0000">
            <em>The XAdES specifications did not EXPLICITLY state that the
prefix is needed so I don't see how the conclusions are drawn that prefixes
are fixed. Maybe I am missing something.</em>
          </font>
        </p>
        <p>
          <font color="#ff0000">
            <em>It looked to me like all the spec was saying was that the
*examples* used those prefixes.</em>
          </font>
        </p>
        <p>
          <font color="#ff0000">
            <em>It strikes me as surprising that any specification worth
its salt would specify a *fixed prefix*. It would have been too restrictive and not
something that many vendors would agree and abide.</em>
          </font>
        </p>
        <p>
          <font color="#ff0000">
            <em>I have advised the other party to check with the other
parties/vendors for this. In the meantime, I will pull this assembly offline until
I get better clarifications.</em>
          </font>
          <hr />
        </p>
        <p>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=5814b1a6-ffe2-477a-aa0c-aea01f205635" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>XAdES Interop with XML-DSIG as implemented by the .NET Framework</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,5814b1a6-ffe2-477a-aa0c-aea01f205635.aspx</guid>
      <link>http://www.softwaremaker.net/blog/XAdESInteropWithXMLDSIGAsImplementedByTheNETFramework.aspx</link>
      <pubDate>Wed, 08 Feb 2006 13:18:02 GMT</pubDate>
      <description>&lt;p&gt;
What a way to start off a new category on my blog called "Interoperability".&lt;br&gt;
I recently came across an interesting post in the forums that goes something like
this:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[QUOTE] 
&lt;hr&gt;
&lt;/strong&gt;&lt;em&gt;&lt;font color=#808080&gt;Currently I'm working with Visual Studio 2003 in
order to generate xmldsig signature. I'm using the class signedxml&amp;nbsp; to create
the xmldsig signature and I get somthing like this:&lt;/font&gt;&lt;/em&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color=#808080&gt;&amp;nbsp; [Signature xmlns="http://www.w3.org/2000/09/xmldsig#"]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [SignedInfo]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [CanonicalizationMethod&lt;br&gt;
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /]&lt;br&gt;
............&lt;br&gt;
&amp;nbsp; [/Signature]&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color=#808080&gt;But I need the signature to be in a namespace that should
be identified by&lt;br&gt;
the dsig prefix:&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color=#808080&gt;[dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"]&lt;br&gt;
[dsig:SignedInfo]&lt;br&gt;
.....&lt;br&gt;
[/dsig:Signature]&lt;/font&gt;&lt;/em&gt; 
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I really didnt think anything of this. At first glance, I thought the problem&amp;nbsp;lies
not in the&amp;nbsp;code BUT the processor / validator that was used to read this.
&lt;/p&gt;
&lt;p&gt;
The dsig or any prefix, for that matter,&amp;nbsp;doesn't indicate whether they 2 use
different namespaces. Check&lt;br&gt;
the [default] namespaces and compare.
&lt;/p&gt;
&lt;p&gt;
Strictly speaking - 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[ds:Signature xmlns:ds="urn:softwaremaker.net-foo.bar" /]&lt;/strong&gt; 
&lt;li&gt;
&lt;strong&gt;[dsig:Signature xmlns:dsig="urn:softwaremaker.net-foo.bar" /]&lt;/strong&gt; 
&lt;li&gt;
&lt;strong&gt;[Signature xmlns="urn:softwaremaker.net-foo.bar /]&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
are &lt;a href="http://www.google.com.sg/search?hl=en&amp;amp;q=define%3A+Isomorphic&amp;amp;meta=" target=_blank&gt;isomorphically&lt;/a&gt; the
same. If the end processor / validator reads it and treats differently, I believe
that it should be a design flaw at the other end as it&amp;nbsp;is really poor design
to rely on namespace prefix.
&lt;/p&gt;
&lt;p&gt;
If you look at the &lt;a href="http://www.w3.org/TR/xmldsig-core/" target="_blank"&gt;XML-Digital
Signature&lt;/a&gt; Specifications, Section 1.3 states that:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color=#808080&gt;This namespace is also used as the prefix for algorithm identifiers
used by this specification. While applications MUST support XML and XML namespaces,
the use of internal entities [XML] or our "dsig" XML namespace prefix and defaulting/scoping
conventions are OPTIONAL; we use these facilities to provide compact and readable
examples.&lt;/font&gt;&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
Therefore, it is NOT necessarily to have a prefix to it as long as it points to the
same namespace.
&lt;/p&gt;
&lt;p&gt;
However, I spoke too fast. Further explanations by the other party has made me put
my thinking cap on. He provided 2 reasons being:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Compatibility with our existing signer. 
&lt;li&gt;
We are planning to extend the signature to &lt;a href=http://www.w3.org/TR/XAdES/ target=_blank&gt;XML
Advanced Electronic Signatures (XAdES)&lt;/a&gt; format. In that case the&amp;nbsp;&lt;strong&gt;&lt;em&gt;prefix
is mandatory&lt;/em&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
I am surprised [which kinda shows how much I know, or dont know ???]. I spent some
minutes digging into the &lt;a href=http://www.w3.org/TR/XAdES/ target=_blank&gt;XML Advanced
Electronic Signatures (XAdES)&lt;/a&gt; specifications and true enough, it declares: 
&lt;hr&gt;
&lt;em&gt;&lt;font color=#808080&gt;The XML schema definition in clause 5 Qualifying properties
syntax defines the prefix "ds" for all the XML elements already defined in [XMLDSIG],
and states that the default namespace is the one defined for the present document.
In consequence, in the examples of this clause, the elements already defined in [XMLDSIG]
appear with the prefix "ds", whereas the new XML elements defined in the present document
appear without prefix.&lt;/font&gt;&lt;/em&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=eg cellpadding=5 width="100%" bgcolor=#99ffff summary=Example border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;                              XMLDSIG 
                                   |
&amp;lt;ds:Signature ID?&amp;gt;- - - - - - - - -+- - - - -+
  &amp;lt;ds:SignedInfo&amp;gt;                  |         |
    &amp;lt;ds:CanonicalizationMethod/&amp;gt;   |         |
    &amp;lt;ds:SignatureMethod/&amp;gt;          |         |
    (&amp;lt;ds:Reference URI? &amp;gt;          |         |
      (&amp;lt;ds:Transforms&amp;gt;)?           |         |
      &amp;lt;ds:DigestMethod&amp;gt;            |         |
      &amp;lt;ds:DigestValue&amp;gt;             |         |
    &amp;lt;/ds:Reference&amp;gt;)+              |         |
  &amp;lt;/ds:SignedInfo&amp;gt;                 |         |
  &amp;lt;ds:SignatureValue&amp;gt;              |         |
  (&amp;lt;ds:KeyInfo&amp;gt;)?- - - - - - - - - +         |
                                             |
  &amp;lt;ds:Object&amp;gt;                                |
                                             |
    &amp;lt;QualifyingProperties&amp;gt;                   |
                                             |
      &amp;lt;SignedProperties&amp;gt;                     |
                                             |
        &amp;lt;SignedSignatureProperties&amp;gt;          |
          (SigningTime)                      |
          (SigningCertificate)               |
          (SignaturePolicyIdentifier)        |
          (SignatureProductionPlace)?        |
          (SignerRole)?                      |
        &amp;lt;/SignedSignatureProperties&amp;gt;         |
                                             |
        &amp;lt;SignedDataObjectProperties&amp;gt;         |
          (DataObjectFormat)*                |
          (CommitmentTypeIndication)*        |
          (AllDataObjectsTimeStamp)*         |
          (IndividualDataObjectsTimeStamp)*  |
        &amp;lt;/SignedDataObjectProperties&amp;gt;        |
                                             |
      &amp;lt;/SignedProperties&amp;gt;                    |
                                             |
      &amp;lt;UnsignedProperties&amp;gt;                   |
                                             |
        &amp;lt;UnsignedSignatureProperties&amp;gt;        |
          (CounterSignature)*                |
        &amp;lt;/UnsignedSignatureProperties&amp;gt;       |
                                             |
      &amp;lt;/UnsignedProperties&amp;gt;                  |
                                             |
    &amp;lt;/QualifyingProperties&amp;gt;                  |
                                             |
  &amp;lt;/ds:Object&amp;gt;                               |
                                             |
&amp;lt;/ds:Signature&amp;gt;- - - - - - - - - - - - - - - +
                                             |
                                          XAdES&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;&lt;br&gt;
&lt;font color=#808080&gt;&lt;em&gt;Readers must take into account that the XAdES forms build
up on the[XMLDSIG] by adding new XML elements containing qualifying information within
the shown [XMLDSIG]ds:Object element, according to the rules defined in the present
document. This ds:Object element will act as a bag for the whole set of qualifying
properties defined in the present document, conveniently grouped. 
&lt;hr&gt;
&lt;/em&gt;&lt;/font&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
So, there are 2 questions to answer here:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Is there a way to handle the Digital Signature prefix&amp;nbsp;in the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecuritycryptographyxmlsignedxmlclasstopic.asp" target=_blank&gt;SignedXML
Class&lt;/a&gt; in .NET Framework 1.1 
&lt;li&gt;
If so - How ? If not - How ?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
I decided to spend some time on this and after much disassembling some of the &lt;em&gt;System.Security.Crytography.XML&lt;/em&gt; binaries,
I found out to my dismay that the answer to Question [1] is NO. This is because the
constants and the URIs of the XML Digital Signature functions in the &lt;em&gt;System.Security.Crytography.XML&lt;/em&gt; space
are found in the &lt;strong&gt;&lt;em&gt;XMLSignature&lt;/em&gt;&lt;/strong&gt; class and that class is declared
as an &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfInternalPG.asp" target=_blank&gt;internal&lt;/a&gt; class &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/sad.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
Therefore, the answer to Question [2] would be to build our own customized Digital
Signature stack. This may actually sound harder than it is. Truth is:- With &lt;a href="http://www.aisto.com/roeder/dotnet/" target=_blank&gt;Reflector&lt;/a&gt;&amp;nbsp;and
work done behind the &lt;a href="http://www.mono-project.com/" target=_blank&gt;MONO-Project&lt;/a&gt; and
published on &lt;a href="http://www.koders.com/" target=_blank&gt;Koders.com&lt;/a&gt;, I hacked
a workaround in a few hours time. That actually means that I didnt really do much
testing on it and so I &lt;a href="http://www.softwaremaker.net/SWMTNC.asp" target=_blank&gt;disclaim&lt;/a&gt; myself
from any liabilities, including, but not limited to,&amp;nbsp;mistakes, injuries, deaths,
etc&amp;nbsp;caused if you choose to use it.
&lt;/p&gt;
&lt;p&gt;
You would use this assembly just like you would with System.Security.Cryptography.Xml.
The namespace would be &lt;strong&gt;Softwaremaker.NET.Security.Cryptography.Xml.PfDsigInterop&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Do take note that I has ONLY implemented the XML Digital Signature in this assembly. 
&lt;hr&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; System&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; System.IO&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; System.Security.Cryptography&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; System.Xml&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; System.text&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; Mono.Xml&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; System.Text.UTF8Encoding&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; Softwaremaker.NET.Security.Cryptography.Xml.PfDsigInterop&lt;br&gt;
&lt;br&gt;
myRSA &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; RSACryptoServiceProvider&lt;br&gt;
myRSA.FromXmlString(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"..."&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; doc &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; XmlDocument &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; XmlDocument&lt;br&gt;
doc.PreserveWhitespace &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;False&lt;/span&gt;
&lt;br&gt;
doc.Load(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; XmlTextReader(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"..."&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; mySignedXML &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; SignedXml &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; SignedXml(doc)&lt;br&gt;
mySignedXML.SigningKey &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; myRSA&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'
Create a data object to hold the data to sign.&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; dataObject &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;New&lt;/span&gt; DataObject&lt;br&gt;
dataObject.Data &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; doc.ChildNodes&lt;br&gt;
dataObject.Id &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: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"someSWMId"&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;'
Add the data object to the signature.&lt;/span&gt;
&lt;br&gt;
mySignedXML.AddObject(dataObject)&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; ref &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;New&lt;/span&gt; Reference&lt;br&gt;
ref.Uri &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: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"#someSWMId"&lt;/span&gt;
&lt;br&gt;
mySignedXML.AddReference(ref)&lt;br&gt;
&lt;br&gt;
mySignedXML.ComputeSignature()&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; xmldg &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; XmlElement &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; mySignedXML.GetXml&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'
Append the element to the XML document.&lt;/span&gt;
&lt;br&gt;
doc.DocumentElement.AppendChild(doc.ImportNode(xmldg, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;True&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;'
Save the signed XML document to a file&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; xmltw &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;New&lt;/span&gt; XmlTextWriter(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"..."&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; UTF8Encoding(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;False&lt;/span&gt;))&lt;br&gt;
doc.WriteTo(xmltw)&lt;br&gt;
xmltw.Close() 
&lt;hr&gt;
&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
To verify the signed XML, we would just have to use back the &lt;strong&gt;System.Security.Cryptography.Xml&lt;/strong&gt; found
in the .NET Framework. At least, the .NET stack got the design of the namespaces and
the prefixes right. 
&lt;hr&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'
Create a new XML document.&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; xmlDocument &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;New&lt;/span&gt; XmlDocument&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'
Load the passedXML file into the document.&lt;/span&gt;
&lt;br&gt;
xmlDocument.Load(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"..."&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;'
Create a new original SignedXml object and pass it the XML document class.&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; signedXml &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;New&lt;/span&gt; System.Security.Cryptography.Xml.SignedXml&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'
Find the "Signature" node and create a new XmlNodeList object.&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; xmlnsmgr &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;New&lt;/span&gt; XmlNamespaceManager(xmlDocument.NameTable)&lt;br&gt;
xmlnsmgr.AddNamespace(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"SWM"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://www.w3.org/2000/09/xmldsig#"&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; nodeList &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; XmlNodeList &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; xmlDocument.SelectNodes(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"//SWM:Signature"&lt;/span&gt;,
xmlnsmgr)&lt;br&gt;
signedXml.LoadXml(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;CType&lt;/span&gt;(nodeList(0),
XmlElement))&lt;br&gt;
&lt;br&gt;
myRSA &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; RSACryptoServiceProvider&lt;br&gt;
myRSA.FromXmlString(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"..."&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;Return&lt;/span&gt; signedXml.CheckSignature(myRSA) 
&lt;hr&gt;
&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
You can download my [prefixed-XMLDSIG] custom assembly &lt;a href="http://www.softwaremaker.net/DownloadSvcs/dsSWMPfDSigInteropLIB.asp" target=_blank&gt;here&lt;/a&gt;.
Do let me know if you have any comments or feedback. Enjoy !!!
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#ff0000&gt;&lt;strong&gt;[AUTHOR UPDATE]:&lt;/strong&gt;&lt;/font&gt; 
&lt;hr&gt;
&lt;font color=#ff0000&gt;&lt;em&gt;I have spoken to a few experts [on the standards body] about
this and it seems that the concensus is that the prefix is NOT needed at all.&lt;/em&gt;&lt;/font&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#ff0000&gt;&lt;em&gt;The XAdES specifications did not EXPLICITLY state that the
prefix is needed so I don't see how&amp;nbsp;the conclusions are drawn&amp;nbsp;that prefixes
are fixed. Maybe I am missing something.&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#ff0000&gt;&lt;em&gt;It looked to me like all the spec was saying was that the
*examples* used those prefixes.&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#ff0000&gt;&lt;em&gt;It strikes me as surprising that any specification worth its
salt would specify a *fixed prefix*. It would have been too restrictive and not something
that many vendors would agree and abide.&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#ff0000&gt;&lt;em&gt;I have advised the other party to&amp;nbsp;check with the other
parties/vendors for this. In the meantime, I will pull this assembly offline until
I get better clarifications.&lt;/em&gt;&lt;/font&gt; 
&lt;hr&gt;
&lt;p&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=5814b1a6-ffe2-477a-aa0c-aea01f205635" /&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>Community;Interoperability;Software Development;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=d9654392-b25c-46ce-b22e-acd29f21e890</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,d9654392-b25c-46ce-b22e-acd29f21e890.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Now-Now <a href="http://www.hanselman.com/blog" target="_blank">Scott</a>, I think
we both agree on my thoughts <em>(below)</em> since Day 1, but I wouldnt go as
far as <a href="http://www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx" target="_blank">you</a>. <img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif" />.
</p>
        <p>
          <hr />
... <em><strong>Some issues that I have come across are the use of <span class="searchword">Datasets</span> (a
NO ! NO ! in distributed designs -- &gt; Interop is a big problem and <span class="searchword">Datasets</span> are
TOO verbose), the inclusions of Data Schemas at the wire level when traversing network
calls, etc</strong>.</em> ... 
<hr /></p>
        <p>
        </p>
        <p>
My Evil trophy would <em>(have)</em> go<em>(ne)</em> to "<a href="http://www.softwaremaker.net/blog/ContractFirstMessagebasedWebMethodOverloading.aspx" target="_blank">Add
Web Reference</a>". Why the past tense in that ? It is <a href="http://www.softwaremaker.net/blog/SomethingSimpleCanGoAVeryLongWay.aspx" target="_blank">rectified</a>.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=d9654392-b25c-46ce-b22e-acd29f21e890" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Datasets in Distributed Systems Design, Add Web Reference and All Things Evil</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,d9654392-b25c-46ce-b22e-acd29f21e890.aspx</guid>
      <link>http://www.softwaremaker.net/blog/DatasetsInDistributedSystemsDesignAddWebReferenceAndAllThingsEvil.aspx</link>
      <pubDate>Wed, 08 Feb 2006 00:42:35 GMT</pubDate>
      <description>&lt;p&gt;
Now-Now &lt;a href="http://www.hanselman.com/blog" target=_blank&gt;Scott&lt;/a&gt;, I think we
both agree on my thoughts &lt;em&gt;(below)&lt;/em&gt; since Day 1, but I wouldnt go&amp;nbsp;as far
as &lt;a href="http://www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx" target=_blank&gt;you&lt;/a&gt;. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;hr&gt;
... &lt;em&gt;&lt;strong&gt;Some issues that I have come across are the use of &lt;span class=searchword&gt;Datasets&lt;/span&gt; (a
NO ! NO ! in distributed designs -- &amp;gt; Interop is a big problem and &lt;span class=searchword&gt;Datasets&lt;/span&gt; are
TOO verbose), the inclusions of Data Schemas at the wire level when traversing network
calls, etc&lt;/strong&gt;.&lt;/em&gt; ... 
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
My Evil trophy would &lt;em&gt;(have)&lt;/em&gt; go&lt;em&gt;(ne)&lt;/em&gt; to&amp;nbsp;"&lt;a href="http://www.softwaremaker.net/blog/ContractFirstMessagebasedWebMethodOverloading.aspx" target=_blank&gt;Add
Web Reference&lt;/a&gt;". Why the past tense in that ? It is &lt;a href="http://www.softwaremaker.net/blog/SomethingSimpleCanGoAVeryLongWay.aspx" target=_blank&gt;rectified&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=d9654392-b25c-46ce-b22e-acd29f21e890" /&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>Interoperability;Software Development;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=1a4533f2-5691-4649-aad2-e5152e7ece40</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,1a4533f2-5691-4649-aad2-e5152e7ece40.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img height="215" src="http://www.softwaremaker.net/blog/content/binary/dilbert2005121017631.gif" width="600" border="0" />
        </p>
        <p>
          <img height="215" src="http://www.softwaremaker.net/blog/content/binary/dilbert2006026105904.gif" width="600" border="0" />
        </p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1a4533f2-5691-4649-aad2-e5152e7ece40" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Scott, Dilbert and Web Services</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,1a4533f2-5691-4649-aad2-e5152e7ece40.aspx</guid>
      <link>http://www.softwaremaker.net/blog/ScottDilbertAndWebServices.aspx</link>
      <pubDate>Sat, 28 Jan 2006 23:54:04 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img height=215 src="http://www.softwaremaker.net/blog/content/binary/dilbert2005121017631.gif" width=600 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img height=215 src="http://www.softwaremaker.net/blog/content/binary/dilbert2006026105904.gif" width=600 border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1a4533f2-5691-4649-aad2-e5152e7ece40" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>Random Musings;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=6f31f2b0-8455-499f-a596-66c8b275cfca</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,6f31f2b0-8455-499f-a596-66c8b275cfca.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recently had a chance to sit down with a client to discuss about software systems
as well as to find out what we can do for them in their new system proposal.
</p>
        <p>
I mentioned the <a href="http://www.captureplanning.com/articles/12908.cfm" target="_blank">80/20
rule</a> and explained to him what is was.
</p>
        <p>
Then, we talked about (Web) Services and he was aghast that we could still be using
(Web) Services even within his own LAN - and not connected to the WWW.
</p>
        <p>
"...but I thought you need to be using a browser and connected to the internet to
be using (Web) Services ? ..."
</p>
        <p>
Sigh. I have heard that one too many times. One of the recent <a href="http://www.google.com.sg/search?hl=en&amp;q=define%3A+misnomer&amp;meta=" target="_blank">misnomers</a>,
no doubt.
</p>
        <p>
Services, Services, Services. Code and Location is irrelevant. I had posted something
like <a href="http://www.dotnetjunkies.com/WebLog/softwaremaker/archive/2004/07/25/20245.aspx" target="_blank">this</a> a
while back. It is good that the industry is taking some steps to correct this. See
Point [1] of this <a href="http://www.softwaremaker.net/blog/SomethingSimpleCanGoAVeryLongWay.aspx" target="_blank">referenced
post</a>.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=6f31f2b0-8455-499f-a596-66c8b275cfca" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Proposing Software Systems and (Web) Services</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,6f31f2b0-8455-499f-a596-66c8b275cfca.aspx</guid>
      <link>http://www.softwaremaker.net/blog/ProposingSoftwareSystemsAndWebServices.aspx</link>
      <pubDate>Fri, 20 Jan 2006 22:29:37 GMT</pubDate>
      <description>&lt;p&gt;
I recently had a chance to sit down with a client to discuss about software systems
as well as to find out what we can do for them in their new system proposal.
&lt;/p&gt;
&lt;p&gt;
I mentioned the &lt;a href="http://www.captureplanning.com/articles/12908.cfm" target=_blank&gt;80/20
rule&lt;/a&gt; and explained to him what is was.
&lt;/p&gt;
&lt;p&gt;
Then, we talked about (Web) Services and he was aghast that we could still be using
(Web) Services even within his own LAN - and not connected to the WWW.
&lt;/p&gt;
&lt;p&gt;
"...but I thought you need to be using a browser and connected to the internet to
be using (Web) Services ? ..."
&lt;/p&gt;
&lt;p&gt;
Sigh. I have heard that one too many times. One of the recent &lt;a href="http://www.google.com.sg/search?hl=en&amp;amp;q=define%3A+misnomer&amp;amp;meta=" target=_blank&gt;misnomers&lt;/a&gt;,
no doubt.
&lt;/p&gt;
&lt;p&gt;
Services, Services, Services. Code and Location is irrelevant. I had posted something
like &lt;a href="http://www.dotnetjunkies.com/WebLog/softwaremaker/archive/2004/07/25/20245.aspx" target=_blank&gt;this&lt;/a&gt; a
while back. It is good that the industry is taking some steps to correct this. See
Point [1] of this &lt;a href="http://www.softwaremaker.net/blog/SomethingSimpleCanGoAVeryLongWay.aspx" target=_blank&gt;referenced
post&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=6f31f2b0-8455-499f-a596-66c8b275cfca" /&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>Service-Orientation;Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=12d52620-a22a-4d34-bbbf-7c5187cf6511</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,12d52620-a22a-4d34-bbbf-7c5187cf6511.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
With regards to my post <a href="http://www.softwaremaker.net/blog/WSE30WSSecurity11DigitalSignaturesEnhancements.aspx" target="_blank">here</a>,
I thought I expand on one of many enhancements that <a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf" target="_blank">WS-Security
Specifications</a> 1.1 brings.
</p>
        <p>
"<strong><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wse3.0/html/fca47680-f703-43eb-8a7f-c5bd330102c2.asp" target="_blank">MutualCertificate11Security</a></strong>"
assertion is one of the few security turnkey assertions in <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 3.0 and what basically it is is that the client
and server are authenticated using X.509 certificates (X509SecurityToken). Message-level
security is implemented using X509SecurityToken security tokens. This turnkey security
assertion requires WS-Security 1.1
</p>
        <p>
Once that is configured and implemented properly, it is rather interesting to see
what transcends on the wire. Here is a brief snippet: 
<hr />
[wsse:Security soap:mustUnderstand="1"]<br />
...<br />
[wsse:BinarySecurityToken ValueType="...oasis-200401-wss-x509-token-profile-1.0#X509v3"
EncodingType="...wss-soap-message-security-1.0#Base64Binary" wsu:Id="<font color="#ff0000">SecurityToken-76ae...</font>"]MIIBvD...[/wsse:BinarySecurityToken] 
</p>
        <p>
        </p>
        <p>
[xenc:EncryptedKey Id="<font color="#ff0000">SecurityToken-6ec8...</font>" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"]<br />
[xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"]<br />
[ds:DigestMethod xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"
/] 
<br />
[/xenc:EncryptionMethod]<br />
[KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"]<br />
[wsse:SecurityTokenReference]<br />
[wsse:KeyIdentifier ValueType="...oasis-wss-soap-message-security-1.1#ThumbprintSHA1"
EncodingType="...oasis-200401-wss-soap-message-security-1.0#Base64Binary"]qRTA40Xfk6w1Os3mgpgy8UgwR/Y=[/wsse:KeyIdentifier] 
<br />
[/wsse:SecurityTokenReference]<br />
[/KeyInfo]<br />
[xenc:CipherData]<br />
[xenc:CipherValue]hBfCfVmg...[/xenc:CipherValue] 
<br />
[/xenc:CipherData]<br />
[xenc:ReferenceList]<br />
...<br />
[/xenc:ReferenceList]<br />
[/xenc:EncryptedKey]
</p>
        <p>
[<font color="#ff0000">Signature Id="Sig-b679..."</font> xmlns="http://www.w3.org/2000/09/xmldsig#"]<br />
  [SignedInfo]<br />
  [ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" /] 
<br />
  [SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" /] 
<br />
  [<font color="#ff0000">Reference URI="#Id-5cdc..."</font>]<br />
  ...<br />
  [/Reference]<br />
  [/SignedInfo]<br />
  [SignatureValue]O/PdsVMS4PTIBtrx8eyFNzbTnjc=[/SignatureValue] 
<br />
  [KeyInfo]<br />
  [wsse:SecurityTokenReference]<br />
  [<font color="#ff0000">wsse:Reference URI="#SecurityToken-6ec8..." ValueType="...oasis-wss-soap-message-security-1.1#EncryptedKey"
/</font>] 
<br />
  [/wsse:SecurityTokenReference]<br />
  [/KeyInfo]<br />
[/Signature]
</p>
        <p>
[<font color="#ff0000">Signature</font> xmlns="http://www.w3.org/2000/09/xmldsig#"]<br />
  [SignedInfo]<br />
  [ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" /] 
<br />
  [SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /] 
<br />
  [<font color="#ff0000">Reference URI="#Sig-b679..."</font>]<br />
  ...<br />
  [/Reference]<br />
  [/SignedInfo]<br />
  [SignatureValue]PDm4wS+3hzmXugHL1wcTWZXHcaGKkODVHU48XvVNC6catxiOr25<br />
xq9AGN8u8CgYo1JlnoEf2tuCUl86krKiUBSnMR/towfAs2doGg6a+vtjIl9F54c/VZtTPgwn<br />
QdZtJ28E8+ep5MIS2i+9Tamnui6qpX16IS3J1FcMjVBHQpMs=<br />
[/SignatureValue] 
<br />
  [KeyInfo]<br />
  [wsse:SecurityTokenReference]<br />
  [<font color="#ff0000">wsse:Reference URI="#SecurityToken-76ae..." ValueType="...wss-x509-token-profile-1.0#X509v3"
/</font>] 
<br />
  [/wsse:SecurityTokenReference]<br />
  [/KeyInfo]<br />
[/Signature]<br />
... 
<hr /><br /></p>
        <p>
One thing that you will noticed is that there are 2 Digital Signatures generated.
</p>
        <p>
The first one has a ReferenceID, which hints that it will be subject to encryption/signatures
later on, and it is signed by a EncryptedKey type (which I talked about in my <a href="http://www.softwaremaker.net/blog/WSE30WSSecurity11DigitalSignaturesEnhancements.aspx" target="_blank">earlier
post</a>). Because it is encrypted by a symmetric key "#SecurityToken-6ec8", the [SignatureValue]
is rather short and this signature basically signs the soap:Body with an URI of "#Id-5cdc..."
The [EncryptedKey] value can be decrypted and derived by the server's private key
</p>
        <p>
The second signature basically signs the first signature (#Sig-b679...) and it signs
it with the Client's Private Key that only the corresponding Public Key Pair can decrypt.
The Public Key, together with the client's cert is sent over the wire via a [wsse:BinarySecurityToken]
(#SecurityToken-76ae...). Because an asymmetric key is utilized here, the [SignatureValue]
is relatively longer than the first signature.
</p>
        <p>
As we can see from here, the first signature signs the soap:Body and the second signature
signs the first signature. These are generally known as "<strong>Supporting Tokens</strong>".
These additional tokens may be specified to augment the claims provided by the token
associated with the “message signature” provided by the Security Binding. Supporting
tokens may be specified at a different scope than the binding assertion which provides
support for securing the exchange.
</p>
        <p>
There are four properties related to supporting token requirements which may be referenced
by a Security Binding: [Supporting Tokens], [Signed Supporting Tokens], [Endorsing
Supporting Tokens] and [Signed Endorsing Supporting Tokens]. Four assertions are then
defined to populate those properties: SupportingTokens, SignedSupportingTokens, EndorsingSupportingTokens,
and SignedEndorsingSupportingTokens.
</p>
        <p>
What I have shown above is known as the [<strong><u>EndorsingSupportingTokens</u></strong>].
</p>
        <p>
The [SignedEndorsingSupportingTokens] is a combination of [SignedSupportingToken]
and [EndorsingSupportingToken] and I will talk about that in a future post.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=12d52620-a22a-4d34-bbbf-7c5187cf6511" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>More on WS-Security 1.1 with WSE 3.0</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,12d52620-a22a-4d34-bbbf-7c5187cf6511.aspx</guid>
      <link>http://www.softwaremaker.net/blog/MoreOnWSSecurity11WithWSE30.aspx</link>
      <pubDate>Wed, 11 Jan 2006 17:06:42 GMT</pubDate>
      <description>&lt;p&gt;
With regards to my post &lt;a href="http://www.softwaremaker.net/blog/WSE30WSSecurity11DigitalSignaturesEnhancements.aspx" target=_blank&gt;here&lt;/a&gt;,
I thought I expand on one of&amp;nbsp;many enhancements that &lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf" target="_blank"&gt;WS-Security
Specifications&lt;/a&gt; 1.1 brings.
&lt;/p&gt;
&lt;p&gt;
"&lt;strong&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wse3.0/html/fca47680-f703-43eb-8a7f-c5bd330102c2.asp" target=_blank&gt;MutualCertificate11Security&lt;/a&gt;&lt;/strong&gt;"
assertion is one of the few security turnkey assertions in &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; 3.0 and&amp;nbsp;what basically it is is that the client
and server are authenticated using X.509 certificates (X509SecurityToken). Message-level
security is implemented using X509SecurityToken security tokens. This turnkey security
assertion requires WS-Security 1.1
&lt;/p&gt;
&lt;p&gt;
Once that is configured and implemented properly, it is rather interesting to see
what transcends on the wire. Here is a brief snippet: 
&lt;hr&gt;
[wsse:Security soap:mustUnderstand="1"]&lt;br&gt;
...&lt;br&gt;
[wsse:BinarySecurityToken ValueType="...oasis-200401-wss-x509-token-profile-1.0#X509v3"
EncodingType="...wss-soap-message-security-1.0#Base64Binary" wsu:Id="&lt;font color=#ff0000&gt;SecurityToken-76ae...&lt;/font&gt;"]MIIBvD...[/wsse:BinarySecurityToken] 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
[xenc:EncryptedKey Id="&lt;font color=#ff0000&gt;SecurityToken-6ec8...&lt;/font&gt;" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"]&lt;br&gt;
[xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"]&lt;br&gt;
[ds:DigestMethod xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"
/] 
&lt;br&gt;
[/xenc:EncryptionMethod]&lt;br&gt;
[KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"]&lt;br&gt;
[wsse:SecurityTokenReference]&lt;br&gt;
[wsse:KeyIdentifier ValueType="...oasis-wss-soap-message-security-1.1#ThumbprintSHA1"
EncodingType="...oasis-200401-wss-soap-message-security-1.0#Base64Binary"]qRTA40Xfk6w1Os3mgpgy8UgwR/Y=[/wsse:KeyIdentifier] 
&lt;br&gt;
[/wsse:SecurityTokenReference]&lt;br&gt;
[/KeyInfo]&lt;br&gt;
[xenc:CipherData]&lt;br&gt;
[xenc:CipherValue]hBfCfVmg...[/xenc:CipherValue] 
&lt;br&gt;
[/xenc:CipherData]&lt;br&gt;
[xenc:ReferenceList]&lt;br&gt;
...&lt;br&gt;
[/xenc:ReferenceList]&lt;br&gt;
[/xenc:EncryptedKey]
&lt;/p&gt;
&lt;p&gt;
[&lt;font color=#ff0000&gt;Signature Id="Sig-b679..."&lt;/font&gt; xmlns="http://www.w3.org/2000/09/xmldsig#"]&lt;br&gt;
&amp;nbsp; [SignedInfo]&lt;br&gt;
&amp;nbsp; [ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" /] 
&lt;br&gt;
&amp;nbsp; [SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" /] 
&lt;br&gt;
&amp;nbsp; [&lt;font color=#ff0000&gt;Reference URI="#Id-5cdc..."&lt;/font&gt;]&lt;br&gt;
&amp;nbsp; ...&lt;br&gt;
&amp;nbsp; [/Reference]&lt;br&gt;
&amp;nbsp; [/SignedInfo]&lt;br&gt;
&amp;nbsp; [SignatureValue]O/PdsVMS4PTIBtrx8eyFNzbTnjc=[/SignatureValue] 
&lt;br&gt;
&amp;nbsp; [KeyInfo]&lt;br&gt;
&amp;nbsp; [wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp; [&lt;font color=#ff0000&gt;wsse:Reference URI="#SecurityToken-6ec8..." ValueType="...oasis-wss-soap-message-security-1.1#EncryptedKey"
/&lt;/font&gt;] 
&lt;br&gt;
&amp;nbsp; [/wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp; [/KeyInfo]&lt;br&gt;
[/Signature]
&lt;/p&gt;
&lt;p&gt;
[&lt;font color=#ff0000&gt;Signature&lt;/font&gt; xmlns="http://www.w3.org/2000/09/xmldsig#"]&lt;br&gt;
&amp;nbsp; [SignedInfo]&lt;br&gt;
&amp;nbsp; [ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" /] 
&lt;br&gt;
&amp;nbsp; [SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /] 
&lt;br&gt;
&amp;nbsp; [&lt;font color=#ff0000&gt;Reference URI="#Sig-b679..."&lt;/font&gt;]&lt;br&gt;
&amp;nbsp; ...&lt;br&gt;
&amp;nbsp; [/Reference]&lt;br&gt;
&amp;nbsp; [/SignedInfo]&lt;br&gt;
&amp;nbsp; [SignatureValue]PDm4wS+3hzmXugHL1wcTWZXHcaGKkODVHU48XvVNC6catxiOr25&lt;br&gt;
xq9AGN8u8CgYo1JlnoEf2tuCUl86krKiUBSnMR/towfAs2doGg6a+vtjIl9F54c/VZtTPgwn&lt;br&gt;
QdZtJ28E8+ep5MIS2i+9Tamnui6qpX16IS3J1FcMjVBHQpMs=&lt;br&gt;
[/SignatureValue] 
&lt;br&gt;
&amp;nbsp; [KeyInfo]&lt;br&gt;
&amp;nbsp; [wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp; [&lt;font color=#ff0000&gt;wsse:Reference URI="#SecurityToken-76ae..." ValueType="...wss-x509-token-profile-1.0#X509v3"
/&lt;/font&gt;] 
&lt;br&gt;
&amp;nbsp; [/wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp; [/KeyInfo]&lt;br&gt;
[/Signature]&lt;br&gt;
... 
&lt;hr&gt;
&lt;br&gt;
&lt;p&gt;
One thing that you will noticed is that there are 2 Digital Signatures generated.
&lt;/p&gt;
&lt;p&gt;
The first one has a ReferenceID, which hints that it will be subject to encryption/signatures
later on, and it is signed by a EncryptedKey type (which I talked about in my &lt;a href="http://www.softwaremaker.net/blog/WSE30WSSecurity11DigitalSignaturesEnhancements.aspx" target=_blank&gt;earlier
post&lt;/a&gt;). Because it is encrypted by a symmetric key "#SecurityToken-6ec8", the [SignatureValue]
is rather short and this signature basically signs the soap:Body with an URI of "#Id-5cdc..."
The [EncryptedKey] value can be decrypted and derived by the server's private key
&lt;/p&gt;
&lt;p&gt;
The second signature basically signs the first signature (#Sig-b679...) and it signs
it with the Client's Private Key that only the corresponding Public Key Pair can decrypt.
The Public Key, together with the client's cert is sent over the wire via a [wsse:BinarySecurityToken]
(#SecurityToken-76ae...). Because an asymmetric key is utilized here, the [SignatureValue]
is relatively longer than the first signature.
&lt;/p&gt;
&lt;p&gt;
As we can see from here, the first signature signs the soap:Body and the second signature
signs the first signature. These are generally known as "&lt;strong&gt;Supporting Tokens&lt;/strong&gt;".
These additional tokens may be specified to augment the claims provided by the token
associated with the “message signature” provided by the Security Binding. Supporting
tokens may be specified at a different scope than the binding assertion which provides
support for securing the exchange.
&lt;/p&gt;
&lt;p&gt;
There are four properties related to supporting token requirements which may be referenced
by a Security Binding: [Supporting Tokens], [Signed Supporting Tokens], [Endorsing
Supporting Tokens] and [Signed Endorsing Supporting Tokens]. Four assertions are then
defined to populate those properties: SupportingTokens, SignedSupportingTokens, EndorsingSupportingTokens,
and SignedEndorsingSupportingTokens.
&lt;/p&gt;
&lt;p&gt;
What I have shown above is known as the [&lt;strong&gt;&lt;u&gt;EndorsingSupportingTokens&lt;/u&gt;&lt;/strong&gt;].
&lt;/p&gt;
&lt;p&gt;
The [SignedEndorsingSupportingTokens] is a combination of [SignedSupportingToken]
and [EndorsingSupportingToken] and I will talk about that in a future post.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=12d52620-a22a-4d34-bbbf-7c5187cf6511" /&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>Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=602b3d22-c86a-4d07-af96-71016065605c</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,602b3d22-c86a-4d07-af96-71016065605c.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have been back fiddling at the <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 3.0 technology space for the past few weeks and I
am now grokking into the plumbings since there are quite a few forums, blogs, posts
out there focusing on the higher-level abstract programming model.
</p>
        <p>
I am very pleased that WSE 3.0 has implemented <a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf" target="_blank">WS-Security
Specifications</a> 1.1 at its very core, so much so that it is the de-facto security
standard to be used in most of the <a href="http://msdn.microsoft.com/webservices/webservices/building/wse/default.aspx?pull=/msdnmag/issues/05/11/securitybriefs/default.aspx" target="_blank">Turnkey
Security Assertions</a> that comes with the product.
</p>
        <p>
One of the things that I have always been asking for through my contacts and channels
in the <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wss" target="_blank">OASIS
WS-Security Technical Committee</a> is the ability to sign my document snippets
with a symmetric key instead. Since <a href="http://www.w3.org/TR/xmlenc-core/" target="_blank">XML-Encryption</a> already
utilized symmetric key encryption via the [xenc:EncryptedKey] [1] for performance
and throughput reasons, there is no reason why <a href="http://www.w3.org/TR/xmldsig-core/" target="_blank">XML-Digital
Signature</a> cannot do the same. While the improvements in throughput may be slight
due to the fact that in digital signatures, messages are already hashed before encryption,
it is still a viable option that should be made available.
</p>
        <p>
          <strong>In WS-Security 1.0, this is what is commonly seen in the Digital Signature
Parts:</strong>
          <hr />
...<br />
[wsse:BinarySecurityToken ValueType="...oasis-200401-wss-x509-token-profile-1.0#X509v3"
EncodingType="...oasis-200401-wss-soap-message-security-1.0#Base64Binary" 
<br />
wsu:Id="SecurityToken-7b5d..."]MIIBxDCCAW...[/wsse:BinarySecurityToken]<br />
 <br />
  [Signature xmlns="http://www.w3.org/2000/09/xmldsig#"]<br />
  [SignedInfo]<br />
  [CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"
/] 
<br />
  [SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /] 
<br />
  [Reference URI="#Id-f7e1..."]<br />
  [Transforms]<br />
  [Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /] 
<br />
  [/Transforms]<br />
  [DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /] 
<br />
  [DigestValue]avMezj5NhZwNerXidi5oBmjqi/g=[/DigestValue] 
<br />
  [/Reference]<br />
  ...<br />
  [/SignedInfo] 
</p>
        <p>
        </p>
        <p>
[SignatureValue]<strong><em><font color="#ff0000">SJfnqZeDHboWDI2n2gWHqTJO5hXvZOFQw8UtDdajktzR40H+W6D<br />
prs5CW/l9A5TF3xcFfyryA3hz7c+0vdlZSnaA+cBn2qPxt7/YmwaAx5Ave<br />
awuach6YPYI123I4I3f58eSMUgPsx6/uuFQFcJltEMw1nWLE6Wb6CPg5OdtXLs=</font></em></strong>[/SignatureValue] 
<br />
  [KeyInfo]<br />
  [wsse:SecurityTokenReference]<br />
  [wsse:Reference URI="#SecurityToken-7b5d..."<br />
ValueType="...oasis-200401-wss-x509-token-profile-1.0#X509v3" /] 
<br />
  [/wsse:SecurityTokenReference]<br />
  [/KeyInfo]<br />
  [/Signature] 
<hr /></p>
        <p>
          <strong>Now in WS-Security 1.1 via WSE 3.0, I can do this:</strong>
          <hr />
[xenc:EncryptedKey Id="SecurityToken-32e4..." xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"]<br />
  ...<br />
  [wsse:SecurityTokenReference]<br />
    [wsse:KeyIdentifier ValueType="...oasis-wss-soap-message-security-1.1#ThumbprintSHA1"
EncodingType="...oasis-200401-wss-soap-message-security-1.0#Base64Binary"]qRTA40Xfk6w1Os3mgpgy8UgwR/Y=[/wsse:KeyIdentifier] 
<br />
  [/wsse:SecurityTokenReference]<br />
  [/KeyInfo] 
</p>
        <p>
        </p>
        <p>
[xenc:CipherData]  
<br />
[xenc:CipherValue]n6PnkIWb+QsIeOPehLdtQQKYZn202uGqhN+ShCWyBaCf20rmVcta<br />
Bw2MhB1fv9pE0hOLpAxMMT5ffk4/hnwZ/ef2XcZediF6ySfpse14TI2TGy<br />
cp9XErpeYlZNn1wSchHlOEz2gVYfViZoEOIwn8qR7EofLN3U3Mc5Zp2qG2coI=[/xenc:CipherValue] 
<br />
  [/xenc:CipherData]<br />
  [xenc:ReferenceList]<br />
  [xenc:DataReference URI="#Enc-0914..." /] 
<br />
  [xenc:DataReference URI="#Enc-3aab..." /] 
<br />
  [/xenc:ReferenceList]<br />
  [/xenc:EncryptedKey]<br />
  [xenc:EncryptedData Id="Enc-0914..." Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"]<br />
  [xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"
/] 
<br />
  [xenc:CipherData]  [xenc:CipherValue]RLASn...[/xenc:CipherValue] 
<br />
  [/xenc:CipherData]<br />
  [/xenc:EncryptedData]
</p>
        <p>
[Signature xmlns="http://www.w3.org/2000/09/xmldsig#"]<br />
  [SignedInfo]<br />
  ...<br />
  [SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" /] 
<br />
  [Reference URI="#SecurityToken-d217..."]<br />
  [Transforms]<br />
  [Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /] 
<br />
  [/Transforms]<br />
  [DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /] 
<br />
  [DigestValue]A0K7OVwZN3vP4rIXfbTZYy+f+ck=[/DigestValue] 
<br />
  [/Reference]<br />
  [Reference URI="#Timestamp-6f12..."]<br />
  ...<br />
  [/Reference]<br />
  [/SignedInfo]<br />
  [SignatureValue]<strong><em><font color="#ff0000">d8KmXpfspmKiEOZ1eBVY7mk05Wo=</font></em></strong>[/SignatureValue] 
<br />
  [KeyInfo]<br />
  [wsse:SecurityTokenReference]<br />
  [wsse:Reference URI="#SecurityToken-32e4..." 
<br />
ValueType="...<strong><em><font color="#ff0000">oasis-wss-soap-message-security-1.1#EncryptedKey</font></em></strong>"
/] 
<br />
  [/wsse:SecurityTokenReference]<br />
  [/KeyInfo]<br />
[/Signature] 
<hr /></p>
        <p>
        </p>
        <p>
Note the fonts in RED. There is a new URI: <strong>http://docs.oasisopen.org/wss/oasiswss-soap-messagesecurity-1.1#EncryptedKey</strong> which
ties to a ValueType: <strong>A token type of an [xenc:EncryptedKey]</strong></p>
        <p>
... and more importantly ...
</p>
        <p>
the <strong>[SignatureValue]</strong> contents is slightly shorter now because it
is actually encrypted with a symmetric key now. I know I may be picking here
BUT hey, even a single byte in reduction means a lot in throughput performance in
terms of wire transfer of documents. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" />.
</p>
        <p>
There are other improvements WS-Security 1.1 brings over its predecessor 1.0, which
I will blog more about as I go along.
</p>
        <p>
[1] Just a note to defuse any confusion if it crops up: Asymmetric (Public-Private)
key technologies are still very much used in WS-Security and other document-related
security specifications today. I dont think it will be dropped anytime soon unless <a href="http://en.wikipedia.org/wiki/Quantum_cryptography" target="_blank">Quantum
Cryptography</a> takes off <em>mainstream</em> in a big way or the subtle effects
of <a href="http://www.cnn.com/2006/EDUCATION/01/04/largest.prime.number.ap/index.html" target="_blank">this</a> reverberates
adversely through the security space. Having said that, Symmetric (Master/Session)
key technologies have a huge place in the security specifications world too, just
by the fact that it is a 1000x faster than much-secure asymmetric ones. Therefore,
both technologies co-exist and work very well together in the document security space.
To put it simply, a symmetric key (KeyA) is randomly-generated (key-length can be
specified by the application - the longer, the better) and then used to encrypt/decrypt
messages (MsgA). Once that is done - KeyA is then subsequently encrypted by an asymmetric
key (KeyB) and then transmitted through the message. Only the holder of the Private-Key
pair of KeyB will be able to decrypt KeyA which can then decrypt/encrypt MsgA.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=602b3d22-c86a-4d07-af96-71016065605c" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>WSE 3.0 (WS-Security 1.1) Digital Signatures Enhancements</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,602b3d22-c86a-4d07-af96-71016065605c.aspx</guid>
      <link>http://www.softwaremaker.net/blog/WSE30WSSecurity11DigitalSignaturesEnhancements.aspx</link>
      <pubDate>Mon, 09 Jan 2006 21:41:51 GMT</pubDate>
      <description>&lt;p&gt;
I have been back fiddling at the &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; 3.0 technology space for the past few weeks and I
am now grokking into the plumbings since there are quite a few forums, blogs, posts
out there focusing on the higher-level abstract programming model.
&lt;/p&gt;
&lt;p&gt;
I am very pleased that WSE 3.0 has implemented &lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf" target="_blank"&gt;WS-Security
Specifications&lt;/a&gt; 1.1 at its very core, so much so that it is the de-facto security
standard to be used in most of the &lt;a href="http://msdn.microsoft.com/webservices/webservices/building/wse/default.aspx?pull=/msdnmag/issues/05/11/securitybriefs/default.aspx" target=_blank&gt;Turnkey
Security Assertions&lt;/a&gt;&amp;nbsp;that comes with the product.
&lt;/p&gt;
&lt;p&gt;
One of the things that I have always been asking for through my contacts and channels
in&amp;nbsp;the &lt;a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wss" target=_blank&gt;OASIS
WS-Security Technical Committee&lt;/a&gt;&amp;nbsp;is the ability to sign my document snippets
with a symmetric key instead. Since &lt;a href="http://www.w3.org/TR/xmlenc-core/" target="_blank"&gt;XML-Encryption&lt;/a&gt; already
utilized symmetric key encryption via the [xenc:EncryptedKey] [1] for performance
and throughput&amp;nbsp;reasons, there is no reason why &lt;a href="http://www.w3.org/TR/xmldsig-core/" target="_blank"&gt;XML-Digital
Signature&lt;/a&gt; cannot do the same. While the improvements in throughput may be slight
due to the fact that in digital signatures, messages are already hashed before encryption,
it is still a viable option that should be made available.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;In WS-Security 1.0, this is what is commonly seen in the Digital Signature
Parts:&lt;/strong&gt; 
&lt;hr&gt;
...&lt;br&gt;
[wsse:BinarySecurityToken ValueType="...oasis-200401-wss-x509-token-profile-1.0#X509v3"
EncodingType="...oasis-200401-wss-soap-message-security-1.0#Base64Binary" 
&lt;br&gt;
wsu:Id="SecurityToken-7b5d..."]MIIBxDCCAW...[/wsse:BinarySecurityToken]&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&amp;nbsp; [Signature xmlns="http://www.w3.org/2000/09/xmldsig#"]&lt;br&gt;
&amp;nbsp; [SignedInfo]&lt;br&gt;
&amp;nbsp; [CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"
/] 
&lt;br&gt;
&amp;nbsp; [SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /] 
&lt;br&gt;
&amp;nbsp; [Reference URI="#Id-f7e1..."]&lt;br&gt;
&amp;nbsp; [Transforms]&lt;br&gt;
&amp;nbsp; [Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /] 
&lt;br&gt;
&amp;nbsp; [/Transforms]&lt;br&gt;
&amp;nbsp; [DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /] 
&lt;br&gt;
&amp;nbsp; [DigestValue]avMezj5NhZwNerXidi5oBmjqi/g=[/DigestValue] 
&lt;br&gt;
&amp;nbsp; [/Reference]&lt;br&gt;
&amp;nbsp; ...&lt;br&gt;
&amp;nbsp; [/SignedInfo] 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
[SignatureValue]&lt;strong&gt;&lt;em&gt;&lt;font color=#ff0000&gt;SJfnqZeDHboWDI2n2gWHqTJO5hXvZOFQw8UtDdajktzR40H+W6D&lt;br&gt;
prs5CW/l9A5TF3xcFfyryA3hz7c+0vdlZSnaA+cBn2qPxt7/YmwaAx5Ave&lt;br&gt;
awuach6YPYI123I4I3f58eSMUgPsx6/uuFQFcJltEMw1nWLE6Wb6CPg5OdtXLs=&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;[/SignatureValue] 
&lt;br&gt;
&amp;nbsp; [KeyInfo]&lt;br&gt;
&amp;nbsp; [wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp; [wsse:Reference URI="#SecurityToken-7b5d..."&lt;br&gt;
ValueType="...oasis-200401-wss-x509-token-profile-1.0#X509v3" /] 
&lt;br&gt;
&amp;nbsp; [/wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp; [/KeyInfo]&lt;br&gt;
&amp;nbsp; [/Signature] 
&lt;hr&gt;
&lt;p&gt;
&lt;strong&gt;Now in WS-Security 1.1 via WSE 3.0, I can do this:&lt;/strong&gt; 
&lt;hr&gt;
[xenc:EncryptedKey Id="SecurityToken-32e4..." xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"]&lt;br&gt;
&amp;nbsp; ...&lt;br&gt;
&amp;nbsp; [wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [wsse:KeyIdentifier ValueType="...oasis-wss-soap-message-security-1.1#ThumbprintSHA1"
EncodingType="...oasis-200401-wss-soap-message-security-1.0#Base64Binary"]qRTA40Xfk6w1Os3mgpgy8UgwR/Y=[/wsse:KeyIdentifier] 
&lt;br&gt;
&amp;nbsp; [/wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp; [/KeyInfo] 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
[xenc:CipherData]&amp;nbsp; 
&lt;br&gt;
[xenc:CipherValue]n6PnkIWb+QsIeOPehLdtQQKYZn202uGqhN+ShCWyBaCf20rmVcta&lt;br&gt;
Bw2MhB1fv9pE0hOLpAxMMT5ffk4/hnwZ/ef2XcZediF6ySfpse14TI2TGy&lt;br&gt;
cp9XErpeYlZNn1wSchHlOEz2gVYfViZoEOIwn8qR7EofLN3U3Mc5Zp2qG2coI=[/xenc:CipherValue] 
&lt;br&gt;
&amp;nbsp; [/xenc:CipherData]&lt;br&gt;
&amp;nbsp; [xenc:ReferenceList]&lt;br&gt;
&amp;nbsp; [xenc:DataReference URI="#Enc-0914..." /] 
&lt;br&gt;
&amp;nbsp; [xenc:DataReference URI="#Enc-3aab..." /] 
&lt;br&gt;
&amp;nbsp; [/xenc:ReferenceList]&lt;br&gt;
&amp;nbsp; [/xenc:EncryptedKey]&lt;br&gt;
&amp;nbsp; [xenc:EncryptedData Id="Enc-0914..." Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"]&lt;br&gt;
&amp;nbsp; [xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"
/] 
&lt;br&gt;
&amp;nbsp; [xenc:CipherData]&amp;nbsp; [xenc:CipherValue]RLASn...[/xenc:CipherValue] 
&lt;br&gt;
&amp;nbsp; [/xenc:CipherData]&lt;br&gt;
&amp;nbsp; [/xenc:EncryptedData]
&lt;/p&gt;
&lt;p&gt;
[Signature xmlns="http://www.w3.org/2000/09/xmldsig#"]&lt;br&gt;
&amp;nbsp; [SignedInfo]&lt;br&gt;
&amp;nbsp; ...&lt;br&gt;
&amp;nbsp; [SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" /] 
&lt;br&gt;
&amp;nbsp; [Reference URI="#SecurityToken-d217..."]&lt;br&gt;
&amp;nbsp; [Transforms]&lt;br&gt;
&amp;nbsp; [Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /] 
&lt;br&gt;
&amp;nbsp; [/Transforms]&lt;br&gt;
&amp;nbsp; [DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /] 
&lt;br&gt;
&amp;nbsp; [DigestValue]A0K7OVwZN3vP4rIXfbTZYy+f+ck=[/DigestValue] 
&lt;br&gt;
&amp;nbsp; [/Reference]&lt;br&gt;
&amp;nbsp; [Reference URI="#Timestamp-6f12..."]&lt;br&gt;
&amp;nbsp; ...&lt;br&gt;
&amp;nbsp; [/Reference]&lt;br&gt;
&amp;nbsp; [/SignedInfo]&lt;br&gt;
&amp;nbsp; [SignatureValue]&lt;strong&gt;&lt;em&gt;&lt;font color=#ff0000&gt;d8KmXpfspmKiEOZ1eBVY7mk05Wo=&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;[/SignatureValue] 
&lt;br&gt;
&amp;nbsp; [KeyInfo]&lt;br&gt;
&amp;nbsp; [wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp; [wsse:Reference URI="#SecurityToken-32e4..." 
&lt;br&gt;
ValueType="...&lt;strong&gt;&lt;em&gt;&lt;font color=#ff0000&gt;oasis-wss-soap-message-security-1.1#EncryptedKey&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;"
/] 
&lt;br&gt;
&amp;nbsp; [/wsse:SecurityTokenReference]&lt;br&gt;
&amp;nbsp; [/KeyInfo]&lt;br&gt;
[/Signature] 
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Note the fonts in RED. There is a new URI: &lt;strong&gt;http://docs.oasisopen.org/wss/oasiswss-soap-messagesecurity-1.1#EncryptedKey&lt;/strong&gt;&amp;nbsp;which
ties to a ValueType: &lt;strong&gt;A token type of an [xenc:EncryptedKey]&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
... and more importantly ...
&lt;/p&gt;
&lt;p&gt;
the &lt;strong&gt;[SignatureValue]&lt;/strong&gt; contents is slightly shorter now because it
is actually encrypted with a symmetric key now. I know I may be&amp;nbsp;picking here
BUT hey, even a single byte in reduction means a lot in throughput performance in
terms of wire transfer of documents. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
There are other improvements WS-Security 1.1 brings over its predecessor 1.0, which
I will blog more about as I go along.
&lt;/p&gt;
&lt;p&gt;
[1] Just a note to defuse any confusion if it crops up: Asymmetric (Public-Private)
key technologies are still very much used in WS-Security and other document-related
security specifications today. I dont think it will be dropped anytime soon unless &lt;a href="http://en.wikipedia.org/wiki/Quantum_cryptography" target=_blank&gt;Quantum
Cryptography&lt;/a&gt;&amp;nbsp;takes off &lt;em&gt;mainstream&lt;/em&gt; in a big way or the subtle effects
of &lt;a href="http://www.cnn.com/2006/EDUCATION/01/04/largest.prime.number.ap/index.html" target=_blank&gt;this&lt;/a&gt; reverberates
adversely through the security space. Having said that, Symmetric (Master/Session)
key technologies have a huge place in the security specifications world too, just
by the fact that it is a 1000x faster than much-secure asymmetric ones. Therefore,
both technologies co-exist and work very well together in the document security space.
To put it simply, a symmetric key (KeyA) is randomly-generated (key-length can be
specified by the application - the longer, the better) and then used to encrypt/decrypt
messages (MsgA). Once that is done - KeyA is then subsequently encrypted by an asymmetric
key (KeyB) and then transmitted through the message. Only the holder of the Private-Key
pair of KeyB will be able to decrypt KeyA which can then decrypt/encrypt&amp;nbsp;MsgA.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=602b3d22-c86a-4d07-af96-71016065605c" /&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>Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=71b17822-f1b4-4157-901f-2fd97492c634</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,71b17822-f1b4-4157-901f-2fd97492c634.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was approached to write about <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a> a while back for <a href="http://searchvb.techtarget.com/" target="_blank">SearchVB.com,
a member of TechTarget.com</a>.
</p>
        <p>
Between a few new transitional CTP drops and major Microsoft events, I managed to
hack out a simple piece <a href="http://searchvb.techtarget.com/originalContent/0,289142,sid8_gci1148900,00.html" target="_blank">here</a> targetted
at entry WCF-VB developers. There is another intermediate one (that deals with security) which
will appear slightly later on TechTarget.com. Stay tuned to this space for further
updates.
</p>
        <p>
Do take note that this piece is currently one of the very few out there that is written
against one of the latest WCF versions (The Sept-CTP WinFX drop).
</p>
        <p>
Enjoy and send those comments over.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=71b17822-f1b4-4157-901f-2fd97492c634" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Connecting Web services with the System.ServiceModel - On SearchVB.com</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,71b17822-f1b4-4157-901f-2fd97492c634.aspx</guid>
      <link>http://www.softwaremaker.net/blog/ConnectingWebServicesWithTheSystemServiceModelOnSearchVBcom.aspx</link>
      <pubDate>Thu, 01 Dec 2005 22:05:28 GMT</pubDate>
      <description>&lt;p&gt;
I was approached to write about &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx target=_blank&gt;Windows
Communication Foundation (WCF, previously - Indigo)&lt;/a&gt; a while back for &lt;a href="http://searchvb.techtarget.com/" target=_blank&gt;SearchVB.com,
a member of TechTarget.com&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Between a few new transitional CTP drops and major Microsoft events, I managed to
hack out a simple piece &lt;a href="http://searchvb.techtarget.com/originalContent/0,289142,sid8_gci1148900,00.html" target=_blank&gt;here&lt;/a&gt; targetted
at entry WCF-VB developers. There is another intermediate one (that deals with security)&amp;nbsp;which
will appear slightly later on TechTarget.com. Stay tuned to this space for further
updates.
&lt;/p&gt;
&lt;p&gt;
Do take note that this piece is currently one of the very few out there that is written
against one of the latest WCF versions&amp;nbsp;(The Sept-CTP WinFX drop).
&lt;/p&gt;
&lt;p&gt;
Enjoy and send those comments over.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=71b17822-f1b4-4157-901f-2fd97492c634" /&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>Articles;Windows Communication Foundation (WCF) aka Indigo;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=1a8a0442-c829-4742-9431-2705d46b71d6</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,1a8a0442-c829-4742-9431-2705d46b71d6.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was told that there appears to be a couple of non-working samples in the <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a> Sept-CTP drop. I found out
(the hard way) that one of them was the BasicSecurityProfile sample.
</p>
        <p>
There is a workaround to it. There are basically 2 bugs in that sample. It may
help solve the other bugs in the samples. This will only affect the security samples
that uses the <a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf" target="_blank">WS-Security
Specifications</a> in the [basicHttpBinding] bindings.
</p>
        <p>
          <strong>
            <font color="#ff0000">BUG 1.</font>
          </strong> The affected sample will only
work with X.509 Digital Certificates that has the <strong><em>Subject Key Identifier
(SKI)</em></strong> installed. Unfortunately, the cert samples, which are used, are
being issued by makecert.exe which doesnt generate X.509 certs with the SKI.
</p>
        <ol>
          <li>
You can create test certificates from <a href="http://www.verisign.com" target="_blank">Verisign</a>.
Those test certs will come with SKI 
</li>
          <li>
You can set up a Certificate Authority (CA) on Windows 2003 Server. This is not
installed by default and you need to add that component into your server setup. This will
issue you a cert with SKI.</li>
        </ol>
        <p>
On a separate note, X.509 Digital Certificates that come with SKI offer the best approach
in interoperability, so it is best recommended that you work with certs that comes
installed with it.
</p>
        <p>
          <font color="#ff0000">
            <strong>BUG 2.</strong>
          </font> Once you fix the workaround to
BUG 1, and you run the BasicSecurityProfile sample and the client barfs this exception at
you: 
<hr />
System.ServiceModel.Security.MessageSecurityException was unhandled<br />
  Message="No signature message parts were specified for messages with action
'*'."<br />
  Source="mscorlib"<br />
  StackTrace: [BLAH] [BLAH] [BLAH] 
<hr />
You would have come across the second bug. This is an easy fix. 
</p>
        <p>
        </p>
        <ol>
          <li>
On the client proxy, change the replyAction = "*"</li>
        </ol>
        <p>
Once you have these 2 workarounds done up, the BasicSecurityProfile sample should
work.
</p>
        <p>
Both these bugs will be fixed in the subsequent WCF drop. I hope this at least helps
someone.<br /></p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1a8a0442-c829-4742-9431-2705d46b71d6" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Bug in the basicHttpBinding / WS-Security of the WCF Sept-CTP drop</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,1a8a0442-c829-4742-9431-2705d46b71d6.aspx</guid>
      <link>http://www.softwaremaker.net/blog/BugInTheBasicHttpBindingWSSecurityOfTheWCFSeptCTPDrop.aspx</link>
      <pubDate>Sat, 29 Oct 2005 01:13:35 GMT</pubDate>
      <description>&lt;p&gt;
I was told that there appears to be a couple of non-working samples in the &lt;a href=http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx target=_blank&gt;Windows
Communication Foundation (WCF, previously - Indigo)&lt;/a&gt; Sept-CTP drop. I found out
(the hard way) that one of them was the BasicSecurityProfile sample.
&lt;/p&gt;
&lt;p&gt;
There is a workaround to it. There are basically 2 bugs&amp;nbsp;in that sample. It may
help solve the other bugs in the samples. This will only affect the security samples
that uses the &lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf" target="_blank"&gt;WS-Security
Specifications&lt;/a&gt; in the [basicHttpBinding] bindings.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color=#ff0000&gt;BUG 1.&lt;/font&gt;&lt;/strong&gt; The affected sample will only work
with X.509 Digital Certificates that has the &lt;strong&gt;&lt;em&gt;Subject Key Identifier (SKI)&lt;/em&gt;&lt;/strong&gt; installed.
Unfortunately, the cert samples, which are used, are being issued by makecert.exe
which doesnt generate X.509 certs with the SKI.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
You can create test certificates from &lt;a href="http://www.verisign.com" target=_blank&gt;Verisign&lt;/a&gt;.
Those test certs will come with SKI 
&lt;li&gt;
You can&amp;nbsp;set up a Certificate Authority (CA) on Windows 2003 Server. This is not
installed by default and you need to add that component into your server setup. This&amp;nbsp;will
issue you a cert with SKI.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
On a separate note, X.509 Digital Certificates that come with SKI offer the best approach
in interoperability, so it is best recommended that you work with certs that comes
installed with it.
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#ff0000&gt;&lt;strong&gt;BUG 2.&lt;/strong&gt;&lt;/font&gt; Once you fix the workaround to
BUG 1, and you run the BasicSecurityProfile sample and the client barfs this exception&amp;nbsp;at
you: 
&lt;hr&gt;
System.ServiceModel.Security.MessageSecurityException was unhandled&lt;br&gt;
&amp;nbsp; Message="No signature message parts were specified for messages with action
'*'."&lt;br&gt;
&amp;nbsp; Source="mscorlib"&lt;br&gt;
&amp;nbsp; StackTrace: [BLAH] [BLAH] [BLAH] 
&lt;hr&gt;
You would have come across the second bug. This is an easy fix. 
&lt;p&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
On the client proxy, change the replyAction = "*"&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Once you have these 2 workarounds done up, the BasicSecurityProfile sample should
work.
&lt;/p&gt;
&lt;p&gt;
Both these bugs will be fixed in the subsequent WCF drop. I hope this at least helps
someone.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1a8a0442-c829-4742-9431-2705d46b71d6" /&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>Windows Communication Foundation (WCF) aka Indigo;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=efb7a1e0-b67f-4ff6-acef-618816a086e1</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,efb7a1e0-b67f-4ff6-acef-618816a086e1.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 2.0, one could exercise some control over what one
xml element/fragments wants to encrypt within a <strong>soap:Body</strong>. Therefore,
if I wanted to encrypt the account string in my credit card type, I could do something
like this:
</p>
        <p>
[At your Service Side] 
<hr />
Public Class SecuredCreditCard<br />
  &lt;XmlElement(ElementName:="CreditCardType")&gt; _<br />
  Public Type As String<br />
  &lt;XmlElement(ElementName:="CreditCardAccount")&gt; _<br />
  Public Account As SecuredString<br />
End Class 
</p>
        <p>
        </p>
        <p>
Public Class SecuredString<br />
  'Set the Oasis Id that our security reference will point to<br />
  &lt;XmlAttributeAttribute("Id", _<br />
Namespace:=".../2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")&gt; _<br />
  Public ID As String<br />
  &lt;XmlText()&gt; _<br />
  Public Data As String<br />
End Class
</p>
        <p>
[At your Calling side] 
<hr />
Dim a As localhost.IndexWse = New localhost.IndexWse<br />
Dim b As localhost.SecuredCreditCard = New localhost.SecuredCreditCard<br />
Dim z As localhost.SecuredString = New localhost.SecuredString 
</p>
        <p>
        </p>
        <p>
Dim c As SoapContext = a.RequestSoapContext
</p>
        <p>
b.CreditCardType = "VISA"<br />
z.Id = "uri:demoId.softwaremaker.net" 'or some guid<br />
z.Value = "123-456-789"<br />
b.CreditCardAccount = z
</p>
        <p>
c.Security.Elements.Add(New EncryptedData(tok, "#uri:demoId.softwaremaker.net"))
</p>
        <p>
Note: To reduce headache-inducing typo bugs, you may want to use some WSE Constants
such as 
<br />
WSUtility.Prefix<br />
WSUtility.AttributeNames.Id<br />
WSUtility.NamespaceURI
</p>
        <p>
The end result of this is a soap:Body on the wire looks like this: 
<hr />
&lt;SecureCreditCard&gt;<br />
 &lt;CreditCardType&gt;VISA&lt;/CreditCardType&gt;<br />
 &lt;CreditCardAccount d4p1:Id="uri:demoId.softwaremaker.net" xmlns:d4p1=".../2004/01/oasis- 200401-wss-wssecurity-utility-1.0.xsd"&gt;<br />
  &lt;xenc:EncryptedData Id="EncryptedContent-3d793117-f020-4236-a0a0-0ed545d9bf1a"
Type=".../2001/04/  xmlenc#Content" xmlns:xenc=".../2001/04/xmlenc#"&gt;<br />
  &lt;xenc:EncryptionMethod Algorithm=".../2001/04/xmlenc#aes128-cbc" /&gt;<br />
  &lt;xenc:CipherData&gt;<br />
  &lt;xenc:CipherValue&gt;FRFCiq...+0W5oS4&lt;/xenc:CipherValue&gt;<br />
  &lt;/xenc:CipherData&gt;<br />
  &lt;/xenc:EncryptedData&gt;<br />
 &lt;/CreditCardAccount&gt;<br />
&lt;/SecureCreditCard&gt; 
</p>
        <p>
        </p>
        <p>
While I dont know how much of performance benefits this has over one that has the
entire SecureCreditCard encrypted (since it is an symmetric-key encryption at its
core), I think in terms of latency and throughput, it does offer some benefits especially
with a sizable payload (&gt;20-30 kb, for instance ?)
</p>
        <p>
          <a href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">Windows
Communication Foundation (WCF, previously - Indigo)</a> does not currently have that
feature build in at the moment (Sept05-CTP or known as the PDC-bits). In other words,
in WCF today, you encrypt the entire contents of the <strong>soap:Body</strong>, lock-stock-barrel.
I would still love that WSE feature in there: To be able to exercise finer grain control
over what I want to or not to encrypt within a <strong>soap:Body</strong>.
</p>
        <p>
Would really like to find out if I am the only odd one out there. Any users using
that existing WSE feature out there that would love to see the same in WCF or do you
have other better ideas ? Leave a comment or email me via the contact link on the
side. Thank you.
</p>
        <p>
          <strong>
            <font color="#ff0000">BTW: Whether you encrypt certain elements of the
contents or encrypt the entire contents of the soap:Body, both are <a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf" target="_blank">WS-Security
Specifications</a> compliant</font>
          </strong>.<br />
 
</p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=efb7a1e0-b67f-4ff6-acef-618816a086e1" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Encrypting message fragments in a soap:body : Evidence and Feedback needed !</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,efb7a1e0-b67f-4ff6-acef-618816a086e1.aspx</guid>
      <link>http://www.softwaremaker.net/blog/EncryptingMessageFragmentsInASoapbodyEvidenceAndFeedbackNeeded.aspx</link>
      <pubDate>Mon, 24 Oct 2005 13:00:00 GMT</pubDate>
      <description>&lt;p&gt;
In &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, one could exercise some control over what one
xml element/fragments wants to encrypt within a &lt;strong&gt;soap:Body&lt;/strong&gt;. Therefore,
if I wanted to encrypt the account string in my credit card type, I could do something
like this:
&lt;/p&gt;
&lt;p&gt;
[At your Service Side] 
&lt;hr&gt;
Public Class SecuredCreditCard&lt;br&gt;
&amp;nbsp; &amp;lt;XmlElement(ElementName:="CreditCardType")&amp;gt; _&lt;br&gt;
&amp;nbsp; Public Type As String&lt;br&gt;
&amp;nbsp; &amp;lt;XmlElement(ElementName:="CreditCardAccount")&amp;gt; _&lt;br&gt;
&amp;nbsp; Public Account As SecuredString&lt;br&gt;
End Class 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Public Class SecuredString&lt;br&gt;
&amp;nbsp; 'Set the Oasis Id that our security reference will point to&lt;br&gt;
&amp;nbsp; &amp;lt;XmlAttributeAttribute("Id", _&lt;br&gt;
Namespace:=".../2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")&amp;gt; _&lt;br&gt;
&amp;nbsp; Public ID As String&lt;br&gt;
&amp;nbsp; &amp;lt;XmlText()&amp;gt; _&lt;br&gt;
&amp;nbsp; Public Data As String&lt;br&gt;
End Class
&lt;/p&gt;
&lt;p&gt;
[At your Calling side] 
&lt;hr&gt;
Dim a As localhost.IndexWse = New localhost.IndexWse&lt;br&gt;
Dim b As localhost.SecuredCreditCard = New localhost.SecuredCreditCard&lt;br&gt;
Dim z As localhost.SecuredString = New localhost.SecuredString 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Dim c As SoapContext = a.RequestSoapContext
&lt;/p&gt;
&lt;p&gt;
b.CreditCardType = "VISA"&lt;br&gt;
z.Id = "uri:demoId.softwaremaker.net" 'or some guid&lt;br&gt;
z.Value = "123-456-789"&lt;br&gt;
b.CreditCardAccount = z
&lt;/p&gt;
&lt;p&gt;
c.Security.Elements.Add(New EncryptedData(tok, "#uri:demoId.softwaremaker.net"))
&lt;/p&gt;
&lt;p&gt;
Note: To reduce headache-inducing typo bugs, you may want to use some WSE Constants
such as 
&lt;br&gt;
WSUtility.Prefix&lt;br&gt;
WSUtility.AttributeNames.Id&lt;br&gt;
WSUtility.NamespaceURI
&lt;/p&gt;
&lt;p&gt;
The end result of this is a soap:Body on the wire looks like this: 
&lt;hr&gt;
&amp;lt;SecureCreditCard&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;CreditCardType&amp;gt;VISA&amp;lt;/CreditCardType&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;CreditCardAccount d4p1:Id="uri:demoId.softwaremaker.net" xmlns:d4p1=".../2004/01/oasis-&amp;nbsp;200401-wss-wssecurity-utility-1.0.xsd"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;xenc:EncryptedData Id="EncryptedContent-3d793117-f020-4236-a0a0-0ed545d9bf1a"
Type=".../2001/04/&amp;nbsp;&amp;nbsp;xmlenc#Content" xmlns:xenc=".../2001/04/xmlenc#"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;xenc:EncryptionMethod Algorithm=".../2001/04/xmlenc#aes128-cbc" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;xenc:CipherData&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;xenc:CipherValue&amp;gt;FRFCiq...+0W5oS4&amp;lt;/xenc:CipherValue&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/xenc:CipherData&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/xenc:EncryptedData&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;/CreditCardAccount&amp;gt;&lt;br&gt;
&amp;lt;/SecureCreditCard&amp;gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
While I dont know how much of performance benefits this has over one that has the
entire SecureCreditCard encrypted (since it is an symmetric-key encryption at its
core), I think in terms of latency and throughput, it does offer some benefits especially
with a sizable payload (&amp;gt;20-30 kb, for instance ?)
&lt;/p&gt;
&lt;p&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; does not currently have that
feature build in at the moment (Sept05-CTP or known as the PDC-bits). In other words,
in WCF today, you encrypt the entire contents of the &lt;strong&gt;soap:Body&lt;/strong&gt;, lock-stock-barrel.
I would still love that WSE feature in there: To be able to exercise finer grain control
over what I want to or not to encrypt within a &lt;strong&gt;soap:Body&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Would really like to find out if I am the only odd one out there. Any users using
that existing WSE feature out there that would love to see the same in WCF or do you
have other better ideas ? Leave a comment or email me via the contact link on the
side. Thank you.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color=#ff0000&gt;BTW:&amp;nbsp;Whether you encrypt certain elements of the
contents or&amp;nbsp;encrypt the entire contents of the soap:Body, both are&amp;nbsp;&lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf" target="_blank"&gt;WS-Security
Specifications&lt;/a&gt; compliant&lt;/font&gt;&lt;/strong&gt;.&lt;br&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=efb7a1e0-b67f-4ff6-acef-618816a086e1" /&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>Web Services Enhancements (WSE);Windows Communication Foundation (WCF) aka Indigo;WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=e8168acd-e68a-45b7-88b5-f451a3b9c2da</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,e8168acd-e68a-45b7-88b5-f451a3b9c2da.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had posted <a href="http://www.dotnetjunkies.com/WebLog/softwaremaker/archive/2004/07/25/20245.aspx" target="_blank">this
thought</a> quite a while back on an old blog. Seems like the recent <a href="http://lists.w3.org/Archives/Public/www-tag/2005Oct/att-0017/11-tagmem-minutes.html" target="_blank">exchange</a> in
W3C, more or less, have re-visted my thoughts on this issue. 
</p>
        <p>
          <a href="http://jim.webber.name/" target="_blank">Jim Webber</a> sums it well <a href="http://jim.webber.name/2005/10/12/294ee966-d0a2-459f-9525-e03d7b26dfb7.aspx" target="_blank">here</a>. 
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e8168acd-e68a-45b7-88b5-f451a3b9c2da" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>XML "Web?" Services</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,e8168acd-e68a-45b7-88b5-f451a3b9c2da.aspx</guid>
      <link>http://www.softwaremaker.net/blog/XMLWebServices.aspx</link>
      <pubDate>Sun, 16 Oct 2005 09:15:10 GMT</pubDate>
      <description>&lt;p&gt;
I had posted &lt;a href="http://www.dotnetjunkies.com/WebLog/softwaremaker/archive/2004/07/25/20245.aspx" target=_blank&gt;this
thought&lt;/a&gt; quite a while back on an old blog. Seems like the recent &lt;a href="http://lists.w3.org/Archives/Public/www-tag/2005Oct/att-0017/11-tagmem-minutes.html" target=_blank&gt;exchange&lt;/a&gt; in
W3C, more or less,&amp;nbsp;have re-visted my thoughts on this issue. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://jim.webber.name/" target=_blank&gt;Jim Webber&lt;/a&gt; sums it well &lt;a href="http://jim.webber.name/2005/10/12/294ee966-d0a2-459f-9525-e03d7b26dfb7.aspx" target=_blank&gt;here&lt;/a&gt;. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e8168acd-e68a-45b7-88b5-f451a3b9c2da" /&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>Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=3ae671c3-af70-4e23-94b0-496f59db28a4</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,3ae671c3-af70-4e23-94b0-496f59db28a4.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Another speaking assignment that landed at my desk is for me to talk about "Web Services
Security: How to track along the Security Standards Jungle" on the 21 October 2005
</p>
        <p>
Somehow, I tend to attact the dry topics <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" />.
This event is owned by <a href="http://www.oasis-open.org" target="_blank">OASIS</a> and <a href="http://www.xmlone.org/" target="_blank">XMLOne
Usergroup</a>. More information can be found <a href="http://www.xmlone.org/oasis-event.htm" target="_blank">here</a>.
</p>
        <p>
If you are around the vicinity, do feel free to drop by and catch up.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3ae671c3-af70-4e23-94b0-496f59db28a4" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Speaking in OASIS Open Standards Day (OASIS OSD) 2005</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,3ae671c3-af70-4e23-94b0-496f59db28a4.aspx</guid>
      <link>http://www.softwaremaker.net/blog/SpeakingInOASISOpenStandardsDayOASISOSD2005.aspx</link>
      <pubDate>Wed, 05 Oct 2005 00:52:22 GMT</pubDate>
      <description>&lt;p&gt;
Another speaking assignment that landed at my desk is for me to talk about "Web Services
Security: How to track along the Security Standards Jungle" on the 21 October 2005
&lt;/p&gt;
&lt;p&gt;
Somehow, I tend to attact the dry topics &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;.
This event is owned by &lt;a href="http://www.oasis-open.org" target="_blank"&gt;OASIS&lt;/a&gt; and &lt;a href="http://www.xmlone.org/" target=_blank&gt;XMLOne
Usergroup&lt;/a&gt;. More information can be found &lt;a href="http://www.xmlone.org/oasis-event.htm" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
If you are around the vicinity, do feel free to drop by and catch up.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3ae671c3-af70-4e23-94b0-496f59db28a4" /&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>Community;Presentations;WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=052f268e-a203-4a97-959d-f105de4b6118</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,052f268e-a203-4a97-959d-f105de4b6118.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I received my Certified Web Services Professional (CWSP) Certificate today in an official
business ceremony. I have known this for some time but this is the first time it was
made known to the public in an <a href="http://www.ida.gov.sg" target="_blank">Infocomm
Development Authority of Singapore</a> (IDA) Weave Event. I am one of only 8 people
who are in the pioneering batch to receive this certificate. The other 7 people come
from technology vendors such as <a href="http://www.sun.com" target="_blank">SUN Microsystems</a>, <a href="http://www.ibm.com" target="_blank">IBM</a>, <a href="http://www.softwareag.com" target="_blank">Software-AG</a> and
members of the tertiary educations of higher learning academia.
</p>
        <p>
More on the CWSP:
</p>
        <p>
The CWSP is announced during XMLAsia 2003 and the Framework is developed
jointly by IDA, the <a href="http://www.nicc.org.sg" target="_blank">National Infocomm
Competency Centre (NICC)</a>, <a href="http://www.sitf.org.sg" target="_blank">Singapore
Information Technology Federation (SiTF)</a> and <a href="http://www.xmlone.org/cwsp/" target="_blank">XMLOne
User Group (UG)</a>. It aims to develop Infocomm professionals and re-skill them with
Web Services competencies by meeting the career and skills-progression needs of Web
Services talent at all levels, ranging from Developers, Professionals, Architects
to Consultants.<br /></p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=052f268e-a203-4a97-959d-f105de4b6118" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Certified Web Services Professional</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,052f268e-a203-4a97-959d-f105de4b6118.aspx</guid>
      <link>http://www.softwaremaker.net/blog/CertifiedWebServicesProfessional.aspx</link>
      <pubDate>Tue, 04 Oct 2005 08:17:35 GMT</pubDate>
      <description>&lt;p&gt;
I received my Certified Web Services Professional (CWSP) Certificate today in an official
business ceremony. I have known this for some time but this is the first time it was
made known to the public in an &lt;a href="http://www.ida.gov.sg" target=_blank&gt;Infocomm
Development Authority of Singapore&lt;/a&gt; (IDA) Weave Event. I am one of only 8 people
who are in the pioneering batch to receive this certificate. The other 7 people come
from technology vendors such as &lt;a href="http://www.sun.com" target=_blank&gt;SUN Microsystems&lt;/a&gt;, &lt;a href="http://www.ibm.com" target=_blank&gt;IBM&lt;/a&gt;, &lt;a href="http://www.softwareag.com" target=_blank&gt;Software-AG&lt;/a&gt; and
members of the tertiary educations of higher learning academia.
&lt;/p&gt;
&lt;p&gt;
More on the CWSP:
&lt;/p&gt;
&lt;p&gt;
The CWSP is announced&amp;nbsp;during&amp;nbsp;XMLAsia 2003 and the Framework is developed
jointly by IDA, the &lt;a href="http://www.nicc.org.sg" target=_blank&gt;National Infocomm
Competency Centre (NICC)&lt;/a&gt;, &lt;a href="http://www.sitf.org.sg" target=_blank&gt;Singapore
Information Technology Federation (SiTF)&lt;/a&gt; and &lt;a href="http://www.xmlone.org/cwsp/" target=_blank&gt;XMLOne
User Group (UG)&lt;/a&gt;. It aims to develop Infocomm professionals and re-skill them with
Web Services competencies by meeting the career and skills-progression needs of Web
Services talent at all levels, ranging from Developers, Professionals, Architects
to Consultants.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=052f268e-a203-4a97-959d-f105de4b6118" /&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>Announcements;Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=52091daf-294d-439d-8294-88fc40346d58</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,52091daf-294d-439d-8294-88fc40346d58.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://lists.oasis-open.org/archives/members/200507/msg00002.html" target="_blank">It
is about time</a>.<img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=52091daf-294d-439d-8294-88fc40346d58" /><br /><hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>OASIS WS-Security 1.1 is open for public review</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,52091daf-294d-439d-8294-88fc40346d58.aspx</guid>
      <link>http://www.softwaremaker.net/blog/OASISWSSecurity11IsOpenForPublicReview.aspx</link>
      <pubDate>Wed, 20 Jul 2005 22:38:17 GMT</pubDate>
      <description>&lt;a href="http://lists.oasis-open.org/archives/members/200507/msg00002.html" target=_blank&gt;It
is about time&lt;/a&gt;.&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=52091daf-294d-439d-8294-88fc40346d58" /&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>WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=3de723b2-8e23-4fa3-8e2f-359c0a6c9b44</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,3de723b2-8e23-4fa3-8e2f-359c0a6c9b44.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have been following the exchanges between <a href="http://savas.parastatidis.name/" target="_blank">Savas</a>, <a href="http://jim.webber.name/" target="_blank">Jim
Webber</a>, and Michi Henning <a href="http://jim.webber.name/2005/06/23/dbeede6f-4745-443a-bed3-3a556fcd3a36.aspx#ac06010a-8247-411a-b07a-278df15106e0" target="_blank">here</a> and <a href="http://savas.parastatidis.name/2005/07/03/f52bed61-6dd0-4c08-8b54-22987a2f1468.aspx" target="_blank">here</a>.
There are more links but I will leave it up to the interested reader to use a <a href="http://www.xfront.com/REST-Web-Services.html" target="_blank">RESTful
approach</a> to refer to those resources from the above 2 links. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /></p>
        <p>
To be honest, this has been piped over the newsgroups, forums, conferences, etc for
some time now and it is really nothing interesting to debate about, really.
</p>
        <p>
All this noise has led to a lot of <a href="http://en.wikipedia.org/wiki/FUD" target="_blank">FUD</a> in
the field and I get a constant barrage of questions in any of the technology conferences
I speak in or attend. I work in the fields out there and therefore I tend to approach
technology unlike that of academics, trainers or vendors. I do what clients want in
the most efficient way (<em>read:cost_and_resource-effective</em>) possible. I have
met a few people from academics as well as from the product vendors who entered
the field thinking that just because they can point out which exact page number explains
the ds:SignedInfo in _WS-Security Specs_, they can convince and conquer the field
and have every single customer out there upgrade their existing technological infrastructure
every 6 years.
</p>
        <p>
Well, the Mainfraimes, the <a href="http://www.webopedia.com/TERM/C/CICS.html" target="_blank">CICS</a> and
the <a href="http://www.answers.com/topic/cobol" target="_blank">COBOL</a> wonks are
still out there. Still making a lot of money for its vendors and service providers. People
are still driving <a href="http://www.urbandictionary.com/define.php?term=lada" target="_blank">Lada</a>s
and these legacy will be there for some time, probably a long long time.
</p>
        <p>
We get a lot of younER developers who are very confused with all barrage of technologies
out there and sometimes people on the field (which means customers as well) get
the short end of the stick when these developers use the wrong technology in
the different parts of the technical solution. So, yes, some of the stuff you read
in <a href="http://thedailywtf.com/" target="_blank">the Daily WTF</a> is not ficticious.
</p>
        <p>
Sometimes, when I come across comments like these here from Savas's blog <a href="http://savas.parastatidis.name/2005/07/04/76affcec-2a1f-4090-b3e5-66ab76be73f8.aspx" target="_blank">here</a>:
</p>
        <p>
          <em>
            <font color="#808080">&gt; Microsoft is betting on SOAP and made it a key part
of its distributed computing platform, not DCOM.</font>
          </em>
        </p>
        <p>
          <em>
            <font color="#808080">Betting on SOAP? Hmmm... .NET remoting does not use SOAP.
It uses a binary protocol for performance reasons. So, I'm not sure that Microsoft
are "betting on SOAP". They certainly are not for their .NET remoting protocol. And
DCOM failed because it could not be made to scale, due to its misguided garbage collection
idea. And because DCOM, amazing as that may sound, was even more complex than CORBA.</font>
          </em>
        </p>
        <p>
Somehow, I either feel that I still dont get the picture or that irrationality is
clouding good judgement (still).
</p>
        <p>
Of course, .NET Remoting doesnt use SOAP. In fact, it used to and is <a href="http://blogs.msdn.com/mattavis/archive/2004/08/23/219200.aspx" target="_blank">deprecated</a> for
good reasons. It is a distributed <strong><em>object</em></strong> technology which implies
implicit method invocation. SOAP is not a distributed object technology. It is all
about services, all about standard schemas, being explicit in design and yes, it also
means dispatching these XML documents on a "hopeless transport" or the Lada of the
network protocol today. You cannot compare them just like you cannot compare the performance
of objects and services.
</p>
        <p>
Is this the best we can do ? Of course NOT. Should we all dump our existing heap
of scrap metal in our garage and get the shiniest and fastest aluminium today ? Of
course. Are we going to empty our bank account, forfeit and compensate on our current
loan arrangments to do it ? NO, NOPE, NADA ... This is a just a fact that
we have to deal with.
</p>
        <p>
Having said that, to me, both sets of distributed technologies will have its place
to stay, regardless of what the vendors say to sell more and the trainers sell to
teach more. Each have its place and their merits tend to show up best if used
and deployed wisely in the different layers, tiers and boundaries of a decent, usable
and viable solution. When I say Solution, I mean an entire composition of different
new and old systems that services a business program, initiative and ultimately a
goal. Isnt that what we are building systems for in the first place or have
I totally lost my mind and lost track of who my paymaster is ? Dont get me wrong,
progress is not possible without making full proof and implementations of the latest
rocket science or theories. But Progress can be measured in many ways. To most people,
progress is measured by how they can make legacy or existing technologies and architetures
last and endure given the rapidly evolving set of standards, protocols and environments
and how fast they can go home and spend time with their families as age increases
and <a href="http://www.webopedia.com/TERM/T/TTL.html" target="_blank">TTL</a> declines.
</p>
        <p>
COM+, DCOM, .NET Remoting is something we use very frequently on the field, and for
good reasons too. I am known to be a <a href="http://www.w3.org/TR/soap/" target="_blank">(W3C)
SOAP</a> Wonk BUT I will not give them up easily within the innards of my system and
I will use SOAP for the reasons it was designed for. In fact, to me, one
of the most important features in SOAP is the <strong><em>@role</em></strong> (<strong><em>@actor</em></strong>)
and the <strong><em>@mustUnderstand</em></strong>. Or else, I would just stick with
just plain old XML.
</p>
        <p>
Is Microsoft betting on SOAP ? You bet, and so is the entire industry. It is a well
known fact that while it is simplistic in design (in fact, this is one of the wierd
specification that becomes simpler as the newer iteration evolve. Let hope it remains
this way), getting across-the-board agreement is the costly element. In fact, it took
5 years from the original design meeting and prototype to become an “official” specification
and it (SOAP 1.1) is still not an official W3C Submission. The cost to each participating
organization easily crosses several million USD. The rough estimates to putting the
final WS-* specs to bed (if there is such a thing) would easily be more than 20 million
USD.
</p>
        <p>
Just like life, in the field of software engineering, compromise is something we need
to work with. I once had a straight-through exhaust pipe the circumference of a toilet
bowl fitted underneath my car as well as a wide-open air filter underneath the car
bonnet. After 3 months, I couldnt deal with the generated noise as well as the
(less-dense) hot air the air cone was taking in from all angles so I dumped both
of them. While it may take me slightly longer (by a few seconds, perhaps) to
reach the market to buy groceries, the brat in the younger me learnt to deal
with it. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /></p>
        <p>
While, I have my own ideas on the Request/Reply MEP, RPC, Document-Literal Messaging,
etc and I like to share my research and thoughts with some of the brightest minds
in the industry over a hot cup of Java, it is not something I lose sleep or sweat
about. It just serves to keep my sanity in check when I still have to deal with OLE
and VB3 issues today and it does make good conversation with some of the most intelligent
geeks out there.
</p>
        <p>
Sometimes, I feel the point of technology is lost when people argue over stuff like
that. To these people, I recommend a good classic read: <a href="http://www.amazon.com/exec/obidos/tg/sim-explorer/explore-items/-/0679745408/0/101/1/none/purchase/ref%3Dpd%5Fsxp%5Fr0/102-1223873-2763357" target="_blank">Technopoly:
The surrender of Culture to Technology by Neil Postman</a></p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3de723b2-8e23-4fa3-8e2f-359c0a6c9b44" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>The irrationality behind Technical Arguments</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,3de723b2-8e23-4fa3-8e2f-359c0a6c9b44.aspx</guid>
      <link>http://www.softwaremaker.net/blog/TheIrrationalityBehindTechnicalArguments.aspx</link>
      <pubDate>Thu, 07 Jul 2005 04:40:24 GMT</pubDate>
      <description>&lt;p&gt;
I have been following the exchanges between &lt;a href="http://savas.parastatidis.name/" target=_blank&gt;Savas&lt;/a&gt;, &lt;a href="http://jim.webber.name/" target=_blank&gt;Jim
Webber&lt;/a&gt;, and Michi Henning &lt;a href="http://jim.webber.name/2005/06/23/dbeede6f-4745-443a-bed3-3a556fcd3a36.aspx#ac06010a-8247-411a-b07a-278df15106e0" target=_blank&gt;here&lt;/a&gt;&amp;nbsp;and &lt;a href="http://savas.parastatidis.name/2005/07/03/f52bed61-6dd0-4c08-8b54-22987a2f1468.aspx" target=_blank&gt;here&lt;/a&gt;.
There are more links but I will leave it up to the interested reader to use a &lt;a href="http://www.xfront.com/REST-Web-Services.html" target=_blank&gt;RESTful
approach&lt;/a&gt; to refer to those resources from the above 2 links. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
To be honest, this has been piped over the newsgroups, forums, conferences, etc for
some time now and it is really nothing interesting to debate about, really.
&lt;/p&gt;
&lt;p&gt;
All this noise has led to a lot of &lt;a href="http://en.wikipedia.org/wiki/FUD" target=_blank&gt;FUD&lt;/a&gt;&amp;nbsp;in
the field and I get a constant barrage of questions in any of the technology conferences
I speak in or attend. I work in the fields out there and therefore I tend to approach
technology unlike that of academics, trainers or vendors. I do what clients want in
the most efficient way (&lt;em&gt;read:cost_and_resource-effective&lt;/em&gt;) possible. I have
met a few people from academics&amp;nbsp;as well as from the product vendors who entered
the field thinking that just because they can point out which exact page number explains
the ds:SignedInfo in&amp;nbsp;_WS-Security Specs_, they can convince and conquer the field
and have every single customer out there upgrade their existing technological infrastructure
every 6 years.
&lt;/p&gt;
&lt;p&gt;
Well, the Mainfraimes, the &lt;a href="http://www.webopedia.com/TERM/C/CICS.html" target=_blank&gt;CICS&lt;/a&gt; and
the &lt;a href="http://www.answers.com/topic/cobol" target=_blank&gt;COBOL&lt;/a&gt; wonks are
still out there. Still making a lot of money for its vendors and service providers.&amp;nbsp;People
are still driving &lt;a href="http://www.urbandictionary.com/define.php?term=lada" target=_blank&gt;Lada&lt;/a&gt;s
and these legacy will be there for some time, probably a long long time.
&lt;/p&gt;
&lt;p&gt;
We get a lot of younER developers who are very confused with all barrage of technologies
out there&amp;nbsp;and sometimes people on the field (which means customers as well) get
the short end of the stick&amp;nbsp;when these developers use the wrong technology in
the different parts of the technical solution. So, yes, some of the stuff you read
in &lt;a href="http://thedailywtf.com/" target=_blank&gt;the Daily WTF&lt;/a&gt; is not ficticious.
&lt;/p&gt;
&lt;p&gt;
Sometimes, when I come across comments like these here from Savas's blog &lt;a href="http://savas.parastatidis.name/2005/07/04/76affcec-2a1f-4090-b3e5-66ab76be73f8.aspx" target=_blank&gt;here&lt;/a&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color=#808080&gt;&amp;gt; Microsoft is betting on SOAP and made it a key part of
its distributed computing platform, not DCOM.&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color=#808080&gt;Betting on SOAP? Hmmm... .NET remoting does not use SOAP.
It uses a binary protocol for performance reasons. So, I'm not sure that Microsoft
are "betting on SOAP". They certainly are not for their .NET remoting protocol. And
DCOM failed because it could not be made to scale, due to its misguided garbage collection
idea. And because DCOM, amazing as that may sound, was even more complex than CORBA.&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Somehow, I either feel that I still dont get the picture or that irrationality is
clouding good judgement (still).
&lt;/p&gt;
&lt;p&gt;
Of course, .NET Remoting doesnt use SOAP. In fact, it used to and is &lt;a href="http://blogs.msdn.com/mattavis/archive/2004/08/23/219200.aspx" target=_blank&gt;deprecated&lt;/a&gt; for
good reasons. It is a distributed &lt;strong&gt;&lt;em&gt;object&lt;/em&gt;&lt;/strong&gt; technology which&amp;nbsp;implies
implicit method invocation. SOAP is not a distributed object technology. It is all
about services, all about standard schemas, being explicit in design and yes, it also
means dispatching these XML documents on a "hopeless transport" or the Lada of the
network protocol today. You cannot compare them just like you cannot compare the performance
of objects and services.
&lt;/p&gt;
&lt;p&gt;
Is this the best we can do ?&amp;nbsp;Of course NOT. Should we all dump our existing heap
of scrap metal in our garage and get the shiniest and fastest aluminium today ? Of
course. Are we going to empty our bank account, forfeit and compensate on our current
loan arrangments to do it ?&amp;nbsp;NO, NOPE, NADA ...&amp;nbsp;This is a just a fact&amp;nbsp;that
we have to deal with.
&lt;/p&gt;
&lt;p&gt;
Having said that, to me, both sets of distributed technologies will have its place
to stay, regardless of what the vendors say to sell more and the trainers sell to
teach&amp;nbsp;more. Each have its place and their merits tend to show up best if used
and deployed wisely in the different layers, tiers and boundaries of a decent, usable
and viable solution. When I say Solution, I mean an entire composition of different
new and old systems that services a business program, initiative and ultimately a
goal.&amp;nbsp;Isnt that what we are building systems&amp;nbsp;for in the first place or have
I totally lost my mind and lost track of who my paymaster is ? Dont get me wrong,
progress is not possible without making full proof and implementations of the latest
rocket science or theories. But Progress can be measured in many ways. To most people,
progress is measured by how they can make legacy or existing technologies and architetures
last and endure given the rapidly evolving set of standards, protocols and environments
and how fast they can go home and spend time with their families as age increases
and &lt;a href="http://www.webopedia.com/TERM/T/TTL.html" target=_blank&gt;TTL&lt;/a&gt; declines.
&lt;/p&gt;
&lt;p&gt;
COM+, DCOM, .NET Remoting is something we use very frequently on the field, and for
good reasons too. I am known to be a&amp;nbsp;&lt;a href="http://www.w3.org/TR/soap/" target="_blank"&gt;(W3C)
SOAP&lt;/a&gt; Wonk BUT I will not give them up easily within the innards of my system and
I will use SOAP for the reasons it&amp;nbsp;was designed&amp;nbsp;for. In fact, to me, one
of the most important features in SOAP is the &lt;strong&gt;&lt;em&gt;@role&lt;/em&gt;&lt;/strong&gt; (&lt;strong&gt;&lt;em&gt;@actor&lt;/em&gt;&lt;/strong&gt;)
and the &lt;strong&gt;&lt;em&gt;@mustUnderstand&lt;/em&gt;&lt;/strong&gt;. Or else, I would&amp;nbsp;just stick&amp;nbsp;with
just plain old XML.
&lt;/p&gt;
&lt;p&gt;
Is Microsoft betting on SOAP ? You bet, and so is the entire industry. It is a well
known fact that while it is simplistic in design (in fact, this is one of the wierd
specification that becomes simpler as the newer iteration evolve. Let hope it remains
this way), getting across-the-board agreement is the costly element. In fact, it took
5 years from the original design meeting and prototype to become an “official” specification
and it (SOAP 1.1) is still not an official W3C Submission. The cost to each participating
organization easily crosses several million USD. The rough estimates to putting the
final WS-* specs to bed (if there is such a thing) would easily be more than 20 million
USD.
&lt;/p&gt;
&lt;p&gt;
Just like life, in the field of software engineering, compromise is something we need
to work with. I once had a straight-through exhaust pipe the circumference of a toilet
bowl fitted underneath my car as well as a wide-open air filter underneath the car
bonnet. After 3 months,&amp;nbsp;I couldnt deal with the generated noise as well as the
(less-dense) hot air the air cone was taking in from all angles so I dumped&amp;nbsp;both
of them. While it may take me slightly longer (by a few seconds, perhaps)&amp;nbsp;to
reach the market to buy groceries,&amp;nbsp;the brat in the younger me learnt to deal
with it. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
While, I have my own ideas on the Request/Reply MEP, RPC, Document-Literal Messaging,
etc&amp;nbsp;and I like to share my research and thoughts with some of the brightest minds
in the industry over a hot cup of Java, it is not something I lose sleep or sweat
about. It just serves to keep my sanity in check when I still have to deal with OLE
and VB3 issues today and it does make good conversation with some of the most intelligent
geeks out there.
&lt;/p&gt;
&lt;p&gt;
Sometimes, I feel the point of technology is lost when people argue over stuff like
that. To these people, I recommend a good classic read: &lt;a href="http://www.amazon.com/exec/obidos/tg/sim-explorer/explore-items/-/0679745408/0/101/1/none/purchase/ref%3Dpd%5Fsxp%5Fr0/102-1223873-2763357" target=_blank&gt;Technopoly:
The surrender of Culture to Technology by Neil Postman&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=3de723b2-8e23-4fa3-8e2f-359c0a6c9b44" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
© William Tay 2012 | Swinging Technologist 
&lt;br /&gt;
&lt;a href="http://www.softwaremaker.net/blog"&gt;http://www.softwaremaker.net/blog&lt;/a&gt;</description>
      <category>Random Musings;Service-Orientation;Software Architectures;Technology;XML Services</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=315afe18-1b3a-41ca-93b4-d0c2262331fb</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,315afe18-1b3a-41ca-93b4-d0c2262331fb.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My own little test utility tool - <a href="http://www.softwaremaker.net/blog/PermaLink,guid,7deab38b-92af-446b-b7d8-6aa901007130.aspx" target="_blank">Manual
SOAP Post</a> has been seeing a fair number of downloads and I have received some
good compliments on it as well as good feedback.
</p>
        <p>
Actually, it is really nothing to shout about. It is one of those tool things that
people have been using under the hood and therefore taken for granted. Since
I have been doing a fair amount of work in terms of wire-interoperability, I figured that
an abstraction (or proxy)-neutral tool would be good from a common point. So,
I am being explicit in crafting out a message (bypassing the various abstractions
that <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebservicesprotocolssoaphttpclientprotocolclasstopic.asp" target="_blank">SOAPHttpClientProtocol</a>, <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wseref/html/T_Microsoft_Web_Services2_WebServicesClientProtocol.asp" target="_blank">WebServicesClientProtocol</a>, <a href="http://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/indigo_con/html/d780af9f-73c5-42db-9e52-077a5e4de7fe.asp" target="_blank">ServiceModel.ProxyBase</a> brings), it
would be good to send the same <a href="http://www.w3.org/TR/soap/" target="_blank">(W3C)
SOAP</a> message to different endpoints running different implementations and platforms
and see how interoperable is that message from a single console. It is also a great
tool for testing / troubleshooting a production environment.
</p>
        <p>
This new version just consist of a couple of minor enhancements (due to public feedback):
</p>
        <ol>
          <li>
The Windows Form application can be re-sized now. <img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif" />.
I had missed that out in the earlier version. 
</li>
          <li>
Explicit inclusion of other HTTP Headers can be added into the transmission of the
SOAP Message. 
</li>
          <li>
SSL / HTTPS Testing should work fine now. Because this is a test tool, I have set
it to trust all X509 incoming certificates. So, use it ONLY for testing within a trusted
application domain. 
</li>
          <li>
Timeout can be set in the configuration file now.</li>
        </ol>
        <p>
As I am doing a fair amount of work with <a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank">Indigo</a>,
I discovered that version 1.0 of Manual SOAP Post cannot dispatch a properly-formed
and valid message to an Indigo endpoint that had an implementation of the basicProfileBinding
with FormatMode=ContractFormatMode.XMLSerializer. After spending an insane amount
of time spent digging into the HTTPHeaders in the wee hours of the morning, I found
that the Indigo is very anal with the <a href="http://www.google.com.sg/search?hl=en&amp;lr=&amp;oi=defmore&amp;q=define:charset" target="_blank">charset</a>.
Specifically, the header of Content-Type: text/xml is not enough. It was good enough
for an ASMX and a <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 2.0 endpoint. But Indigo wanted more. So, I had to
include the charset=utf-8 into the media-type before it would open its doors to talk
to you.
</p>
        <p>
This is now fixed in this 1.1 version of the Manual SOAP Post. You can explicity add
extra headers into the transmission in the configuration file which renders it slightly
more extensible.
</p>
        <p>
If you are interested, get it <a href="http://www.softwaremaker.net/downloadsvcs/dsManualSOAPPost.asp" target="_blank">here</a> and
Enjoy and keep those feedback and criticisms coming.
</p>
        <p>
          <strong>
            <font color="#ff0000">
              <em>[Author Note:] Please uninstall previous versions
of Manual SOAP Post before installing the new version. Thank you.</em>
            </font>
          </strong>
        </p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=315afe18-1b3a-41ca-93b4-d0c2262331fb" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Enhanced version of my Manual SOAP Post is available</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,315afe18-1b3a-41ca-93b4-d0c2262331fb.aspx</guid>
      <link>http://www.softwaremaker.net/blog/EnhancedVersionOfMyManualSOAPPostIsAvailable.aspx</link>
      <pubDate>Sat, 04 Jun 2005 06:12:18 GMT</pubDate>
      <description>&lt;p&gt;
My own little test utility tool&amp;nbsp;- &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,7deab38b-92af-446b-b7d8-6aa901007130.aspx" target=_blank&gt;Manual
SOAP Post&lt;/a&gt; has been seeing a fair number of downloads and I have received some
good compliments on it as well as good feedback.
&lt;/p&gt;
&lt;p&gt;
Actually, it is really nothing to shout about. It is one of those tool things that
people have been using under the hood and therefore taken for granted.&amp;nbsp;Since
I have been doing a fair amount of work in terms of wire-interoperability, I figured&amp;nbsp;that
an abstraction (or proxy)-neutral tool would be good from a common&amp;nbsp;point. So,
I am being explicit in crafting out a message (bypassing the various abstractions
that &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebservicesprotocolssoaphttpclientprotocolclasstopic.asp" target=_blank&gt;SOAPHttpClientProtocol&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wseref/html/T_Microsoft_Web_Services2_WebServicesClientProtocol.asp" target=_blank&gt;WebServicesClientProtocol&lt;/a&gt;, &lt;a href="http://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/indigo_con/html/d780af9f-73c5-42db-9e52-077a5e4de7fe.asp" target=_blank&gt;ServiceModel.ProxyBase&lt;/a&gt;&amp;nbsp;brings),&amp;nbsp;it
would&amp;nbsp;be good&amp;nbsp;to send the same &lt;a href="http://www.w3.org/TR/soap/" target="_blank"&gt;(W3C)
SOAP&lt;/a&gt; message to different endpoints running different implementations and platforms
and see how interoperable is that message from a single console. It is also a great
tool for testing / troubleshooting a production environment.
&lt;/p&gt;
&lt;p&gt;
This new version just consist of a couple of minor enhancements (due to public feedback):
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
The Windows Form application can be re-sized now. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif"&gt;.
I had missed that out in the earlier version. 
&lt;li&gt;
Explicit inclusion of other HTTP Headers can be added into the transmission of the
SOAP Message. 
&lt;li&gt;
SSL / HTTPS Testing should work fine now. Because this is a test tool, I have set
it to trust all X509 incoming certificates. So, use it ONLY for testing within a trusted
application domain. 
&lt;li&gt;
Timeout can be set in the configuration file now.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
As I am doing a fair amount of work with &lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank"&gt;Indigo&lt;/a&gt;,
I discovered that version 1.0 of Manual SOAP Post cannot dispatch a properly-formed
and valid message to an Indigo endpoint that had an implementation of the basicProfileBinding
with FormatMode=ContractFormatMode.XMLSerializer. After spending an insane amount
of time spent digging into the HTTPHeaders in the wee hours of the morning, I found
that the Indigo is very anal with the &lt;a href="http://www.google.com.sg/search?hl=en&amp;amp;lr=&amp;amp;oi=defmore&amp;amp;q=define:charset" target=_blank&gt;charset&lt;/a&gt;.
Specifically, the header of Content-Type: text/xml is not enough. It was good enough
for an ASMX and a &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 endpoint. But Indigo wanted more. So, I had to
include the charset=utf-8 into the media-type before it would open its doors to talk
to you.
&lt;/p&gt;
&lt;p&gt;
This is now fixed in this 1.1 version of the Manual SOAP Post. You can explicity add
extra headers into the transmission in the configuration file which renders it slightly
more extensible.
&lt;/p&gt;
&lt;p&gt;
If you are interested, get it &lt;a href="http://www.softwaremaker.net/downloadsvcs/dsManualSOAPPost.asp" target=_blank&gt;here&lt;/a&gt; and
Enjoy and keep those feedback and criticisms coming.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color=#ff0000&gt;&lt;em&gt;[Author Note:] Please uninstall previous versions
of Manual SOAP Post before installing the new version. Thank you.&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=315afe18-1b3a-41ca-93b4-d0c2262331fb" /&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>Community;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=d3a66c9e-9e3b-490c-8ccd-51fb067ab8d8</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,d3a66c9e-9e3b-490c-8ccd-51fb067ab8d8.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Fellow <a href="http://msdn.microsoft.com/isv/rd/default.aspx" target="_blank" title="Microsoft Regional Director">Microsoft
Regional Director</a> and a software legend, <a href="http://www.lhotka.net/WeBlog" target="_blank">Rocky
Lhotka</a> posted an interesting entry on Message-based WebMethod "overloading" <a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=2a5e2d14-3cf5-4cea-a296-24b894228f5d" target="_blank">here</a>.
</p>
        <p>
In it, he recommends (and I quote) that service methods use a request/response
or just request method signature: 
</p>
        <p>
          <font face="Georgia" color="#808080">
            <em>   response = f(request)</em>
          </font>
        </p>
        <p>
          <font face="Georgia" color="#808080">
            <em>or</em>
          </font>
        </p>
        <p>
          <font face="Georgia" color="#808080">
            <em>   f(request)</em>
          </font>
        </p>
        <p>
          <font face="Georgia" color="#808080">
            <em> "request" and "response" are both messages,
defined by a type or schema (with a little "s", not necessarily XSD).</em>
          </font>
        </p>
        <p>
          <font face="Georgia" color="#808080">
            <em>The actual procedure, f, is then implemented
as a Message Router, routing each call to an appropriate handler method depending
on the specific type of the request message.</em>
          </font>
        </p>
        <p>
I couldnt agree more. While easier to comprehend, the practice of passing parameters
to a Web Method call often sends the wrong messages across as <a href="http://www.w3.org/TR/soap/" target="_blank">(W3C)
SOAP</a> as just another RPC. Ultimately, if you have no idea and dont even want to
grok the innards of the <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlSerializationXmlSerializerClassTopic" target="_blank">XMLSerializer</a>,
you would really think you are passing method parameters across or worse, think that
you are ferrying objects across the wire.
</p>
        <p>
Therefore, I firmly believe that it is for the good of all if you explicity specify
that you are expecting a XMLDocument / XMLElement / XMLNode and you will dispatch
the same on your endpoint. What you do at your implementation (whether it is serializing from
a type to deserializing from one) is placed squarely at the mercy of the tools in
your hand or the knowledge in your head.
</p>
        <p>
With the current state of tools (or lack there-of) today, I sit on the same camp as <a href="http://pluralsight.com/blogs/aaron/default.aspx" target="_blank">Aaron
Skonnard</a> and <a href="http://weblogs.asp.net/cweyer/" target="_blank">Christian
Weyer</a> (plus others, I believe) as I believe firmly in the contract-first approach.
Good devs should dig what is going on as close to the wire as possible, <strong><em>at
least once</em></strong>. Then they can use all the wizards and helpers they want.
This will help them understand better what is going on if they should need to troubleshoot
later (leaky abstractions) or find other ways to improve performance.
</p>
        <p>
This is just something that my team and me here have gathered over the years esp when
I have got many developers out there working on the same solution offshore in different
countries.
</p>
        <p>
While I agree that not many people out there enjoy or want to grok the angle brackets
and that the lack of tools out there is hugely to be blamed, tools make a productive
developer but not necessarily a proficient one.
</p>
        <p>
Until today, I still come across developers that still think Web Services are still
about transferring an object across the wire. Having terms like "Web References" and
"proxies", even deemed to be more abstract and dev-friendly, does potray the wrong
ideas across.
</p>
        <p>
I have always recommended young<em>er </em>developers who are interested in learning
about Web Services / ASMX and SOAP to try out the (<em>just-now-defunct</em>) <a href="http://msdn.microsoft.com/webservices/building/soaptk/default.aspx" target="_blank">Microsoft
SOAP Toolkit</a> first before moving on. I find that to be a great interesting
way to learn about XML SOAP Services as abstractions are kept to a minimum. Another
great SOAP Toolkit in the face of Microsoft's non-supporting stance of its own is <a href="http://www.pocketsoap.com/weblog/index.html" target="_blank">Simon
Fell</a>'s <a href="http://www.pocketsoap.com/" target="_blank">PocketSOAP</a>.
</p>
        <p>
Another fellow Regional Director, <a href="http://www.srtsolutions.com/public/blog/20574?model=user/myst/user-srt-corporate&amp;style=user/myst/srt-corporate&amp;scheme=green" target="_blank">Bill
Wagner</a> (who authored an very impressive book "<a href="http://www.awprofessional.com/title/0321245660" target="_blank">Effective
C#</a>") posted his solution to Rocky's post <a href="http://www.srtsolutions.com/public/item/91025" target="_blank">here</a>. I
have used the same sort of approach that Bill had documented before and it is
good and does serve its purpose. However (<em>and please correct me if I am wrong</em>),
it bounds the message contracts and datatypes tightly to the WSDL. If I am going to
add a third Request / Response pair of classes, it will render my initial WSDL invalid
(unless of course, if I am willing to add an additional endpoint)
</p>
        <p>
I worked on a project before which specify that (newer) datatypes are to be added
in phases and therefore, we had to decouple the XSD from the WSDL (which is in accordance
with one of the <a href="http://devresource.hp.com/drc/slide_presentations/schemaWSDL/index.jsp" target="_blank">best
practice of WSDL Deployments</a> -- modular and the separation of concerns). Oh, by
the way, this is practiced in <a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank">Indigo</a>. 
</p>
        <p>
I don't know if there is a way to decouple the XSDs from the WSDL in VS2003 today.
Even if there is, I am guessing it is a difficult hack at best. So, what I did was
to create the XSDs for each datatype as they come along and do a XSD import in my
WSDL. At my message exchange contract, I used an <a href="http://www.xfront.com/ExtensibleContentModels.html" target="_blank">open
content type with xsd:any</a>. Thereafter, I author my own WSDL with the help of Christian's
and <a href="http://www.thinktecture.com/" target="_blank">Thinktecture</a>'s <a href="http://www.thinktecture.com/Resources/Software/WSContractFirst/default.html" target="_blank">WSContractFirst</a>.
Since the message and the datatype XSDs are all imported, the wsdl actually has a
small footprint now. With the wsdl /server switch, xsd:any becomes an XMLElement type.
For abstraction within my service, I changed it to an object in my implementation
detail.
</p>
        <p>
          <strong>
            <em>Note: .NET 1.1's WSDL.exe /server switch, in my mind, is still
fairly limited and comes with a couple of annoying things I didn't like BUT I will
expand this in detail later.</em>
          </strong>
        </p>
        <p>
[System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:softwaremaker-n<br />
et.swmstoreexchangemessages"]&gt; _<br />
Public Class Response<br />
  Public Result As Result<br />
End Class
</p>
        <p>
[System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:softwaremaker-n<br />
et.swmstoreexchangemessages")] _<br />
Public Class Result<br />
  [System.Xml.Serialization.XmlElement(ElementName:="Book",<br />
Type:=GetType(BookType),<br />
Namespace:="urn:softwaremaker-net.swmstoreextendedtypes"), _<br />
  System.Xml.Serialization.XmlElement(ElementName:="CD",<br />
Type:=GetType(CDType),<br />
Namespace:="urn:softwaremaker-net.swmstoreextendedtypes"), _<br />
  System.Xml.Serialization.XmlElement(ElementName:="Anything",<br />
Type:=GetType(AnyType),<br />
Namespace:="urn:softwaremaker-net.swmstoreextendedtypes")] _<br />
  Public Any As Object<br />
End Class
</p>
        <p>
  Public Function<br />
ProcessRequest([System.Xml.Serialization.XmlElementAttribute([Namespace]:="u<br />
rn:softwaremaker-net.swmstoreexchangemessages")] ByVal Request As Object) As [System.Xml.Serialization.XmlElementAttribute("Response",<br />
[Namespace]:="urn:softwaremaker-net.swmstoreexchangemessages")] Response<br />
   '...<br />
   End Function
</p>
        <p>
Once the consumer points to my wsdl (I turned off documentation of asmx by default),
all the XSDs are imported by VS2003 as well (and that is a good thing). The xsd:any
is still an XMLElement over at their end and we leave it as it is since we cannot
control what they do there. The consumer can choose to deal with the raw XML if they
want to OR do an xsd.exe imported.xsd /c and let the XMLSerializer do its (<em>limited</em>)
magic <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" />.
</p>
        <p>
In this sense, no matter how many more datatypes I add or remove, my wire-contract
remains the same. I just let the endpoints serialize / deserialize the open-content
xml (xsd:any). In my project I had mentioned earlier, I have one asmx endpoint servicing
multiple consumers each sending different messages that conforms to different XSDs
(For example, GroupA sends BookType and GroupB sends the CDType as well as a
GroupC next time that sends a type that is unknown to me today). The thing I need
to take care of is to send the appropriate datatype xsd to the appropriate groups
so they can serialize / deserialize into the appropriate types. As you can see from
the code snippet above, at my asmx, I will just add any new datatypes that come along.
</p>
        <p>
While, this may seem like too much compared to Bill's solution above, it was necessary
to decouple the datatypes from my wsdl in that project and the XSD Editor (codenamed:
daVinci ?) in VS.NET2003 was the best tool I had in hand at that time. Developers
are too comfortable with objects. This is obviously natural with the decade-long evolution
of Object-Orientation and the power of abstractions the OO tools and languages bring
today.
</p>
        <p>
However, other factors like time, extensibility, standardization make abstractions
expensive...and among others, these are all factors that make up the principles of
the move towards Service-Orientation. Now, if we have to make and designed services
to be explicit, this means that devs need to know they are explicity invoking a service
across the wire, how far can the tools go to hide all the plumbings and yet not hide
the fact that the service is <em>on the other side</em> and not just a mere shadow
copy of a <a href="http://www.devx.com/dotnet/Article/7002/0/page" target="_blank">remoting</a> object
that seems to reside on the same application domain.
</p>
        <p>
Will Service-Orientation fail to hit the mainstream because of this ? I dont know.
I guess only time will tell.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=d3a66c9e-9e3b-490c-8ccd-51fb067ab8d8" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Contract First: Message-based WebMethod "overloading"</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,d3a66c9e-9e3b-490c-8ccd-51fb067ab8d8.aspx</guid>
      <link>http://www.softwaremaker.net/blog/ContractFirstMessagebasedWebMethodOverloading.aspx</link>
      <pubDate>Thu, 05 May 2005 02:22:18 GMT</pubDate>
      <description>&lt;p&gt;
Fellow&amp;nbsp;&lt;a href="http://msdn.microsoft.com/isv/rd/default.aspx" target="_blank" title="Microsoft Regional Director"&gt;Microsoft
Regional Director&lt;/a&gt;&amp;nbsp;and a software legend, &lt;a href="http://www.lhotka.net/WeBlog" target=_blank&gt;Rocky
Lhotka&lt;/a&gt;&amp;nbsp;posted an interesting entry on Message-based WebMethod "overloading" &lt;a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=2a5e2d14-3cf5-4cea-a296-24b894228f5d" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
In it, he recommends&amp;nbsp;(and I quote) that service methods use a request/response
or just request method signature:&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Georgia color=#808080&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; response = f(request)&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Georgia color=#808080&gt;&lt;em&gt;or&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Georgia color=#808080&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; f(request)&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Georgia color=#808080&gt;&lt;em&gt;&amp;nbsp;"request" and "response" are both messages,
defined by a type or schema (with a little "s", not necessarily XSD).&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Georgia color=#808080&gt;&lt;em&gt;The actual procedure, f, is then implemented
as a Message Router, routing each call to an appropriate handler method depending
on the specific type of the request message.&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
I couldnt agree more. While easier to comprehend, the practice of passing parameters
to a Web Method call often sends the wrong messages across as &lt;a href="http://www.w3.org/TR/soap/" target="_blank"&gt;(W3C)
SOAP&lt;/a&gt; as just another RPC. Ultimately, if you have no idea and dont even want to
grok the innards of the &lt;a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlSerializationXmlSerializerClassTopic" target=_blank&gt;XMLSerializer&lt;/a&gt;,
you would really think you are passing method parameters across or worse, think that
you are ferrying objects across the wire.
&lt;/p&gt;
&lt;p&gt;
Therefore, I firmly believe that it is for the good of all if you explicity specify
that you are expecting a XMLDocument / XMLElement / XMLNode and you will dispatch
the same on your endpoint. What you do at your implementation (whether it is serializing&amp;nbsp;from
a type to deserializing from one) is placed squarely at the mercy of the tools in
your hand or the knowledge in your head.
&lt;/p&gt;
&lt;p&gt;
With the current state of tools (or lack there-of) today, I sit on the same camp as &lt;a href="http://pluralsight.com/blogs/aaron/default.aspx" target=_blank&gt;Aaron
Skonnard&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/cweyer/" target=_blank&gt;Christian
Weyer&lt;/a&gt; (plus others, I believe) as I believe firmly in the contract-first approach.
Good devs should dig what is going on as close to the wire as possible, &lt;strong&gt;&lt;em&gt;at
least once&lt;/em&gt;&lt;/strong&gt;. Then they can use all the wizards and helpers they want.
This will help them understand better what is going on if they should need to troubleshoot
later (leaky abstractions) or find other ways to improve performance.
&lt;/p&gt;
&lt;p&gt;
This is just something that my team and me here have gathered over the years esp when
I have got many developers out there working on the same solution offshore in different
countries.
&lt;/p&gt;
&lt;p&gt;
While I agree that not many people out there enjoy or want to grok the angle brackets
and that the lack of tools out there is hugely to be blamed, tools make a productive
developer but not necessarily a proficient one.
&lt;/p&gt;
&lt;p&gt;
Until today, I still come across developers that still think Web Services are still
about transferring an object across the wire. Having terms like "Web References" and
"proxies", even deemed to be more abstract and dev-friendly, does potray the wrong
ideas across.
&lt;/p&gt;
&lt;p&gt;
I have always recommended young&lt;em&gt;er &lt;/em&gt;developers who are interested in learning
about Web Services / ASMX and SOAP to try out the (&lt;em&gt;just-now-defunct&lt;/em&gt;) &lt;a href="http://msdn.microsoft.com/webservices/building/soaptk/default.aspx" target=_blank&gt;Microsoft
SOAP Toolkit&lt;/a&gt;&amp;nbsp;first before moving on. I find that to be a great interesting
way to learn about XML SOAP Services as abstractions are kept to a minimum. Another
great SOAP Toolkit in the face of Microsoft's non-supporting stance of its own is &lt;a href="http://www.pocketsoap.com/weblog/index.html" target=_blank&gt;Simon
Fell&lt;/a&gt;'s &lt;a href="http://www.pocketsoap.com/" target=_blank&gt;PocketSOAP&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Another fellow Regional Director, &lt;a href="http://www.srtsolutions.com/public/blog/20574?model=user/myst/user-srt-corporate&amp;amp;style=user/myst/srt-corporate&amp;amp;scheme=green" target=_blank&gt;Bill
Wagner&lt;/a&gt;&amp;nbsp;(who authored an very impressive book "&lt;a href="http://www.awprofessional.com/title/0321245660" target=_blank&gt;Effective
C#&lt;/a&gt;") posted his solution to Rocky's post &lt;a href="http://www.srtsolutions.com/public/item/91025" target=_blank&gt;here&lt;/a&gt;.&amp;nbsp;I
have used the same sort of approach that Bill had documented&amp;nbsp;before and it is
good and does serve its purpose. However (&lt;em&gt;and please correct me if I am wrong&lt;/em&gt;),
it bounds the message contracts and datatypes tightly to the WSDL. If I am going to
add a third Request / Response pair of classes, it will render my initial WSDL invalid
(unless of course, if I am willing to add an additional endpoint)
&lt;/p&gt;
&lt;p&gt;
I worked on a project before which specify that (newer) datatypes are to be added
in phases and therefore, we had to decouple the XSD from the WSDL (which is in accordance
with one of the &lt;a href="http://devresource.hp.com/drc/slide_presentations/schemaWSDL/index.jsp" target=_blank&gt;best
practice of WSDL Deployments&lt;/a&gt; -- modular and the separation of concerns). Oh, by
the way, this is practiced in &lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank"&gt;Indigo&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
I don't know if there is a way to decouple the XSDs from the WSDL in VS2003 today.
Even if there is, I am guessing it is a difficult hack at best. So, what I did was
to create the XSDs for each datatype as they come along and do a XSD import in my
WSDL. At my message exchange contract, I used an &lt;a href="http://www.xfront.com/ExtensibleContentModels.html" target=_blank&gt;open
content type with xsd:any&lt;/a&gt;. Thereafter, I author my own WSDL with the help of Christian's
and &lt;a href="http://www.thinktecture.com/" target=_blank&gt;Thinktecture&lt;/a&gt;'s &lt;a href="http://www.thinktecture.com/Resources/Software/WSContractFirst/default.html" target=_blank&gt;WSContractFirst&lt;/a&gt;.
Since the message and the datatype XSDs are all imported, the wsdl actually has a
small footprint now. With the wsdl /server switch, xsd:any becomes an XMLElement type.
For abstraction within my service, I changed it to an object in my implementation
detail.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Note:&amp;nbsp;.NET 1.1's&amp;nbsp;WSDL.exe /server switch, in my mind, is still
fairly limited and comes with a couple of annoying things I didn't like BUT I will
expand this in detail later.&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
[System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:softwaremaker-n&lt;br&gt;
et.swmstoreexchangemessages"]&amp;gt; _&lt;br&gt;
Public Class Response&lt;br&gt;
&amp;nbsp; Public Result As Result&lt;br&gt;
End Class
&lt;/p&gt;
&lt;p&gt;
[System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:softwaremaker-n&lt;br&gt;
et.swmstoreexchangemessages")] _&lt;br&gt;
Public Class Result&lt;br&gt;
&amp;nbsp; [System.Xml.Serialization.XmlElement(ElementName:="Book",&lt;br&gt;
Type:=GetType(BookType),&lt;br&gt;
Namespace:="urn:softwaremaker-net.swmstoreextendedtypes"), _&lt;br&gt;
&amp;nbsp; System.Xml.Serialization.XmlElement(ElementName:="CD",&lt;br&gt;
Type:=GetType(CDType),&lt;br&gt;
Namespace:="urn:softwaremaker-net.swmstoreextendedtypes"), _&lt;br&gt;
&amp;nbsp; System.Xml.Serialization.XmlElement(ElementName:="Anything",&lt;br&gt;
Type:=GetType(AnyType),&lt;br&gt;
Namespace:="urn:softwaremaker-net.swmstoreextendedtypes")] _&lt;br&gt;
&amp;nbsp; Public Any As Object&lt;br&gt;
End Class
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp; Public Function&lt;br&gt;
ProcessRequest([System.Xml.Serialization.XmlElementAttribute([Namespace]:="u&lt;br&gt;
rn:softwaremaker-net.swmstoreexchangemessages")] ByVal Request As Object) As [System.Xml.Serialization.XmlElementAttribute("Response",&lt;br&gt;
[Namespace]:="urn:softwaremaker-net.swmstoreexchangemessages")] Response&lt;br&gt;
&amp;nbsp;&amp;nbsp; '...&lt;br&gt;
&amp;nbsp;&amp;nbsp; End Function
&lt;/p&gt;
&lt;p&gt;
Once the consumer points to my wsdl (I turned off documentation of asmx by default),
all the XSDs are imported by VS2003 as well (and that is a good thing). The xsd:any
is still an XMLElement over at their end and we leave it as it is since we cannot
control what they do there. The consumer can choose to deal with the raw XML if they
want to OR do an xsd.exe imported.xsd /c and let the XMLSerializer do its (&lt;em&gt;limited&lt;/em&gt;)
magic &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
In this sense, no matter how many more datatypes I add or remove, my wire-contract
remains the same. I just let the endpoints serialize / deserialize the open-content
xml (xsd:any). In my project I had mentioned earlier, I have one asmx endpoint servicing
multiple consumers each sending different messages that conforms to different XSDs
(For example, GroupA sends BookType and GroupB sends the CDType as&amp;nbsp;well as&amp;nbsp;a
GroupC next time that sends a type that is unknown to me today). The thing I need
to take care of is to send the appropriate datatype xsd to the appropriate groups
so they can serialize / deserialize into the appropriate types. As you can see from
the code snippet above, at my asmx, I will just add any new datatypes that come along.
&lt;/p&gt;
&lt;p&gt;
While, this may seem like too much compared to Bill's solution above, it was necessary
to decouple the datatypes from my wsdl in that project and the XSD Editor (codenamed:
daVinci ?) in VS.NET2003 was the best tool I had in hand at that time. Developers
are too comfortable with objects. This is obviously natural with the decade-long evolution
of Object-Orientation and the power of abstractions the OO tools and languages bring
today.
&lt;/p&gt;
&lt;p&gt;
However, other factors like time, extensibility, standardization make abstractions
expensive...and among others, these are all factors that make up the principles of
the move towards Service-Orientation. Now, if we have to make and designed services
to be explicit, this means that devs need to know they are explicity invoking a service
across the wire, how far can the tools go to hide all the plumbings and yet not hide
the fact that the service is &lt;em&gt;on the other side&lt;/em&gt; and not just a mere&amp;nbsp;shadow
copy of a &lt;a href="http://www.devx.com/dotnet/Article/7002/0/page" target=_blank&gt;remoting&lt;/a&gt; object
that seems to reside on the same application domain.
&lt;/p&gt;
&lt;p&gt;
Will Service-Orientation fail to hit the mainstream because of this ? I dont know.
I guess only time will tell.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=d3a66c9e-9e3b-490c-8ccd-51fb067ab8d8" /&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>Service-Orientation;Software Architectures;Software Development;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=2f80d3cd-f787-4220-a052-b959f779a27c</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,2f80d3cd-f787-4220-a052-b959f779a27c.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ian Yates interviewed me for what turns me on for MSDN Magazine SEA Edition. Read
about it <a href="http://www.softwaremaker.net/blog/content/binary/MSDN_5_SEA_p06-07_hires.pdf" target="_blank">here</a>. 
<br /><span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: Verdana; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><strong><font color="#000000">©
MSDN Magazine SEA Edition</font></strong></span></p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=2f80d3cd-f787-4220-a052-b959f779a27c" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Geek Extrodinaire: WS-Inteview with MSDN Magazine SEA Edition</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,2f80d3cd-f787-4220-a052-b959f779a27c.aspx</guid>
      <link>http://www.softwaremaker.net/blog/GeekExtrodinaireWSInteviewWithMSDNMagazineSEAEdition.aspx</link>
      <pubDate>Wed, 04 May 2005 04:26:50 GMT</pubDate>
      <description>&lt;p&gt;
Ian Yates interviewed me for what turns me on for MSDN Magazine SEA Edition. Read
about it &lt;a href="http://www.softwaremaker.net/blog/content/binary/MSDN_5_SEA_p06-07_hires.pdf" target=_blank&gt;here&lt;/a&gt;. 
&lt;br&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: Verdana; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;strong&gt;&lt;font color=#000000&gt;©
MSDN Magazine SEA Edition&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=2f80d3cd-f787-4220-a052-b959f779a27c" /&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>Articles;Community;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=f9ce807e-b673-4b13-9d4b-d83b573346a3</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,f9ce807e-b673-4b13-9d4b-d83b573346a3.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">Steve Ross-Talbot, co-chair of the Web
Services Choreography working group and chair of Web Services Coordination, talks
about the differences between <em>Business Process Execution Language (<strong>BPEL</strong>)</em> and <em>Web
Services Choreography Description Language (<strong>WS-CDL</strong>)</em><a href="http://searchwebservices.techtarget.com/qna/0,289202,sid26_gci1066118,00.html?track=NL-110&amp;ad=506114" target="_blank">here</a>.<img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=f9ce807e-b673-4b13-9d4b-d83b573346a3" /><br /><hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Differences between BPEL and WS-CDL</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,f9ce807e-b673-4b13-9d4b-d83b573346a3.aspx</guid>
      <link>http://www.softwaremaker.net/blog/DifferencesBetweenBPELAndWSCDL.aspx</link>
      <pubDate>Wed, 09 Mar 2005 22:25:38 GMT</pubDate>
      <description>Steve Ross-Talbot, co-chair of the Web Services Choreography working group and chair of Web Services Coordination,&amp;nbsp;talks about the differences between &lt;em&gt;Business
Process Execution Language (&lt;strong&gt;BPEL&lt;/strong&gt;)&lt;/em&gt; and &lt;em&gt;Web Services Choreography
Description Language (&lt;strong&gt;WS-CDL&lt;/strong&gt;)&lt;/em&gt; &lt;a href="http://searchwebservices.techtarget.com/qna/0,289202,sid26_gci1066118,00.html?track=NL-110&amp;amp;ad=506114" target=_blank&gt;here&lt;/a&gt;.&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=f9ce807e-b673-4b13-9d4b-d83b573346a3" /&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>XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=1867a78d-a430-4f53-a201-6a467f9c55df</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,1867a78d-a430-4f53-a201-6a467f9c55df.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.w3.org/TR/soap/" target="_blank">(W3C) SOAP</a> is very like
to <a href="http://www.xmlrpc.com/spec" target="_blank">XML-RPC</a> and <a href="http://www.softwaremaker.net/blog/PermaLink,guid,a7888a36-94e7-4c7a-b30b-636fa21db5de.aspx" target="_blank">not
the other way around</a>.
</p>
        <p>
It works by marshaling procedure calls over HTTP as XML documents. However, one major
difference is that SOAP allows the documents to be treated <em>literally</em> as ---
well, <a href="http://searchwebservices.techtarget.com/ateQuestionNResponse/0,289625,sid26_cid494324_tax289201,00.html" target="_blank">Documents</a>.
</p>
        <p>
As you will be able to see from the angle-brackets snippets below -- you will notice
some major differences between SOAP and XML-RPC. One major difference you will notice
right away is that XML-RPC doesnt have any of the XML Namespaces, doesnt support XML
Schemas and has a very definite set of types and primitives. One of the major improvements
of SOAP 1.2 over its preceding version is the removal of Section 5 Encoding, which,
just like XML-RPC, is to improve the room for interoperablity by <em><strong>allowing
people and parties to agree by having lesser opportunities for people
to disagree</strong></em> (<sup>tm</sup>). I wont go much into details here.
Eric Kidd has built up a fantastic repository about XML-RPC <a href="http://xmlrpc-c.sourceforge.net/xmlrpc-howto/xmlrpc-howto.html" target="_blank">here</a>.
</p>
        <p>
As I have mentioned <a href="http://www.softwaremaker.net/blog/PermaLink,guid,a7888a36-94e7-4c7a-b30b-636fa21db5de.aspx" target="_blank">before</a>,
I had done some work before revolving around XML-RPC. In fact, I still see major operations
out there still communicating via XML-RPC. While I love SOAP, XML-RPC still does get
the job done if you wanted simplicity and faster interoperability. I am however,
willing to bet that, as distributed computing really pushes the realm of distribution
and enterprise requirements of Security, Transactions and Reliability becomes more
deeply rooted in <em>the message, </em>SOAP will become the defacto standard
in message transmission. In the same tone of distribution, I do still remember that
while doing XML-RPC, while some <a href="http://www.looselycoupled.com/blog/2002_06_30_lc.htm" target="_blank">people</a> and <a href="http://www-128.ibm.com/developerworks/webservices/library/ws-xpc2/" target="_blank">companies</a> will
argue that it is a loose-coupled concept, it sure doesnt apply to the parties involved
in the transactions and invocations. We spent unproductive hours on the phone and
meeting tables arguing what should be sent over and many more over what it is supposed
to look like on the wire. If weapons were allowed then, I am sure we would have reached
an agreement faster. Of course, the weapons I meant here were things like
the <a href="http://www.w3.org/XML/Schema" target="_blank">Colt .45 Pistol</a> and
the <a href="http://www.w3.org/TR/wsdl" target="_blank">S&amp;W .460 Magnum</a>.
Because, tools were <em>more</em> primitive then, we actually had to write every single
element out before it goes onto the wire. Serialization was unheard of then.
</p>
        <p>
I have built 3 simple Service Operations which is then broken into SOAP and XML-RPC
Formats. The 3 methods and their I/Os are simple but they should be able to illustrate
the different signatures and return types.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span> HelloWorld() <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">Function</span> SumAndDiff(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> x <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">Integer</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> y <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">Integer</span>) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> SumAndDiffStruc...<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span> RetSoftwareDevelopers() <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> SoftwareDeveloper()...</span>
        </p>
        <p>
These functions are then decorated with [XmlRpcMethod()] and [SoapMethod()] to distinguish
themselves to their operation and binding approaches.
</p>
        <p>
Let us see how each of them is represented differently on the wire. I will show the
XML-RPC format first then followed by SOAP:
</p>
        <pre>&lt;methodCall&gt;<br />
  &lt;methodName&gt;HelloWorld&lt;/methodName&gt;<br />
  &lt;params /&gt;<br />
&lt;/methodCall&gt;</pre>
        <pre>&lt;methodResponse&gt;<br />
  &lt;params&gt;<br />
    &lt;param&gt;<br />
      &lt;value&gt;<br />
        &lt;string&gt;Hello World&lt;/string&gt;<br />
      &lt;/value&gt;<br />
    &lt;/param&gt;<br />
  &lt;/params&gt;<br />
&lt;/methodResponse&gt;</pre>
        <pre>&lt;methodCall&gt;<br />
  &lt;methodName&gt;SumAndDiff&lt;/methodName&gt;<br />
  &lt;params&gt;<br />
    &lt;param&gt;<br />
      &lt;value&gt;<br />
        &lt;i4&gt;15&lt;/i4&gt;<br />
      &lt;/value&gt;<br />
    &lt;/param&gt;<br />
    &lt;param&gt;<br />
      &lt;value&gt;<br />
        &lt;i4&gt;10&lt;/i4&gt;<br />
      &lt;/value&gt;<br />
    &lt;/param&gt;<br />
  &lt;/params&gt;<br />
&lt;/methodCall&gt;</pre>
        <pre>&lt;methodResponse&gt;<br />
  &lt;params&gt;<br />
    &lt;param&gt;<br />
      &lt;value&gt;<br />
        &lt;struct&gt;<br />
          &lt;member&gt;<br />
            &lt;name&gt;sum&lt;/name&gt;<br />
            &lt;value&gt;<br />
              &lt;i4&gt;25&lt;/i4&gt;<br />
            &lt;/value&gt;<br />
          &lt;/member&gt;<br />
          &lt;member&gt;<br />
            &lt;name&gt;diff&lt;/name&gt;<br />
            &lt;value&gt;<br />
              &lt;i4&gt;5&lt;/i4&gt;<br />
            &lt;/value&gt;<br />
          &lt;/member&gt;<br />
        &lt;/struct&gt;<br />
      &lt;/value&gt;<br />
    &lt;/param&gt;<br />
  &lt;/params&gt;<br />
&lt;/methodResponse&gt;</pre>
        <pre>&lt;methodCall&gt;<br />
  &lt;methodName&gt;RetSoftwareDevelopers&lt;/methodName&gt;<br />
  &lt;params /&gt;<br />
&lt;/methodCall&gt;</pre>
        <pre>&lt;methodResponse&gt;<br />
  &lt;params&gt;<br />
    &lt;param&gt;<br />
      &lt;value&gt;<br />
        &lt;array&gt;<br />
          &lt;data&gt;<br />
            &lt;value&gt;<br />
              &lt;struct&gt;<br />
               
&lt;member&gt;<br />
                 
&lt;name&gt;Name&lt;/name&gt;<br />
                 
&lt;value&gt;<br />
                   
&lt;string&gt;William Tay&lt;/string&gt;<br />
                 
&lt;/value&gt;<br />
               
&lt;/member&gt;<br />
               
&lt;member&gt;<br />
                 
&lt;name&gt;Age&lt;/name&gt;<br />
                 
&lt;value&gt;<br />
                   
&lt;i4&gt;30&lt;/i4&gt;<br />
                 
&lt;/value&gt;<br />
               
&lt;/member&gt;<br />
               
&lt;member&gt;<br />
                 
&lt;name&gt;Profile&lt;/name&gt;<br />
                 
&lt;value&gt;<br />
                   
&lt;struct&gt;<br />
                     
&lt;member&gt;<br />
                       
&lt;name&gt;Experience&lt;/name&gt;<br />
                       
&lt;value&gt;<br />
                         
&lt;i4&gt;10&lt;/i4&gt;<br />
                       
&lt;/value&gt;<br />
                     
&lt;/member&gt;<br />
                     
&lt;member&gt;<br />
                       
&lt;name&gt;Plaform&lt;/name&gt;<br />
                       
&lt;value&gt;<br />
                         
&lt;string&gt;Microsoft .NET Technologies&lt;/string&gt;<br />
                       
&lt;/value&gt;<br />
                     
&lt;/member&gt;<br />
                   
&lt;/struct&gt;<br />
                 
&lt;/value&gt;<br />
               
&lt;/member&gt;<br />
              &lt;/struct&gt;<br />
            &lt;/value&gt;<br />
            &lt;value&gt;<br />
              &lt;struct&gt;<br />
               
&lt;member&gt;<br />
                 
&lt;name&gt;Name&lt;/name&gt;<br />
                 
&lt;value&gt;<br />
                   
&lt;string&gt;ABC DEF GHI&lt;/string&gt;<br />
                 
&lt;/value&gt;<br />
               
&lt;/member&gt;<br />
               
&lt;member&gt;<br />
                 
&lt;name&gt;Age&lt;/name&gt;<br />
                 
&lt;value&gt;<br />
                   
&lt;i4&gt;50&lt;/i4&gt;<br />
                 
&lt;/value&gt;<br />
               
&lt;/member&gt;<br />
               
&lt;member&gt;<br />
                 
&lt;name&gt;Profile&lt;/name&gt;<br />
                 
&lt;value&gt;<br />
                   
&lt;struct&gt;<br />
                     
&lt;member&gt;<br />
                       
&lt;name&gt;Experience&lt;/name&gt;<br />
                       
&lt;value&gt;<br />
                         
&lt;i4&gt;10&lt;/i4&gt;<br />
                       
&lt;/value&gt;<br />
                     
&lt;/member&gt;<br />
                     
&lt;member&gt;<br />
                       
&lt;name&gt;Plaform&lt;/name&gt;<br />
                       
&lt;value&gt;<br />
                         
&lt;string&gt;Microsoft .NET Technologies&lt;/string&gt;<br />
                       
&lt;/value&gt;<br />
                     
&lt;/member&gt;<br />
                   
&lt;/struct&gt;<br />
                 
&lt;/value&gt;<br />
               
&lt;/member&gt;<br />
              &lt;/struct&gt;<br />
            &lt;/value&gt;<br />
          &lt;/data&gt;<br />
        &lt;/array&gt;<br />
      &lt;/value&gt;<br />
    &lt;/param&gt;<br />
  &lt;/params&gt;<br />
&lt;/methodResponse&gt;</pre>
        <p>
Below are the respective SOAP Representations:
</p>
        <pre>&lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&gt;<br />
  &lt;soap:Body&gt;<br />
    &lt;HelloWorld xmlns="..." /&gt; 
<br />
  &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt;</pre>
        <pre>&lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&gt;<br />
  &lt;soap:Body&gt;<br />
    &lt;HelloWorldResponse xmlns="..."&gt;<br />
      &lt;HelloWorldResult&gt;Hello World&lt;/HelloWorldResult&gt; 
<br />
    &lt;/HelloWorldResponse&gt;<br />
  &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt;</pre>
        <pre>&lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&gt;<br />
  &lt;soap:Body&gt;<br />
    &lt;SumAndDiff xmlns="..."&gt;<br />
      &lt;x&gt;15&lt;/x&gt; 
<br />
      &lt;y&gt;10&lt;/y&gt; 
<br />
    &lt;/SumAndDiff&gt;<br />
  &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt;</pre>
        <pre>&lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&gt;<br />
  &lt;soap:Body&gt;<br />
    &lt;SumAndDiffResponse xmlns="..."&gt;<br />
      &lt;SumAndDiffResult&gt;<br />
        &lt;sum&gt;25&lt;/sum&gt; 
<br />
        &lt;diff&gt;5&lt;/diff&gt; 
<br />
      &lt;/SumAndDiffResult&gt;<br />
    &lt;/SumAndDiffResponse&gt;<br />
  &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt;</pre>
        <pre>&lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&gt;<br />
  &lt;soap:Body&gt;<br />
    &lt;RetSoftwareDevelopers xmlns="..." /&gt; 
<br />
  &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt;</pre>
        <pre>&lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&gt;<br />
  &lt;soap:Body&gt;<br />
    &lt;RetSoftwareDevelopersResponse xmlns="..."&gt;<br />
      &lt;RetSoftwareDevelopersResult&gt;<br />
        &lt;SoftwareDeveloper&gt;<br />
          &lt;Name&gt;William Tay&lt;/Name&gt; 
<br />
          &lt;Age&gt;30&lt;/Age&gt; 
<br />
          &lt;Profile&gt;<br />
            &lt;Experience&gt;10&lt;/Experience&gt; 
<br />
            &lt;Plaform&gt;Microsoft
.NET Technologies&lt;/Plaform&gt; 
<br />
          &lt;/Profile&gt;<br />
        &lt;/SoftwareDeveloper&gt;<br />
        &lt;SoftwareDeveloper&gt;<br />
          &lt;Name&gt;ABC DEF GHI&lt;/Name&gt; 
<br />
          &lt;Age&gt;50&lt;/Age&gt; 
<br />
          &lt;Profile&gt;<br />
            &lt;Experience&gt;10&lt;/Experience&gt; 
<br />
            &lt;Plaform&gt;Microsoft
.NET Technologies&lt;/Plaform&gt; 
<br />
          &lt;/Profile&gt;<br />
        &lt;/SoftwareDeveloper&gt;<br />
      &lt;/RetSoftwareDevelopersResult&gt;<br />
    &lt;/RetSoftwareDevelopersResponse&gt;<br />
  &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt;</pre>
        <p>
As you would have noticed by now, XML-RPC has a fixed set of types and abstractions
such as methodCall, methodName, params, value, struct, etc and of course, its
response member-name-value pair. Like its name suggests, the param elements do represent
each a parameter and the encapsulating structure does look like an object-instance
representation. SOAP, on the other hand, makes heavy use of XML Namespaces and Schemas
to validate how and what <em>the message</em> should look like.
</p>
        <p>
We are, however, moving away from this RPC behaviour of transmission. This is a good
thing as SOAP, while requiring much more engineering complexity, does offer much more
extensibility in terms of message exchange patterns and extensible headers. Even the
RPC-Encoding RPC-ish style messages that are generated by the SOAP toolkits of
a couple of years back is making way for Document-Literal as the default style today.
You take the messages "AS-IS" and how you mapped them into your platform native language
and what you do with them is left to the implementation details of each platform.
The XML schemas act as a way for you to tell what is legal or illegal as IO to your
service.
</p>
        <p>
Please note that I am using <a href="http://www.cookcomputing.com/" target="_blank">Charles
Cook</a>'s fantastic <a href="http://www.xml-rpc.net/" target="_blank">XML-RPC .NET</a> for
my XML-RPC implementation here. Another way for you NOT to re-invent the wheel is
to use <a href="http://www.pocketsoap.com/weblog/index.html" target="_blank">Simon
Fell</a>'s <a href="http://www.pocketsoap.com/pocketXMLRPC/" target="_blank">PocketXMLRPC</a>.
I am a huge fan of Simon Fell's SOAP Tools and I am sure <a href="http://www.pocketsoap.com/pocketXMLRPC/" target="_blank">this</a> is
a winner as well.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1867a78d-a430-4f53-a201-6a467f9c55df" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>History Lesson: XML-RPC vs SOAP (Part II)</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,1867a78d-a430-4f53-a201-6a467f9c55df.aspx</guid>
      <link>http://www.softwaremaker.net/blog/HistoryLessonXMLRPCVsSOAPPartII.aspx</link>
      <pubDate>Sun, 27 Feb 2005 13:18:01 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.w3.org/TR/soap/" target="_blank"&gt;(W3C) SOAP&lt;/a&gt; is very&amp;nbsp;like
to &lt;a href="http://www.xmlrpc.com/spec" target=_blank&gt;XML-RPC&lt;/a&gt; and &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,a7888a36-94e7-4c7a-b30b-636fa21db5de.aspx" target=_blank&gt;not
the other way around&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
It works by marshaling procedure calls over HTTP as XML documents. However, one major
difference is that SOAP allows the documents to be treated &lt;em&gt;literally&lt;/em&gt; as ---
well, &lt;a href="http://searchwebservices.techtarget.com/ateQuestionNResponse/0,289625,sid26_cid494324_tax289201,00.html" target=_blank&gt;Documents&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
As you will be able to see from the angle-brackets snippets below -- you will notice
some major differences between SOAP and XML-RPC. One major difference you will notice
right away is that XML-RPC doesnt have any of the XML Namespaces, doesnt support XML
Schemas and has a very definite set of types and primitives. One of the major improvements
of SOAP 1.2 over its preceding version is the removal of Section 5 Encoding, which,
just like XML-RPC, is to improve the room for interoperablity by &lt;em&gt;&lt;strong&gt;allowing
people and parties&amp;nbsp;to agree by&amp;nbsp;having lesser&amp;nbsp;opportunities for people
to disagree&lt;/strong&gt;&lt;/em&gt; (&lt;sup&gt;tm&lt;/sup&gt;). I wont go much into details&amp;nbsp;here.
Eric Kidd has built up a fantastic repository about XML-RPC &lt;a href="http://xmlrpc-c.sourceforge.net/xmlrpc-howto/xmlrpc-howto.html" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
As I have&amp;nbsp;mentioned &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,a7888a36-94e7-4c7a-b30b-636fa21db5de.aspx" target=_blank&gt;before&lt;/a&gt;,
I had done some work before revolving around XML-RPC. In fact, I still see major operations
out there still communicating via XML-RPC. While I love SOAP, XML-RPC still does get
the job done&amp;nbsp;if you wanted simplicity and faster interoperability. I am however,
willing to bet that, as distributed computing really pushes the realm of distribution
and enterprise requirements of Security, Transactions and Reliability becomes more
deeply rooted in &lt;em&gt;the message, &lt;/em&gt;SOAP&amp;nbsp;will become the defacto standard
in message transmission. In the same tone of distribution, I do still remember that
while doing XML-RPC, while some &lt;a href="http://www.looselycoupled.com/blog/2002_06_30_lc.htm" target=_blank&gt;people&lt;/a&gt; and &lt;a href="http://www-128.ibm.com/developerworks/webservices/library/ws-xpc2/" target=_blank&gt;companies&lt;/a&gt; will
argue that it is a loose-coupled concept, it sure doesnt apply to the parties involved
in the transactions and invocations. We spent unproductive hours on the phone and
meeting tables arguing what should be sent over and many more over what it is supposed
to look like on the wire. If weapons were allowed then, I am sure we would have reached
an agreement faster. Of course,&amp;nbsp;the weapons&amp;nbsp;I meant here were things like
the &lt;a href="http://www.w3.org/XML/Schema" target=_blank&gt;Colt .45 Pistol&lt;/a&gt; and the&amp;nbsp;&lt;a href="http://www.w3.org/TR/wsdl" target=_blank&gt;S&amp;amp;W
.460 Magnum&lt;/a&gt;. Because, tools were &lt;em&gt;more&lt;/em&gt; primitive then, we actually had
to write every single element out before it goes onto the wire. Serialization was
unheard of then.
&lt;/p&gt;
&lt;p&gt;
I have built 3&amp;nbsp;simple Service Operations which is then broken into SOAP and XML-RPC
Formats. The 3 methods and their I/Os are simple but they should be able to illustrate
the different signatures and return types.
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt; HelloWorld() &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;Function&lt;/span&gt; SumAndDiff(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; x &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;Integer&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; y &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;Integer&lt;/span&gt;) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; SumAndDiffStruc...&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt; RetSoftwareDevelopers() &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; SoftwareDeveloper()...&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
These functions are then decorated with [XmlRpcMethod()] and [SoapMethod()] to distinguish
themselves to their operation and binding approaches.
&lt;/p&gt;
&lt;p&gt;
Let us see how each of them is represented differently on the wire. I will show the
XML-RPC format first then followed by SOAP:
&lt;/p&gt;
&lt;pre&gt;&amp;lt;methodCall&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;methodName&amp;gt;HelloWorld&amp;lt;/methodName&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;params /&amp;gt;&lt;br&gt;
&amp;lt;/methodCall&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;methodResponse&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;params&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;string&amp;gt;Hello World&amp;lt;/string&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/param&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/params&amp;gt;&lt;br&gt;
&amp;lt;/methodResponse&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;methodCall&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;methodName&amp;gt;SumAndDiff&amp;lt;/methodName&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;params&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;i4&amp;gt;15&amp;lt;/i4&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;i4&amp;gt;10&amp;lt;/i4&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/param&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/params&amp;gt;&lt;br&gt;
&amp;lt;/methodCall&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;methodResponse&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;params&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;struct&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;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;sum&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;i4&amp;gt;25&amp;lt;/i4&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&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;/member&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;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;diff&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;i4&amp;gt;5&amp;lt;/i4&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&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;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/struct&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/param&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/params&amp;gt;&lt;br&gt;
&amp;lt;/methodResponse&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;methodCall&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;methodName&amp;gt;RetSoftwareDevelopers&amp;lt;/methodName&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;params /&amp;gt;&lt;br&gt;
&amp;lt;/methodCall&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;methodResponse&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;params&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;array&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;data&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;struct&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Name&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;string&amp;gt;William Tay&amp;lt;/string&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Age&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;i4&amp;gt;30&amp;lt;/i4&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Profile&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;struct&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Experience&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;i4&amp;gt;10&amp;lt;/i4&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Plaform&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;string&amp;gt;Microsoft .NET Technologies&amp;lt;/string&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/struct&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/struct&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;struct&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Name&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;string&amp;gt;ABC DEF GHI&amp;lt;/string&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Age&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;i4&amp;gt;50&amp;lt;/i4&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Profile&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;struct&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Experience&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;i4&amp;gt;10&amp;lt;/i4&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;name&amp;gt;Plaform&amp;lt;/name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;string&amp;gt;Microsoft .NET Technologies&amp;lt;/string&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/struct&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/member&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/struct&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&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;/data&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/array&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/param&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/params&amp;gt;&lt;br&gt;
&amp;lt;/methodResponse&amp;gt;&lt;/pre&gt;
&lt;p&gt;
Below are the respective SOAP Representations:
&lt;/p&gt;
&lt;pre&gt;&amp;lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;soap:Body&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;HelloWorld xmlns="..." /&amp;gt; 
&lt;br&gt;
&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;soap:Body&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;HelloWorldResponse xmlns="..."&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;HelloWorldResult&amp;gt;Hello World&amp;lt;/HelloWorldResult&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/HelloWorldResponse&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;soap:Body&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SumAndDiff xmlns="..."&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;x&amp;gt;15&amp;lt;/x&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;y&amp;gt;10&amp;lt;/y&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/SumAndDiff&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;soap:Body&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SumAndDiffResponse xmlns="..."&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SumAndDiffResult&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sum&amp;gt;25&amp;lt;/sum&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;diff&amp;gt;5&amp;lt;/diff&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/SumAndDiffResult&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/SumAndDiffResponse&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;soap:Body&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RetSoftwareDevelopers xmlns="..." /&amp;gt; 
&lt;br&gt;
&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;soap:Envelope xmlns:soap="..." xmlns:xsi="..." xmlns:xsd="..."&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;soap:Body&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RetSoftwareDevelopersResponse xmlns="..."&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RetSoftwareDevelopersResult&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SoftwareDeveloper&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;Name&amp;gt;William Tay&amp;lt;/Name&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;Age&amp;gt;30&amp;lt;/Age&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;Profile&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Experience&amp;gt;10&amp;lt;/Experience&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Plaform&amp;gt;Microsoft
.NET Technologies&amp;lt;/Plaform&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;/Profile&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/SoftwareDeveloper&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SoftwareDeveloper&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;Name&amp;gt;ABC DEF GHI&amp;lt;/Name&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;Age&amp;gt;50&amp;lt;/Age&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;Profile&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Experience&amp;gt;10&amp;lt;/Experience&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Plaform&amp;gt;Microsoft
.NET Technologies&amp;lt;/Plaform&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;/Profile&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/SoftwareDeveloper&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/RetSoftwareDevelopersResult&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/RetSoftwareDevelopersResponse&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt;&lt;/pre&gt;
&lt;p&gt;
As you would have noticed by now, XML-RPC has a fixed set of types and abstractions
such as methodCall, methodName, params, value, struct, etc&amp;nbsp;and of course, its
response member-name-value pair. Like its name suggests, the param elements do represent
each a parameter and the encapsulating structure does look like an object-instance
representation. SOAP, on the other hand, makes heavy use of XML Namespaces and Schemas
to validate how and what &lt;em&gt;the message&lt;/em&gt; should&amp;nbsp;look like.
&lt;/p&gt;
&lt;p&gt;
We are, however, moving away from this RPC behaviour of transmission. This is a good
thing as SOAP, while requiring much more engineering complexity, does offer much more
extensibility in terms of message exchange patterns and extensible headers. Even the
RPC-Encoding RPC-ish style messages that&amp;nbsp;are generated by the SOAP toolkits of
a couple of years back is making way for Document-Literal as the default style today.
You take the messages "AS-IS" and how you mapped them into your platform native language
and what you do with&amp;nbsp;them is left to the implementation details of each platform.
The XML schemas act as a way for you to tell what is legal or illegal as IO to your
service.
&lt;/p&gt;
&lt;p&gt;
Please note that I am using &lt;a href="http://www.cookcomputing.com/" target=_blank&gt;Charles
Cook&lt;/a&gt;'s fantastic &lt;a href="http://www.xml-rpc.net/" target=_blank&gt;XML-RPC .NET&lt;/a&gt; for
my XML-RPC implementation here. Another way for you NOT to re-invent the wheel is
to use &lt;a href="http://www.pocketsoap.com/weblog/index.html" target=_blank&gt;Simon Fell&lt;/a&gt;'s &lt;a href="http://www.pocketsoap.com/pocketXMLRPC/" target=_blank&gt;PocketXMLRPC&lt;/a&gt;.
I am a huge fan of Simon Fell's SOAP Tools and I am sure &lt;a href="http://www.pocketsoap.com/pocketXMLRPC/" target=_blank&gt;this&lt;/a&gt; is
a winner as well.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1867a78d-a430-4f53-a201-6a467f9c55df" /&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>Software Development;Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=a7888a36-94e7-4c7a-b30b-636fa21db5de</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,a7888a36-94e7-4c7a-b30b-636fa21db5de.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In my recent tour of the local university campuses giving talks and <a href="http://www.softwaremaker.net/blog/PermaLink,guid,a6a5b69c-6a40-4eb6-80f2-023652152d14.aspx" target="_blank">presentations</a>,
I noticed that most of the students find my talks hard to digest and understand. This
is not surprising since I have always been known to be a server guy and not much of
a tools person. Actually I used to be a client-tools person BUT have since spent the
last year or so dabbling in distributed computing protocols.
</p>
        <p>
This is not just associated with students, BUT some of the younger folks that I had
a chance to engage as well. This goes really far to show how <em>old</em> I am. It
is very hard to extol the benefits of XML/SOAP and Services if the younger folks dont
understand and appreciate the history of COM, MTS. Pretty soon, when <a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank">Indigo</a> matures
from the wild, technologies like COM+ and .NET Remoting will become legacy as
well.
</p>
        <p>
Everyone who grew up in the .NET era never knew about DLL Hell in deployment. Those
things I need to do at 12 midnight when everyone is asleep and I am given the safe-clear
command to do a regsvr32 for a 10KB Win32 COM DLL and then reboot the servers after...and
I have not even mentioned about those nightmarish versioning problems when someone
else's DLL is installed over mine....
</p>
        <p>
Well, it is good for those folks just like it was good for me not to have gone
through <a href="http://www.unt.edu/isrc/Faculty/FacultyFellows/yourdon.htm" target="_blank">Yourdon</a>'s
Structured Programming era. Now thinking about it made me realize that maybe I would
have appreciated object-abstractions better if I had.
</p>
        <p>
Anyways, since I was very focused on distributed computing protocos and XML SOAP Services
in my talks and since the audience were mainly younger students who had no professional
experience, I tend not to dabble too deep into BEST PRACTICES in Deployments, Versioning
and Interoperability scenarios. I am sure most of them would rather poke a needle
into their eye than to watch me write angle brackets, do some xsd typing, and then
import namespaces before binding them all together in a WSDL file. Therefore,
I usually give a more general broader overview of the industry, how come we have what
we have today and what are we getting tomorrow. The history part usually sits well
with them and so most of the questions that came up usually relates to that.
</p>
        <p>
Since most of their curriculum and labworks never went back to technologies that were
more than 2 years old, I do find it useful sometimes to show them how COM, MTS and
DCOM was <em>done</em> last time. That usually catches their attention although I
think it was more of an amusement to them more than anything else.
</p>
        <p>
          <em>
            <font face="Georgia" color="#008000">"Now, see this black thingy, we call them
vinyl in our days and we put this needle-like shaped thing on it so that music can
be piped out from this trumpet-like thingy...and we have to put it carefully on the
edges so that it starts from the first tune...and if we want to repeat the same tune
again, we have to sit up, go back to the machine, lift the needle up, squint our eyes
on the vinyl so we can pick out the correct sequence of the groove on the vinyl that
the song starts on and put it carkefully and slowly on that groove and VOILA, we have
replay....What ? Oh, we have to do that everytime we want to replay that song...Whats
that ? Shuffle, Random --- What's that ?"</font>
          </em>
        </p>
        <p>
So, running DCOMCNFG.EXE and OLEView is not something I would do too often just to
get a chuckle from the student audience <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /></p>
        <p>
However, I promise some of them I would blog about XML-RPC in relation to <a href="http://www.w3.org/TR/soap/" target="_blank">(W3C)
SOAP</a> and that is what I intend to do. There are still more than a few implementations
out there in the real-world that are happily humming along with XML-RPC. I had
done a couple of them before using MS SOAP Toolkit to XML-RPC with an apache
server. I dont see them clamouring after SOAP so soon as those functionality are
pretty straight-forward Request-Response endpoint invocations. In fact, the banner
hanging in their server room reads: "NO SOAP, NO Problems" which I thought was quite
cool even though I am a big fan of SOAP.
</p>
        <p>
Anyways, how can a Web Service history lesson be complete without XML-RPC. <a href="http://www.scripting.com/" target="_blank">Dave
Winer</a>, who <a href="http://www.xmlrpc.com/stories/storyReader$555" target="_blank">came
up</a> with XML-RPC amongst <a href="http://backend.userland.com/rss091" target="_blank">other
things</a> is still one of the key guys today, in my mind, who has shaped the
landscape of distributed computing today. There is no doubt that SOAP has its
roots in XML-RPC. XML-RPC is sort of an early generation of Web Services and
it went a long way to define one of the principles of Service-Orientation which is
to create as little <em><u>shared</u></em> abstractions as possible. In fact, there are
so few primitives and types in XML-RPC that there is so little to agree and disagree
on which, in turn, sets a positive tone in integration and interoperability.
Incidentally, that was one of the reasons why SOAP 1.1 Section 5 Encoding was
taken out in SOAP 1.2.
</p>
        <p>
I would try to see what I can come up with to write some XML-RPC scripts on .NET,
just for the fun of it. I dont see any scenarios that I could use it unless one needs
to write a .NET client to connect to a UNIX XML-RPC Server. Extensibility could be
an issue as I could not route those messages, at least, not easily. On the other hand,
because XML-RPC is slightly simpler (XML-RPC = SOAP++), it may pose less of an interop
hazard.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=a7888a36-94e7-4c7a-b30b-636fa21db5de" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>History Lesson: XML-RPC vs SOAP (Part I)</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,a7888a36-94e7-4c7a-b30b-636fa21db5de.aspx</guid>
      <link>http://www.softwaremaker.net/blog/HistoryLessonXMLRPCVsSOAPPartI.aspx</link>
      <pubDate>Tue, 22 Feb 2005 07:56:28 GMT</pubDate>
      <description>&lt;p&gt;
In my recent tour of the local university campuses giving talks and &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,a6a5b69c-6a40-4eb6-80f2-023652152d14.aspx" target=_blank&gt;presentations&lt;/a&gt;,
I noticed that most of the students find my talks hard to digest and understand. This
is not surprising since I have always been known to be a server guy and not much of
a tools person. Actually I used to be a client-tools person BUT have since spent the
last year or so dabbling in distributed computing protocols.
&lt;/p&gt;
&lt;p&gt;
This is not just associated with students, BUT some of the younger folks that I had
a chance to engage as well. This goes really far to show how &lt;em&gt;old&lt;/em&gt; I am. It
is very hard to extol the benefits of XML/SOAP and Services if the younger folks dont
understand and appreciate the history of COM, MTS. Pretty soon, when &lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank"&gt;Indigo&lt;/a&gt; matures
from the wild,&amp;nbsp;technologies like COM+ and .NET Remoting will become legacy as
well.
&lt;/p&gt;
&lt;p&gt;
Everyone who grew up in the .NET era never knew about DLL Hell in deployment. Those
things I need to do at 12 midnight when everyone is asleep and I am given the safe-clear
command to do a regsvr32 for a 10KB Win32 COM DLL and then reboot the servers after...and
I&amp;nbsp;have not even mentioned about those nightmarish versioning problems when someone
else's DLL is installed over mine....
&lt;/p&gt;
&lt;p&gt;
Well, it is good for those folks just like it was good for me&amp;nbsp;not to have gone
through &lt;a href="http://www.unt.edu/isrc/Faculty/FacultyFellows/yourdon.htm" target=_blank&gt;Yourdon&lt;/a&gt;'s
Structured Programming era. Now thinking about it made me realize that maybe I would
have appreciated object-abstractions better if I had.
&lt;/p&gt;
&lt;p&gt;
Anyways, since I was very focused on distributed computing protocos and XML SOAP Services
in my talks and since the audience were mainly younger students who had no professional
experience, I tend not to dabble too deep into BEST PRACTICES in Deployments, Versioning
and Interoperability scenarios. I am sure most of them would rather poke a needle
into their eye than to watch me write angle brackets, do some xsd typing, and then
import namespaces before binding them all together in&amp;nbsp;a WSDL file. Therefore,
I usually give a more general broader overview of the industry, how come we have what
we have today and what are we getting tomorrow. The history part usually sits well
with them and so most of the questions that came up usually relates to that.
&lt;/p&gt;
&lt;p&gt;
Since most of their curriculum and labworks never went back to technologies that were
more than 2 years old, I do find it useful sometimes to show them how COM, MTS and
DCOM was &lt;em&gt;done&lt;/em&gt; last time. That usually catches their attention although I
think it was more of an amusement to them more than anything else.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font face=Georgia color=#008000&gt;"Now, see this black thingy, we call them vinyl
in our days and we put this needle-like shaped thing on it so that music can be piped
out from this trumpet-like thingy...and we have to put it carefully on the edges so
that it starts from the first tune...and if we want to repeat the same tune again,
we have to sit up, go back to the machine, lift the needle up, squint our eyes on
the vinyl so we can pick out the correct sequence of the groove on the vinyl that
the song starts on and put it carkefully and slowly on that groove and VOILA, we have
replay....What ? Oh, we have to do that everytime we want to replay that song...Whats
that ? Shuffle, Random --- What's that ?"&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
So, running DCOMCNFG.EXE and OLEView is not something I would do too often just to
get a&amp;nbsp;chuckle from the student audience &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
However, I promise some of them I would blog about XML-RPC in relation to &lt;a href="http://www.w3.org/TR/soap/" target="_blank"&gt;(W3C)
SOAP&lt;/a&gt; and that is what I intend to do. There are still more than a few implementations
out there in the real-world that&amp;nbsp;are happily humming along with XML-RPC. I had
done&amp;nbsp;a couple of them&amp;nbsp;before using MS SOAP Toolkit to XML-RPC with an apache
server. I dont see them clamouring after SOAP so soon as&amp;nbsp;those&amp;nbsp;functionality&amp;nbsp;are
pretty straight-forward Request-Response endpoint invocations. In fact, the banner
hanging in their server room reads: "NO SOAP, NO Problems" which I thought was quite
cool even though I am a big fan of SOAP.
&lt;/p&gt;
&lt;p&gt;
Anyways, how can a Web Service history lesson be complete without XML-RPC. &lt;a href="http://www.scripting.com/" target=_blank&gt;Dave
Winer&lt;/a&gt;, who&amp;nbsp;&lt;a href="http://www.xmlrpc.com/stories/storyReader$555" target=_blank&gt;came
up&lt;/a&gt; with&amp;nbsp;XML-RPC amongst &lt;a href="http://backend.userland.com/rss091" target=_blank&gt;other
things&lt;/a&gt;&amp;nbsp;is still one of the key guys today, in my mind, who has shaped the
landscape of distributed computing&amp;nbsp;today. There is no doubt that SOAP has its
roots in XML-RPC. XML-RPC is&amp;nbsp;sort of an early generation of Web Services and
it went a long way to define one of the principles of Service-Orientation which is
to create as little &lt;em&gt;&lt;u&gt;shared&lt;/u&gt;&lt;/em&gt; abstractions as possible. In fact, there&amp;nbsp;are
so few primitives and types in XML-RPC that there&amp;nbsp;is so little to agree and disagree
on which, in turn,&amp;nbsp;sets a positive tone in integration and interoperability.
Incidentally, that was one of the reasons why SOAP 1.1&amp;nbsp;Section 5 Encoding was
taken out in SOAP 1.2.
&lt;/p&gt;
&lt;p&gt;
I would try to see what I can come up with to write some XML-RPC scripts on .NET,
just for the fun of it. I dont see any scenarios that I could use it unless one needs
to write a .NET client to connect to a UNIX XML-RPC Server. Extensibility could be
an issue as I could not route those messages, at least, not easily. On the other hand,
because XML-RPC is slightly simpler (XML-RPC = SOAP++), it may pose less of an interop
hazard.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=a7888a36-94e7-4c7a-b30b-636fa21db5de" /&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>Software Development;Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=7deab38b-92af-446b-b7d8-6aa901007130</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,7deab38b-92af-446b-b7d8-6aa901007130.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In some of my recent XML SOAP Services demos and presentations, I found myself needing
to manually post a SOAP message to a listening <a href="http://www.w3.org/TR/soap/" target="_blank">(W3C)
SOAP</a> Services on <strong>http</strong> and also on the <strong>tcp</strong> transport
protocol.
</p>
        <p>
While doing that, I can also change the SOAP Message on the fly and post
it instead of having to change the way VS.NET XMLSerializer serializes the types
and then recompiling and running it again. Besides saving time, it does add an element
of oommph as well as there is no break in momentum and more importantly, audiences
really do see and can appreciate what is going onto the wire real-time.
</p>
        <p>
Being able to change the messages on the fly as well also lets you see very quickly
and clearly what the receiving endpoints can or cannot do. In this sense, with just
a few tweaks of the angle brackets, I can generate SOAP Faults at will and it gives
the audience great examples for learning how and when SOAP Faults are generated. For
example, <em>changing the element names</em> OR <em>re-ordering the elements</em> of
a SOAP Message and see what and how the receiving endpoint reacts. I will leave this
as an exercise to the reader.
</p>
        <p>
I have written a small tool to help me do that. Recently, I have just added an
ability to the application to allow it to post SOAP messages over the
TCP Transport channel to a listening <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a>-enabled SOAP Service.
</p>
        <p>
Granted, most people will still need to manually pre-compose a SOAP
Message before-hand. Do this as part of your pre-presentation work
and save the messages for posting to the receiving endpoints later. Of course, if
you are an angle bracket freak like <a href="http://www.softwaremaker.net/blog/PermaLink,guid,e777dbd4-eb6f-454e-b791-372d293a6ce4.aspx" target="_blank">me</a> or <a href="http://pluralsight.com/blogs/tewald/archive/2005/02/09/5702.aspx" target="_blank">Tim</a> or <a href="http://radovanjanecek.net/blog/archives/000181.html" target="_blank">Radovan</a>,
then you should all feel comfortable typing them into the textbox. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /></p>
        <p>
Seriously though, this tool allows you to save your SOAP message scripts as part of
your preparation work. You can either post these as files (via the OpenFile Dialog button)
or copy-n-paste those scripts into the textbox.
</p>
        <p>
I believe that this can serve some basic purpose scenarios. <em>Do note that besides
doing presentation work with this, I think this is a great tool for developers who
need to further test their SOAP Services to make sure it is able to generate
the exact SOAP Responses (SOAP Faults and all) with every single differing SOAP Request.</em></p>
        <p>
For example, users testing their WSE-Enabled SOAP Services can change the wsu:Timestamp
element to test the service timeouts or play around with the wsse:Security elements
of _WS-Security Specs_.
</p>
        <p>
          <strong>
            <u>
              <font color="#ff0000">[Pre-requisites]:</font>
            </u>
          </strong>
        </p>
        <ul>
          <li>
You will need to install the <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 2.0 Runtime for the TCP Transport function to
work 
</li>
          <li>
            <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3&amp;displaylang=en" target="_blank">.NET
Framework 1.1</a>
          </li>
          <li>
            <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3144b72b-b4f2-46da-b4b6-c5d7485f2b42&amp;displaylang=en" target="_blank">MSXML
4 SP2</a>
          </li>
        </ul>
        <p>
          <strong>
            <u>
              <font color="#ff0000">[Notes]:</font>
            </u>
          </strong>
        </p>
        <ul>
          <li>
This will only work for the Request-Response MEP for WSE-Enabled SOAP Services</li>
        </ul>
        <p>
          <strong>
            <u>
              <font color="#ff0000">[Upcoming Plans]:</font>
            </u>
          </strong>
        </p>
        <ul>
          <li>
Incorporate the ability to listen for incoming SOAP Messages as well. So it will work
for truly asynchronous, duplex type SOAP Services as well 
</li>
          <li>
...</li>
        </ul>
        <p>
I have made it available for download <a href="http://www.softwaremaker.net/downloadsvcs/dsManualSOAPPost.asp" target="_blank">here</a>. I
plan to make the source codes available once I incorporate most of the features
the market wants.
</p>
        <p>
Please feel free to leave your comments and feedback in this post so I know how to
better improve it.
</p>
        <p>
          <img src="http://www.softwaremaker.net/pictures/manualsoappostpics/ManualSOAPPost_ScreenShot1.JPG" />
        </p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=7deab38b-92af-446b-b7d8-6aa901007130" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Download this Tool for Manual Posting of SOAP Messages to http://XML SOAP Services and soap.tcp://WSE 2.0 TCP SOAP Services</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,7deab38b-92af-446b-b7d8-6aa901007130.aspx</guid>
      <link>http://www.softwaremaker.net/blog/DownloadThisToolForManualPostingOfSOAPMessagesToHttpXMLSOAPServicesAndSoaptcpWSE20TCPSOAPServices.aspx</link>
      <pubDate>Wed, 16 Feb 2005 00:03:56 GMT</pubDate>
      <description>&lt;p&gt;
In some of my recent XML SOAP Services demos and presentations, I found myself needing
to manually post a SOAP message to a listening &lt;a href="http://www.w3.org/TR/soap/" target="_blank"&gt;(W3C)
SOAP&lt;/a&gt; Services on &lt;strong&gt;http&lt;/strong&gt; and also on the &lt;strong&gt;tcp&lt;/strong&gt; transport
protocol.
&lt;/p&gt;
&lt;p&gt;
While&amp;nbsp;doing that, I can&amp;nbsp;also change the SOAP Message on the fly and post
it instead of having to change the way&amp;nbsp;VS.NET XMLSerializer serializes the types
and then recompiling and running it again. Besides saving time, it does add an element
of oommph as well as there is no break in momentum and more importantly, audiences
really do see and can appreciate what is going onto the wire real-time.
&lt;/p&gt;
&lt;p&gt;
Being able to change the messages on the fly as well also lets you see very quickly
and clearly what the receiving endpoints can or cannot do. In this sense, with just
a few tweaks of the angle brackets, I can generate SOAP Faults at will and it gives
the audience great examples for learning how and when SOAP Faults are generated. For
example, &lt;em&gt;changing the element names&lt;/em&gt; OR &lt;em&gt;re-ordering the elements&lt;/em&gt; of
a SOAP Message and see what and how the receiving endpoint reacts. I will leave this
as an exercise to the reader.
&lt;/p&gt;
&lt;p&gt;
I have written a small tool to help me do that.&amp;nbsp;Recently, I have just added&amp;nbsp;an
ability to the application to allow it to post&amp;nbsp;SOAP&amp;nbsp;messages&amp;nbsp;over the
TCP Transport channel to a listening &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;-enabled SOAP Service.
&lt;/p&gt;
&lt;p&gt;
Granted,&amp;nbsp;most&amp;nbsp;people&amp;nbsp;will still need to manually pre-compose a SOAP
Message before-hand.&amp;nbsp;Do this&amp;nbsp;as part of your&amp;nbsp;pre-presentation work
and save the messages for posting to the receiving endpoints later. Of course, if
you are an angle bracket freak like &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,e777dbd4-eb6f-454e-b791-372d293a6ce4.aspx" target=_blank&gt;me&lt;/a&gt;&amp;nbsp;or &lt;a href="http://pluralsight.com/blogs/tewald/archive/2005/02/09/5702.aspx" target=_blank&gt;Tim&lt;/a&gt;&amp;nbsp;or &lt;a href="http://radovanjanecek.net/blog/archives/000181.html" target=_blank&gt;Radovan&lt;/a&gt;,
then you should all feel comfortable typing them into the textbox. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
Seriously though, this tool allows you to save your SOAP message scripts as part of
your preparation work. You can either post these as files (via the OpenFile Dialog&amp;nbsp;button)
or copy-n-paste those scripts into the textbox.
&lt;/p&gt;
&lt;p&gt;
I believe that this can serve some basic purpose scenarios. &lt;em&gt;Do note that besides
doing presentation work with this, I think this is a great tool for developers who
need to&amp;nbsp;further test&amp;nbsp;their SOAP Services to make sure it is able to generate
the exact SOAP Responses (SOAP Faults and all) with every single differing SOAP Request.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
For example, users testing their WSE-Enabled SOAP Services can change the wsu:Timestamp
element to test&amp;nbsp;the service timeouts or play around with the wsse:Security elements
of _WS-Security Specs_.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;&lt;font color=#ff0000&gt;[Pre-requisites]:&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
You will need to install the &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 Runtime for the TCP&amp;nbsp;Transport&amp;nbsp;function&amp;nbsp;to
work 
&lt;li&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3&amp;amp;displaylang=en" target=_blank&gt;.NET
Framework 1.1&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3144b72b-b4f2-46da-b4b6-c5d7485f2b42&amp;amp;displaylang=en" target=_blank&gt;MSXML
4 SP2&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;&lt;font color=#ff0000&gt;[Notes]:&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
This will only work for the Request-Response MEP for WSE-Enabled SOAP Services&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;&lt;font color=#ff0000&gt;[Upcoming Plans]:&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Incorporate the ability to listen for incoming SOAP Messages as well. So it will work
for truly asynchronous, duplex type SOAP Services as well 
&lt;li&gt;
...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I have made it available for download &lt;a href="http://www.softwaremaker.net/downloadsvcs/dsManualSOAPPost.asp" target=_blank&gt;here&lt;/a&gt;.&amp;nbsp;I
plan to make&amp;nbsp;the source codes&amp;nbsp;available once I incorporate most of the features
the market wants.
&lt;/p&gt;
&lt;p&gt;
Please feel free to leave your comments and feedback in this post so I know how to
better improve it.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.softwaremaker.net/pictures/manualsoappostpics/ManualSOAPPost_ScreenShot1.JPG"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=7deab38b-92af-446b-b7d8-6aa901007130" /&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>Community;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=e777dbd4-eb6f-454e-b791-372d293a6ce4</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,e777dbd4-eb6f-454e-b791-372d293a6ce4.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://pluralsight.com/blogs/tewald" target="_blank">Tim</a> and <a href="http://www.25hoursaday.com/weblog" target="_blank">Dare</a> had
some great exchanges <a href="http://pluralsight.com/blogs/tewald/archive/2005/02/10/5750.aspx" target="_blank">here</a> where
they discussed on the importance and significance of <a href="http://www.softwaremaker.net/blog/PermaLink,guid,cd3c52b8-7f7a-466e-a68c-149401598e13.aspx" target="_blank">staring
at angle brackets</a> and <a href="http://pluralsight.com/blogs/tewald/archive/2005/02/10/5735.aspx" target="_blank">service
reach</a>.
</p>
        <p>
Tim hit on a sweet spot which I can definitely identify with when he wrote this:
</p>
        <p>
          <em>
            <font face="Georgia" color="#008000">
              <strong>"Is it an issue in companies doing
lots of legacy integration work?"</strong>
            </font>
          </em>
        </p>
        <p>
I guess we all come from and work in different IT surrounding environments. I work
in a fairly large Systems Integrator where loads of our work revolves around integration
and maintainence of legacy systems in vertical Line-Of-Businesses. Since it is
also a free business environment, we also have to integrate with work done by other
SIs, systems and technology vendors as well. This is a fairly tough proposition and if
we are not involved in sitting around tables discussing how to integrate data formats
and semantics, we are usually thrown a stack of documents describing the data schemas
of other companies and people doing previous work with other technology systems.
</p>
        <p>
Now, XML-Schema is usually (Thank God for that) the agreed-upon format for describing
these data formats and that is all we have. Nothing more. Most of the time, we are
just given documents with table formats and we have to markup those table formats
in XSD ourselves.
</p>
        <p>
So, the XSD-Editor in Visual Studio is definitely a God-sent (Geek-speak, of course)
to generate the schema. I was left to my own barehands and notepad to create
the <a href="http://www.w3.org/TR/wsdl" target="_blank">WSDL</a>.
</p>
        <p>
No, other WSDL toolkits were not an option, cost-wise. <a href="http://www.thinktecture.com/" target="_blank">Thinktecture</a>'s <a href="http://www.thinktecture.com/Resources/Software/WSContractFirst/default.html" target="_blank">WSCF</a> definitely
gave us a huge productivity boost in terms of generation of those WSDL files. By that
time, our brains are so well-tuned to angle brackets that we could just hand-author
the resultant WSDL to produce the exact result we want. Examples include having multiple
service elements and soap:location address attributes for the same SOAP Binding, importing
of re-usable data schemas and the separation of abstact and concrete defintions in
the WSDL File. By doing all that, we built extensibility, versioing and interoperability
as well...and we went in there with our eyes wide open. Troubleshooting is relatively
a breeze now, one look at the SOAP Request and the WSDL; we know where and how the
SOAP Fault happens.
</p>
        <p>
Is that a problem with primitive tooling that can be solved down the road ? Maybe
and I truly hope so. In this instance, I hope that tool utility developer companies
can strive for that goal. I am, however, sceptical that a holy grail can be achieved
so soon.
</p>
        <p>
I still think, with all things status quo, that developers need to know <em><strong>explicity</strong></em><a href="http://hyperthink.net/blog/PermaLink,guid,15a482fe-48cb-4b0a-b1fc-cc394bf10fbc.aspx" target="_blank">what
goes onto the wire</a>. This has got nothing to do with what is the "native" or real
contract or the the <a href="http://hyperthink.net/blog/PermaLink,guid,46c804f0-1384-4752-9519-182d407f9253.aspx" target="_blank">canonical
forms</a> used to describe the messages. The problem is that when someone gives us
these contracts or schemas described in canonical forms, it is the only
thing we have that we best understood what is to be sent on the wire so that the other
end of the pipe can intepret, understand and process these messages.
</p>
        <p>
...Therefore, I have no choice to not just stare at angle brackets BUT understand what
it is <strong><em>trying to convey</em></strong> as well.
</p>
        <p>
p/s: One of my favourite <a href="http://webservices.xml.com/pub/a/ws/2003/07/22/wsdlfirst.html" target="_blank">article</a> that
exhorts the virtues of the Contract-First Approach
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e777dbd4-eb6f-454e-b791-372d293a6ce4" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>OK, I Admit: I Stare at Angle Brackets; I Gotta do it; I Do Not Enjoy doing it BUT it Helps by doing it</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,e777dbd4-eb6f-454e-b791-372d293a6ce4.aspx</guid>
      <link>http://www.softwaremaker.net/blog/OKIAdmitIStareAtAngleBracketsIGottaDoItIDoNotEnjoyDoingItBUTItHelpsByDoingIt.aspx</link>
      <pubDate>Mon, 14 Feb 2005 02:56:25 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://pluralsight.com/blogs/tewald" target=_blank&gt;Tim&lt;/a&gt; and &lt;a href="http://www.25hoursaday.com/weblog" target=_blank&gt;Dare&lt;/a&gt; had
some great exchanges &lt;a href="http://pluralsight.com/blogs/tewald/archive/2005/02/10/5750.aspx" target=_blank&gt;here&lt;/a&gt;&amp;nbsp;where
they discussed on the importance and significance of &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,cd3c52b8-7f7a-466e-a68c-149401598e13.aspx" target=_blank&gt;staring
at angle brackets&lt;/a&gt; and &lt;a href="http://pluralsight.com/blogs/tewald/archive/2005/02/10/5735.aspx" target=_blank&gt;service
reach&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Tim hit on a sweet spot which I can definitely identify with when he wrote this:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font face=Georgia color=#008000&gt;&lt;strong&gt;"Is it an issue in companies doing lots
of legacy integration work?"&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
I guess we all come from and work in different IT surrounding environments. I work
in a fairly large Systems Integrator where loads of our work revolves around integration
and maintainence of legacy systems in&amp;nbsp;vertical Line-Of-Businesses. Since it is
also a free business environment, we also have to integrate with work done by other
SIs, systems and technology vendors as well. This is a fairly tough proposition and&amp;nbsp;if
we are not involved in sitting around tables discussing how to integrate data formats
and semantics, we are usually thrown a stack of documents describing the data schemas
of other companies and people doing previous work with other technology systems.
&lt;/p&gt;
&lt;p&gt;
Now, XML-Schema is usually (Thank God for that) the agreed-upon format for describing
these data formats and that is all we have. Nothing more. Most of the time, we are
just given&amp;nbsp;documents with table formats and we have to markup those table formats
in XSD ourselves.
&lt;/p&gt;
&lt;p&gt;
So, the XSD-Editor in Visual Studio is definitely a God-sent (Geek-speak, of course)
to generate the schema.&amp;nbsp;I was left to&amp;nbsp;my own barehands and notepad to create
the &lt;a href="http://www.w3.org/TR/wsdl" target="_blank"&gt;WSDL&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
No, other WSDL toolkits were not an option, cost-wise. &lt;a href="http://www.thinktecture.com/" target=_blank&gt;Thinktecture&lt;/a&gt;'s&amp;nbsp;&lt;a href="http://www.thinktecture.com/Resources/Software/WSContractFirst/default.html" target=_blank&gt;WSCF&lt;/a&gt;&amp;nbsp;definitely
gave us a huge productivity boost in terms of generation of those WSDL files. By that
time, our brains are so well-tuned to angle brackets that we could just hand-author
the resultant WSDL to produce the exact result we want. Examples include having multiple
service elements and soap:location address attributes for the same SOAP Binding, importing
of re-usable data schemas and the separation of abstact and concrete defintions in
the WSDL File. By doing all that, we built extensibility, versioing and interoperability
as well...and we went in there with our eyes wide open. Troubleshooting is relatively
a breeze now, one look at the SOAP Request and the WSDL; we know where and how the
SOAP Fault happens.
&lt;/p&gt;
&lt;p&gt;
Is that a problem with primitive tooling that can be solved down the road ? Maybe
and I truly hope so. In this instance, I hope that tool utility developer companies
can strive for that goal. I am, however, sceptical that a holy grail can be achieved
so soon.
&lt;/p&gt;
&lt;p&gt;
I still think, with all things status quo, that developers need to know &lt;em&gt;&lt;strong&gt;explicity&lt;/strong&gt;&lt;/em&gt; &lt;a href="http://hyperthink.net/blog/PermaLink,guid,15a482fe-48cb-4b0a-b1fc-cc394bf10fbc.aspx" target=_blank&gt;what
goes onto the wire&lt;/a&gt;. This has got nothing to do with what is the "native" or real
contract or the the &lt;a href="http://hyperthink.net/blog/PermaLink,guid,46c804f0-1384-4752-9519-182d407f9253.aspx" target=_blank&gt;canonical
forms&lt;/a&gt; used to describe the messages. The problem is that when someone gives us
these contracts&amp;nbsp;or schemas&amp;nbsp;described in canonical forms, it is the only
thing we have that we best understood what is to be sent on the wire so that the other
end of the pipe can intepret, understand and process these messages.
&lt;/p&gt;
&lt;p&gt;
...Therefore,&amp;nbsp;I have no choice&amp;nbsp;to not just stare at angle brackets BUT&amp;nbsp;understand&amp;nbsp;what
it is &lt;strong&gt;&lt;em&gt;trying to convey&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;as well.
&lt;/p&gt;
&lt;p&gt;
p/s: One of my favourite &lt;a href="http://webservices.xml.com/pub/a/ws/2003/07/22/wsdlfirst.html" target=_blank&gt;article&lt;/a&gt; that
exhorts the virtues of the Contract-First Approach
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e777dbd4-eb6f-454e-b791-372d293a6ce4" /&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>Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=e97de40f-7bb3-49da-ab62-a4a93c2a2d4a</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,e97de40f-7bb3-49da-ab62-a4a93c2a2d4a.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Can anyone be surprised with <a href="http://www.internetnews.com/infra/article.php/3482416" target="_blank">Cisco's
decision to enter the XML Messaging market</a> ? With the rapid propagation of
XML into the mainstream market esp in the areas of XML Messaging (aka XML SOAP Services),
Middleware, Brokering, Intermediaries, it is about time customers get more choices
and exposure in this arena.
</p>
        <p>
With Cisco in this segment of the market, I do expect <strong><em>more</em></strong> alternatives
and choices in XML Boxes to be had by customers and them paying <em><strong>lesser</strong></em> as
well.
</p>
        <p>
I still remember very clearly it was only less than 2 years back when
I brought up the idea of introducing an XML Firewall into a client's environment
by then <a href="http://www.flamenconetworks.com/" target="_blank">Flamenco Networks</a> (which
is now acquired by <a href="http://www.digev.com/" target="_blank">Digital Evolution</a>)
and being pooed-pooed right in my face on how a text-based representation can be used
for messaging and how the contents of this representation can be <em>inspected</em> at
wire-speed at the hardware level.
</p>
        <p>
Well, Moore's Law has made it so that the price and speed of <em>high-powered specialized
processing</em> such as <a href="http://www.w3.org/TR/xmlenc-core/" target="_blank">XML-Encryption</a> and <a href="http://www.w3.org/TR/xmldsig-core/" target="_blank">XML-Digital
Signature</a> besides just plain <em>inspecting</em> and <em>routing</em> of SOAP
packets can be made available to the grasp of the general masses. This will also bring
forward the concept of Application-Oriented Networking into the market. I dunno BUT
are we seeing another layer of abstraction into the mix now ?
</p>
        <p>
Too bad this client is not around anymore for me to say "I told you so..."
</p>
        <p>
I am very interested to see how this whole affair pans out with the middleware app-server
companies such as <a href="http://www.ibm.com/" target="_blank">Big Blue</a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=e97de40f-7bb3-49da-ab62-a4a93c2a2d4a" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>It is about time, Cisco</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,e97de40f-7bb3-49da-ab62-a4a93c2a2d4a.aspx</guid>
      <link>http://www.softwaremaker.net/blog/ItIsAboutTimeCisco.aspx</link>
      <pubDate>Sat, 12 Feb 2005 08:28:11 GMT</pubDate>
      <description>&lt;p&gt;
Can anyone be surprised with &lt;a href="http://www.internetnews.com/infra/article.php/3482416" target=_blank&gt;Cisco's
decision to enter the XML Messaging market&lt;/a&gt;&amp;nbsp;? With the rapid propagation of
XML into the mainstream market esp in the areas of XML Messaging (aka XML SOAP Services),
Middleware, Brokering, Intermediaries, it is about time customers get more choices
and exposure in this arena.
&lt;/p&gt;
&lt;p&gt;
With&amp;nbsp;Cisco in this segment of the market, I do expect &lt;strong&gt;&lt;em&gt;more&lt;/em&gt;&lt;/strong&gt; alternatives
and choices in XML Boxes to be had by customers and them paying &lt;em&gt;&lt;strong&gt;lesser&lt;/strong&gt;&lt;/em&gt; as
well.
&lt;/p&gt;
&lt;p&gt;
I still remember&amp;nbsp;very clearly it was only&amp;nbsp;less than 2&amp;nbsp;years back when
I brought up the idea of&amp;nbsp;introducing an XML Firewall into a client's environment
by then &lt;a href="http://www.flamenconetworks.com/" target=_blank&gt;Flamenco Networks&lt;/a&gt;&amp;nbsp;(which
is now acquired by &lt;a href="http://www.digev.com/" target=_blank&gt;Digital Evolution&lt;/a&gt;)
and being pooed-pooed right in my face on how a text-based representation can be used
for messaging and how the contents of this representation can be &lt;em&gt;inspected&lt;/em&gt; at
wire-speed at the hardware level.
&lt;/p&gt;
&lt;p&gt;
Well, Moore's Law has made it so that the price and speed of &lt;em&gt;high-powered specialized
processing&lt;/em&gt; such as &lt;a href="http://www.w3.org/TR/xmlenc-core/" target="_blank"&gt;XML-Encryption&lt;/a&gt; and &lt;a href="http://www.w3.org/TR/xmldsig-core/" target="_blank"&gt;XML-Digital
Signature&lt;/a&gt; besides just plain &lt;em&gt;inspecting&lt;/em&gt; and &lt;em&gt;routing&lt;/em&gt; of SOAP
packets can be made available to the grasp of the general masses. This will also bring
forward the concept of Application-Oriented Networking into the market. I dunno BUT
are we seeing another layer of abstraction into the mix now ?
&lt;/p&gt;
&lt;p&gt;
Too bad&amp;nbsp;this client is&amp;nbsp;not around anymore for me to say "I told you so..."
&lt;/p&gt;
&lt;p&gt;
I am very interested to see how this whole affair pans out with the middleware app-server
companies such as &lt;a href="http://www.ibm.com/" target=_blank&gt;Big Blue&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=e97de40f-7bb3-49da-ab62-a4a93c2a2d4a" /&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>Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=21c08ef8-f8b0-4f0c-81fd-51b6b28e319b</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,21c08ef8-f8b0-4f0c-81fd-51b6b28e319b.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.oasis-open.org" target="_blank">OASIS</a>
        <a href="http://www.webservices.org/index.php/ws/content/view/full/54036" target="_blank">ratifies</a> UDDI
version 3 as Standard <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=uddi-spec" target="_blank">here</a><img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=21c08ef8-f8b0-4f0c-81fd-51b6b28e319b" /><br /><hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>UDDI version 3 is Standard</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,21c08ef8-f8b0-4f0c-81fd-51b6b28e319b.aspx</guid>
      <link>http://www.softwaremaker.net/blog/UDDIVersion3IsStandard.aspx</link>
      <pubDate>Mon, 07 Feb 2005 14:45:35 GMT</pubDate>
      <description>&lt;a href="http://www.oasis-open.org" target="_blank"&gt;OASIS&lt;/a&gt; &lt;a href="http://www.webservices.org/index.php/ws/content/view/full/54036" target=_blank&gt;ratifies&lt;/a&gt; UDDI
version 3 as Standard&amp;nbsp;&lt;a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=uddi-spec" target=_blank&gt;here&lt;/a&gt;&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=21c08ef8-f8b0-4f0c-81fd-51b6b28e319b" /&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>Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=bc77f7f9-5dba-4565-9c69-65f4208e6be5</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,bc77f7f9-5dba-4565-9c69-65f4208e6be5.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.sda-asia.com" target="_blank">SDA-Asia</a> has recently published
one of my articles <a href="http://www.sda-asia.com/sda/article/psecom,id,9,nodeid,5,_language,Singapore.html" target="_blank">online</a>.
In this article, I talked about how <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> can be used to solve Real-World business problems
with some proper thought and design processes.
</p>
        <p>
This is not as technical an article comparred to the ones I have written
before, however, I feel it gives a good overview and insight to what the advanced XML services
are and how to make use of some of them to solve some of the business problems
of today...and needless to say, WSE 2.0 is <strong><em>THE</em></strong> tool
to do that today in .NET
</p>
        <p>
I have spent a fair amount of time writing up a <em><strong>REAL </strong></em>technical
article (on WSE, of course) recently which I hope will get published soon enough.
Will update all once it goes live. Enjoy.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=bc77f7f9-5dba-4565-9c69-65f4208e6be5" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Online for CXOs: A brief overview of how WSE can be used to solve Real-World business problems</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,bc77f7f9-5dba-4565-9c69-65f4208e6be5.aspx</guid>
      <link>http://www.softwaremaker.net/blog/OnlineForCXOsABriefOverviewOfHowWSECanBeUsedToSolveRealWorldBusinessProblems.aspx</link>
      <pubDate>Sun, 06 Feb 2005 13:00:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.sda-asia.com" target=_blank&gt;SDA-Asia&lt;/a&gt; has recently published
one of my articles &lt;a href="http://www.sda-asia.com/sda/article/psecom,id,9,nodeid,5,_language,Singapore.html" target=_blank&gt;online&lt;/a&gt;.
In this article, I talked about how &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; can be used to solve Real-World business problems
with some proper thought and design processes.
&lt;/p&gt;
&lt;p&gt;
This is&amp;nbsp;not as technical an&amp;nbsp;article comparred to the ones I have written
before, however, I feel it gives a good overview and insight to what the advanced&amp;nbsp;XML&amp;nbsp;services
are and how to make use of some of them&amp;nbsp;to solve some of the business problems
of today...and needless to say, WSE 2.0 is&amp;nbsp;&lt;strong&gt;&lt;em&gt;THE&lt;/em&gt;&lt;/strong&gt; tool
to do that today in .NET
&lt;/p&gt;
&lt;p&gt;
I have&amp;nbsp;spent a fair amount of time writing up a&amp;nbsp;&lt;em&gt;&lt;strong&gt;REAL &lt;/strong&gt;&lt;/em&gt;technical
article (on WSE, of course) recently which I hope will get published soon enough.
Will update all once it goes live. Enjoy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=bc77f7f9-5dba-4565-9c69-65f4208e6be5" /&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>Biz Matters;Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=c032d957-d6a3-4b2f-bd47-cea9aecf401b</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,c032d957-d6a3-4b2f-bd47-cea9aecf401b.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Bill Gates <a href="http://www.microsoft.com/mscorp/execmail/" target="_blank">talks</a> about
Microsoft's commitment to interop
</p>
Any questions ?<img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=c032d957-d6a3-4b2f-bd47-cea9aecf401b" /><br /><hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Microsoft's committment to Interoperability</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,c032d957-d6a3-4b2f-bd47-cea9aecf401b.aspx</guid>
      <link>http://www.softwaremaker.net/blog/MicrosoftsCommittmentToInteroperability.aspx</link>
      <pubDate>Fri, 04 Feb 2005 00:43:49 GMT</pubDate>
      <description>&lt;p&gt;
Bill Gates &lt;a href="http://www.microsoft.com/mscorp/execmail/" target=_blank&gt;talks&lt;/a&gt; about
Microsoft's commitment to interop
&lt;/p&gt;
Any questions ?&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=c032d957-d6a3-4b2f-bd47-cea9aecf401b" /&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>Software Architectures;Technology;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=84298cd8-5bbb-43aa-bb86-6bf4fa9b634d</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,84298cd8-5bbb-43aa-bb86-6bf4fa9b634d.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Finally, <a href="http://www.w3.org/TR/2005/REC-soap12-mtom-20050125/" target="_blank">this</a> is
done. Read the cover story <a href="http://xml.coverpages.org/ni2005-01-25-a.html" target="_blank">here</a>.
</p>
        <p>
Even though I usually dont advocate the use of SOAP to transfer large BLOBS of binary
bits (I tend to think that there are slightly better ways of transferring files and/or
attachments), I do believe that there will be more and more calls for uses for it
and that is why I think this is an important specification which is way better
than <a href="http://www.w3.org/" target="_blank">W3C</a>'s <a href="http://www.w3.org/TR/SOAP-attachments" target="_blank">SwA</a> or <a href="http://www.microsoft.com" target="_blank">MSFT
Corp</a>'s/<a href="http://www.ietf.org" target="_blank">IETF</a>'s  <a href="http://searchwebservices.techtarget.com/sDefinition/0,,sid26_gci921975,00.html" target="_blank">DIME</a> (<strong><em>Can
you say Security ?</em></strong>). The latter, incidentally, is being implemented
by <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 1 and 2.
</p>
        <p>
Of course, since DIME is being superseded by MTOM, I am really looking forward (<em>hopefully</em>)
to the implementations of it in WSE 3.0
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=84298cd8-5bbb-43aa-bb86-6bf4fa9b634d" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>MTOM just got REC status on W3C</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,84298cd8-5bbb-43aa-bb86-6bf4fa9b634d.aspx</guid>
      <link>http://www.softwaremaker.net/blog/MTOMJustGotRECStatusOnW3C.aspx</link>
      <pubDate>Wed, 26 Jan 2005 09:16:26 GMT</pubDate>
      <description>&lt;p&gt;
Finally, &lt;a href="http://www.w3.org/TR/2005/REC-soap12-mtom-20050125/" target=_blank&gt;this&lt;/a&gt; is
done. Read the cover story &lt;a href="http://xml.coverpages.org/ni2005-01-25-a.html" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Even though I usually dont advocate the use of SOAP to transfer large BLOBS of binary
bits (I tend to think that there are slightly better ways of transferring files and/or
attachments), I do believe that there will be more and more calls for uses for it
and that is why I think this is an important specification&amp;nbsp;which is way better
than &lt;a href="http://www.w3.org/" target="_blank"&gt;W3C&lt;/a&gt;'s &lt;a href="http://www.w3.org/TR/SOAP-attachments" target=_blank&gt;SwA&lt;/a&gt; or &lt;a href=http://www.microsoft.com target=_blank&gt;MSFT
Corp&lt;/a&gt;'s/&lt;a href="http://www.ietf.org" target="_blank"&gt;IETF&lt;/a&gt;'s &amp;nbsp;&lt;a href="http://searchwebservices.techtarget.com/sDefinition/0,,sid26_gci921975,00.html" target=_blank&gt;DIME&lt;/a&gt;&amp;nbsp;(&lt;strong&gt;&lt;em&gt;Can
you say Security ?&lt;/em&gt;&lt;/strong&gt;). The latter, incidentally, is being implemented
by &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; 1 and 2.
&lt;/p&gt;
&lt;p&gt;
Of course, since DIME is being superseded by MTOM, I am really looking forward (&lt;em&gt;hopefully&lt;/em&gt;)
to the implementations of it in WSE 3.0
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=84298cd8-5bbb-43aa-bb86-6bf4fa9b634d" /&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>Technology;WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=78f77920-5a90-42bf-a9a7-a4bf0dcf9215</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,78f77920-5a90-42bf-a9a7-a4bf0dcf9215.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recently extended a chat program written in <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 2.0 utililizing the TCP transport protocol. I wanted
it to run over the internet now. This was prompted by some members of our <a href="http://www.sgdotnet.org/" target="_blank">Singapore
Professional DotNet Usergroup</a> who wanted to <a href="http://forums.sgdotnet.org/ShowPost.aspx?PostID=9073" target="_blank">implement</a> a
mini Pub-Sub (aka WS-Eventing) project using the tcp protocol.
</p>
        <p>
They had indicated that they had some trouble binding the FQDN specified for
the URI in the EndpointReference to a local network interface. If this cannot be resolved,
the binding will fail.
</p>
        <p>
At the most basic level, the EndpointReference.Address is both the name of the target
and its location. For example, [http://localhost/SomeService] can be used as a name
and a transport address. WSE 2.0 comes with an extended model to allow a single named
service to be hosted on multiple transport addresses. This can also be useful if we
want to apply a single corporate policy on them.
</p>
        <p>
This is where EndpointReference.Via comes in. It allows you to host a well-known service
that can only be accessible via different transports such as the soap.tcp protocol
of WSE 2.0 and others.
</p>
        <p>
For example, my well-known service is hosted at soap.tcp://softwaremaker.net:2088
(or soap.tcp://219.74.47.214:2088, if you dont have a DNS tagged to it). This
is the public FQDN address of the service. For the broadband cable and ADSL users
of dynamic IPs, this address may be the address of your home network router.
</p>
        <p>
Now, your WSE 2.0 application has a SOAP Receiver object that allows your application
to listen for SOAP requests coming in on WSE2-custom defined transports. Once you define
your own address on your own listening machine such as soap.tcp://192.168.2.100:2088/Softwaremaker,
you would now have 2 URIs:
</p>
        <p>
Public Facing: soap.tcp://softwaremaker.net:2088<br />
Private Internal: soap.tcp://192.168.2.100:2088/Softwaremaker
</p>
        <p>
The Public Facing well-known URI becomes the EndpointReference.Address while the transport
address mechanism becomes the EndpointReference.Via
</p>
        <p>
In other words, soap.tcp://192.168.2.100:2088/Softwaremaker will listen for any messages
that is sent to soap.tcp://softwaremaker.net:2088 (the address element in the WS-Addressing
headers). Put it in another way, the custom soap.tcp transport will only
accept messages sent to soap.tcp://softwaremaker.net:2088 if they arrive via the internal
address:192.168.2.100.
</p>
        <p>
The Via address is not in the message itself, only the well-known URI is. Based on
the network address the message is being received on, the custom soap.tcp transport
mechanism will know how use both well-known and private URIs to dispatch the message
to the registered and configured-properly SOAP Receiver.
</p>
        <p>
          <strong>
            <em>
              <font face="Georgia">    EndpointReference EPR = new
EndpointReference<br />
    (new Address(new Uri("soap.tcp://softwaremaker.net:2088")),</font>
              <br />
    <font face="Georgia">new Via(new Uri(<font face="Verdana">"soap.tcp://192.168.2.100:2088/Softwaremaker"</font>)));</font></em>
          </strong>
        </p>
        <p>
          <font face="Georgia">
            <em>
              <strong>    SoapReceivers.Add(EPR, yourOwnSoapReceiver);</strong>
            </em>
          </font>
        </p>
        <p>
The last step you need to take is to be able to forward all requests going to the
well-known URI (soap.tcp://softwaremaker.net:2088) to your local machine with the
internal IP 192.168.2.100:2088
</p>
        <p>
This is not something you can do in WSE 2.0 or in your machine. This has to be done
at your broadband or cable router. You just have to forward requests coming in to
your Public port:2088 to the Private port:2088 of machine 192.168.2.100 (Note that
these ports doesnt have to be the same number at all)
</p>
        <p>
Of course, the huge assumption is that you have control over the port routing and
forwarding of your broadband or cable router (<em>which may be rather tricky if you
are within a corporate or organizational boundary</em>) BUT technically, you will
be able to carry out a p-2-p SOAP message chat or even do a Pub/Sub model approach
with your own implementation of the “Notification” and “Solicit-Response” message-exchange
patterns over the internet using the custom soap.tcp protocol of WSE 2.0
</p>
        <p>
          <font color="#ff0000">
            <strong>[Author Note] What do ya know ? I just found that that
Hervey has got an even better post on the EndpointReference.Via of WSE 2.0 </strong>
          </font>
          <a href="http://www.dynamic-cast.com/mt-archives/000050.html" target="_blank">here</a>.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=78f77920-5a90-42bf-a9a7-a4bf0dcf9215" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>The wonders of EndpointReference.Via in WSE 2.0</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,78f77920-5a90-42bf-a9a7-a4bf0dcf9215.aspx</guid>
      <link>http://www.softwaremaker.net/blog/TheWondersOfEndpointReferenceViaInWSE20.aspx</link>
      <pubDate>Wed, 19 Jan 2005 01:47:59 GMT</pubDate>
      <description>&lt;p&gt;
I&amp;nbsp;recently extended a chat program written in &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 utililizing the TCP transport protocol. I wanted
it to run over the internet now. This was prompted by some members of our &lt;a href="http://www.sgdotnet.org/" target=_blank&gt;Singapore
Professional DotNet Usergroup&lt;/a&gt; who wanted to &lt;a href="http://forums.sgdotnet.org/ShowPost.aspx?PostID=9073" target=_blank&gt;implement&lt;/a&gt; a
mini Pub-Sub (aka WS-Eventing)&amp;nbsp;project using the tcp protocol.
&lt;/p&gt;
&lt;p&gt;
They had indicated that they had some trouble binding the&amp;nbsp;FQDN specified for
the URI in the EndpointReference to a local network interface. If this cannot be resolved,
the binding will fail.
&lt;/p&gt;
&lt;p&gt;
At the most basic level, the EndpointReference.Address is both the name of the target
and its location. For example, [http://localhost/SomeService] can be used as a name
and a transport address. WSE 2.0 comes with an extended model to allow a single named
service to be hosted on multiple transport addresses. This can also be useful if we
want to apply a single corporate policy on them.
&lt;/p&gt;
&lt;p&gt;
This is where EndpointReference.Via comes in. It allows you to host a well-known service
that can only be accessible via different transports such as the soap.tcp protocol
of WSE 2.0 and others.
&lt;/p&gt;
&lt;p&gt;
For example, my well-known service is hosted at soap.tcp://softwaremaker.net:2088
(or soap.tcp://219.74.47.214:2088, if you dont have a&amp;nbsp;DNS tagged to it).&amp;nbsp;This
is the public FQDN address of the service. For the broadband cable and ADSL users
of dynamic IPs, this address may be the address of your home network router.
&lt;/p&gt;
&lt;p&gt;
Now, your WSE 2.0 application has a SOAP Receiver object that allows your application
to listen for SOAP requests coming in on WSE2-custom defined transports. Once you&amp;nbsp;define
your own address on your own listening machine such as soap.tcp://192.168.2.100:2088/Softwaremaker,
you would now have 2 URIs:
&lt;/p&gt;
&lt;p&gt;
Public Facing: soap.tcp://softwaremaker.net:2088&lt;br&gt;
Private Internal: soap.tcp://192.168.2.100:2088/Softwaremaker
&lt;/p&gt;
&lt;p&gt;
The Public Facing well-known URI becomes the EndpointReference.Address while the transport
address mechanism becomes the EndpointReference.Via
&lt;/p&gt;
&lt;p&gt;
In other words, soap.tcp://192.168.2.100:2088/Softwaremaker will listen for any messages
that is sent to soap.tcp://softwaremaker.net:2088 (the address element in the WS-Addressing
headers).&amp;nbsp;Put it in&amp;nbsp;another way, the custom soap.tcp transport will only
accept messages sent to soap.tcp://softwaremaker.net:2088 if they arrive via the internal
address:192.168.2.100.
&lt;/p&gt;
&lt;p&gt;
The Via address is not in the message itself, only the well-known URI is. Based on
the network address the message is being received on, the custom soap.tcp transport
mechanism will know how use both well-known and private URIs to dispatch the message
to the registered and configured-properly SOAP Receiver.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;&lt;font face=Georgia&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EndpointReference EPR = new
EndpointReference&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(new Address(new Uri("soap.tcp://softwaremaker.net:2088")),&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font face=Georgia&gt;new Via(new Uri(&lt;font face=Verdana&gt;"soap.tcp://192.168.2.100:2088/Softwaremaker"&lt;/font&gt;)));&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Georgia&gt;&lt;em&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SoapReceivers.Add(EPR, yourOwnSoapReceiver);&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
The last step you need to take is to be able to forward all requests going to the
well-known URI (soap.tcp://softwaremaker.net:2088) to your local machine with the
internal IP 192.168.2.100:2088
&lt;/p&gt;
&lt;p&gt;
This is not something you can do in WSE 2.0 or in your machine. This has to be done
at your broadband or cable router. You just have to forward requests coming in to
your Public port:2088 to the Private port:2088 of machine 192.168.2.100 (Note that
these ports doesnt have to be the same number at all)
&lt;/p&gt;
&lt;p&gt;
Of course, the huge assumption is that you have control over the port routing and
forwarding of your broadband or cable router (&lt;em&gt;which may be rather tricky if you
are within a corporate or organizational boundary&lt;/em&gt;) BUT technically, you will
be able to carry&amp;nbsp;out a p-2-p SOAP message chat or even do a Pub/Sub model approach
with your own implementation of the “Notification” and “Solicit-Response” message-exchange
patterns over the internet using the custom soap.tcp protocol of WSE 2.0
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#ff0000&gt;&lt;strong&gt;[Author Note] What do ya know ? I just found that that
Hervey has got an even better post on the EndpointReference.Via of WSE 2.0 &lt;/strong&gt;&lt;/font&gt;&lt;a href="http://www.dynamic-cast.com/mt-archives/000050.html" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=78f77920-5a90-42bf-a9a7-a4bf0dcf9215" /&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>Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=f97dad7f-362e-41fe-bd5f-0c6906946c69</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,f97dad7f-362e-41fe-bd5f-0c6906946c69.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://spaces.msn.com/members/staceyw/" target="_blank">William Stacy</a> has
a new <a href="http://spaces.msn.com/members/staceyw/PersonalSpace.aspx?_c01_blogpart=blogmgmt&amp;_c=blogpart" target="_blank">blog</a> in
MSN Spaces and he blogged about a topic that has spurned from recent activities in the
WSE newsgroups.
</p>
        <p>
It is about the security and the use of username tokens in the real world, specifically
when it relates to passwords being stored as hash in the user database.
</p>
        <p>
William proposes a method <a href="http://spaces.msn.com/members/staceyw/Blog/cns!1pnsZpX0fPvDxLKC6rAAhLsQ!155.entry" target="_blank">here</a> to
solve the issue of how to authenticate username tokens embedded in _WS-Security Specs_
security headers.
</p>
        <p>
In my own opinion, his case represents a very major common representation of how passwords
are stored in the database. They are mostly and SHOULD be hased. To add another realm
of security, SALT is used. However, I dont really agree that his method may prove
to more secure. In fact, I think it gives a somewhat false sense of security (and
William, please correct me if I am wrong anywhere).
</p>
        <p>
          <strong>1)</strong>   By using your verifier as a matching mechanism to
gain authentication, then this verifier (SALT Hash and all) effectively becomes a
password. If Mallet steals the hash from the user database, nothing prevents him/her
from writing a client that sends the hash and thus he would authenticate successfully.
This is exactly what the hash scheme is trying to avoid in the first place. 
</p>
        <p>
          <em>
            <strong>If used this way, the hash is no safer than storing the passwords in clear
text in the database...which ultimately means that the weakest link is still the security of
the Username Database which must be protected at all costs.</strong>
          </em>
        </p>
        <p>
In other words, this must be made known clearly so that it doesnt preach a false sense
of security that people think that this scheme NOT only protects their
cleartext password BUT also their SOAP calls as well.
</p>
        <p>
This post <a href="http://haacked.com/archive/2004/11/04/1565.aspx" target="_blank">here</a> explains
real well on my thoughts as well.
</p>
        <p>
          <strong>2)</strong>   SALT should be a completely random value and should
be algorithmically introduced to further obfuscate the one-way hash. In your approach,
it seems that the SALT is tied very much to your username (am I wrong ?). This doesnt
help much because I dont need to guess your publicly-available username, there are
only a handful of hashing algorithms out there and you are NOT passing any SALT
into your PasswordDeriveBytes constructor. In fact, the only saving grace is the iteration
count which basically sets the number of iterations for the operation. Is that enough
? I believe it may serve well for some smaller-scale simpler systems BUT I dont know
how it sits well with some of the security policies of bigger enterprises.
</p>
        <p>
IMHO, I think the current username tokens as defined by WS-Security doesnt fit very
well into most EXISTING user databases which store passwords as hashes which may or
may not be SALTED. I dont think there is a clean way to do this in WSE without using
or representing the hashes as passwords. However, I am still thinking about this issue
and will blog more about it later if (not when) I reach enlightenment. <img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif" /></p>
        <p>
Your approach, however, does allow passwords to remain as they are in the EXISTING
user databases. The only obstacle you require is a change in the schema of that table,
which requires management approval and buy-in and usually triggers off many other
related procedures, and that in my experience, is sometimes harder than finding the
password from a hash. <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" /></p>
        <p>
[Author Note]: This topic has got nothing to do with the security of username tokens
as I have blogged about earlier <a href="http://www.softwaremaker.net/blog/PermaLink,guid,20f8fcb0-a5eb-41b4-8ddf-217f4e338cf1.aspx" target="_blank">here</a>.
This is all about the authentication of username tokens with the stored credentials
in the user databases.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=f97dad7f-362e-41fe-bd5f-0c6906946c69" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Further hammering the UsernameTokens, WS-Security Headers, Passwords and Hash issues</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,f97dad7f-362e-41fe-bd5f-0c6906946c69.aspx</guid>
      <link>http://www.softwaremaker.net/blog/FurtherHammeringTheUsernameTokensWSSecurityHeadersPasswordsAndHashIssues.aspx</link>
      <pubDate>Wed, 12 Jan 2005 23:09:54 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://spaces.msn.com/members/staceyw/" target=_blank&gt;William Stacy&lt;/a&gt; has
a new &lt;a href="http://spaces.msn.com/members/staceyw/PersonalSpace.aspx?_c01_blogpart=blogmgmt&amp;amp;_c=blogpart" target=_blank&gt;blog&lt;/a&gt; in
MSN Spaces and he blogged about a topic that has spurned from recent activities&amp;nbsp;in&amp;nbsp;the
WSE newsgroups.
&lt;/p&gt;
&lt;p&gt;
It is about the security and the use of username tokens in the real world, specifically
when it relates to passwords being stored as hash in the user database.
&lt;/p&gt;
&lt;p&gt;
William proposes a method &lt;a href="http://spaces.msn.com/members/staceyw/Blog/cns!1pnsZpX0fPvDxLKC6rAAhLsQ!155.entry" target=_blank&gt;here&lt;/a&gt; to
solve the issue of how to authenticate username tokens embedded in _WS-Security Specs_
security headers.
&lt;/p&gt;
&lt;p&gt;
In my own opinion, his case represents a very major common representation of how passwords
are stored in the database. They are mostly and SHOULD be hased. To add another realm
of security, SALT is used. However, I dont really agree that his method may prove
to more secure. In fact, I think it gives a somewhat false sense of security (and
William, please correct me if I am wrong anywhere).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1)&lt;/strong&gt;&amp;nbsp;&amp;nbsp; By using your verifier as a matching mechanism to
gain authentication, then this verifier (SALT Hash and all) effectively becomes a
password. If Mallet steals the hash from the user database, nothing prevents him/her
from writing a client that sends the hash and thus he would authenticate successfully.
This is exactly what the hash scheme is trying to avoid in the first place. 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;If used this way, the hash is no safer than storing the passwords in clear
text in the database...which ultimately means that the weakest link is still the security&amp;nbsp;of
the Username Database which must be protected at all costs.&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
In other words, this must be made known clearly so that it doesnt preach a false sense
of security&amp;nbsp;that&amp;nbsp;people&amp;nbsp;think that this scheme NOT only protects their
cleartext password BUT also their SOAP calls as well.
&lt;/p&gt;
&lt;p&gt;
This post &lt;a href="http://haacked.com/archive/2004/11/04/1565.aspx" target=_blank&gt;here&lt;/a&gt; explains
real well on my thoughts as well.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2)&lt;/strong&gt;&amp;nbsp;&amp;nbsp; SALT should be a completely random value and should
be algorithmically introduced to further obfuscate the one-way hash. In your approach,
it seems that the SALT is tied very much to your username (am I wrong ?). This doesnt
help much because I dont need to guess your publicly-available username, there are
only a handful of hashing algorithms out there and you are NOT&amp;nbsp;passing any SALT
into your PasswordDeriveBytes constructor. In fact, the only saving grace is the iteration
count which basically sets the number of iterations for the operation. Is that enough
? I believe it may serve well for some smaller-scale simpler systems BUT I dont know
how it sits well with some of the security policies of bigger enterprises.
&lt;/p&gt;
&lt;p&gt;
IMHO, I think the current username tokens as defined by WS-Security doesnt fit very
well into most EXISTING user databases which store passwords as hashes which may or
may not be SALTED. I dont think there is a clean way to do this in WSE without using
or representing the hashes as passwords. However, I am still thinking about this issue
and will blog more about it later if (not when) I reach enlightenment. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
Your approach, however, does allow passwords to remain as they are in the EXISTING
user databases. The only obstacle you require is a change in the schema of that table,
which requires management approval and buy-in and usually triggers off many other
related procedures, and that in my experience, is sometimes harder than finding the
password from a hash. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
[Author Note]: This topic has got nothing to do with the security of username tokens
as I have blogged about earlier &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,20f8fcb0-a5eb-41b4-8ddf-217f4e338cf1.aspx" target=_blank&gt;here&lt;/a&gt;.
This is all about the authentication of username tokens with the stored credentials
in the user databases.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=f97dad7f-362e-41fe-bd5f-0c6906946c69" /&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>Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=7244d041-5f52-48f2-98a2-a6cb00a5ad7e</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,7244d041-5f52-48f2-98a2-a6cb00a5ad7e.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After installing <a href="http://msdn2.microsoft.com/en-us/webservices/aa740663.aspx" target="_blank" title="Web Services Enchancements">Web
Services Enhancements (WSE)</a> 2.0 SP2, the most natural thing for me to do is to
run my previous WSE 2.0 SP1 projects and see if it works with the new assembly.
</p>
        <p>
Most of it still do run &lt;phew&gt;. A couple of them (specifically the SOAP Routing
ones) did NOT run as intended. A further drilldown into the code revealed that the
ExtendedSecurity doesnt serialize properly if you are planning to send another set
of Security Headers to the next SOAP node...In fact, it doesnt get serialized
at all.
</p>
        <p>
...Obviously, this next node cannot be the ultimate soap receiver as target service
cannot process 2 security headers as specified in the _WS-Security Specs_. You can
refer to my previous discussions with <a href="http://www.dynamic-cast.com/" target="_blank">HerveyW</a><a href="http://www.dynamic-cast.com/mt-archives/000069.html" target="_blank">here</a> and <a href="http://www.softwaremaker.net/blog/PermaLink,guid,1508b8a2-a4f5-49a3-beb4-15725f0b0f59.aspx" target="_blank">here</a>.
</p>
        <p>
So, if your next node is another SOAP Router and you need a different set of Security
Headers for the next node to process, this is how to do it with the ExtendedSecurity
function in SP2:
</p>
        <p>
You need to add a Security Utility Timestamp into the Security Header in order for
the ExtendedSecurity function to serialize a new set of Security Headers properly.
</p>
        <p>
          <font face="Georgia" color="#ff0000">
            <strong>Dim t As Utility.Timestamp = AnotherSecurityHeaderBlock.Timestamp</strong>
          </font>
        </p>
        <p>
Thereafter, when you call the ExtendedSecurity function and add this new Security
Header block, the serialization will take place.
</p>
        <p>
In SP1, it is NOT necessarily for you to add this timestamp.
</p>
        <p>
The WSE team has confirmed this as a workaround to this minor bug.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=7244d041-5f52-48f2-98a2-a6cb00a5ad7e" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Little bug in WSE 2.0 SP2</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,7244d041-5f52-48f2-98a2-a6cb00a5ad7e.aspx</guid>
      <link>http://www.softwaremaker.net/blog/LittleBugInWSE20SP2.aspx</link>
      <pubDate>Wed, 12 Jan 2005 10:38:07 GMT</pubDate>
      <description>&lt;p&gt;
After installing &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 SP2, the most natural thing for me to do is to
run&amp;nbsp;my previous WSE 2.0 SP1 projects and see if it works with the new assembly.
&lt;/p&gt;
&lt;p&gt;
Most of it still do run &amp;lt;phew&amp;gt;. A couple of them (specifically the SOAP Routing
ones) did NOT run as intended. A further drilldown into the code revealed that the
ExtendedSecurity doesnt serialize properly if you are planning to send another set
of Security Headers to the next SOAP&amp;nbsp;node...In fact, it doesnt get serialized
at all.
&lt;/p&gt;
&lt;p&gt;
...Obviously, this next node cannot be the ultimate soap receiver as target service
cannot process 2 security headers as specified in the _WS-Security Specs_. You can
refer to my previous discussions with &lt;a href="http://www.dynamic-cast.com/" target=_blank&gt;HerveyW&lt;/a&gt; &lt;a href="http://www.dynamic-cast.com/mt-archives/000069.html" target=_blank&gt;here&lt;/a&gt; and &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,1508b8a2-a4f5-49a3-beb4-15725f0b0f59.aspx" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
So, if your next node is another SOAP Router and you need a different set of Security
Headers for&amp;nbsp;the next node&amp;nbsp;to process, this is how to do it with the ExtendedSecurity
function in SP2:
&lt;/p&gt;
&lt;p&gt;
You need to add a Security Utility Timestamp into the Security Header in order for
the ExtendedSecurity function to serialize a new set of Security Headers properly.
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Georgia color=#ff0000&gt;&lt;strong&gt;Dim t As Utility.Timestamp = AnotherSecurityHeaderBlock.Timestamp&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Thereafter, when you call the ExtendedSecurity function and add this new Security
Header block, the serialization will take place.
&lt;/p&gt;
&lt;p&gt;
In SP1, it is NOT necessarily for you to add this timestamp.
&lt;/p&gt;
&lt;p&gt;
The&amp;nbsp;WSE team has confirmed this as a workaround to this minor bug.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=7244d041-5f52-48f2-98a2-a6cb00a5ad7e" /&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>Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=0addacde-3722-4925-a793-b5c72bfd392a</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,0addacde-3722-4925-a793-b5c72bfd392a.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Mike Champion has a great post <a href="http://weblogs.asp.net/mikechampion/archive/2004/12/28/338998.aspx" target="_blank">here</a> on
the overheads of XML.
</p>
        <p>
IMHO, I think a binary representation of XML brings on a whole different set of issues,
namely removing the abstraction it is supposed to represent.
</p>
        <p>
On a slightly different perspective and from a designing front, I have been advocating
against the use of XML in all layers of a enterprise application esp. when tightly
bound object technology is much more desired. In my presentations on SO(A), I have
always preach on best using service-messaging as communication b/w applications, NOT
between tiers of an application.
</p>
        <p>
However, many businesses are using XML Services as a communication mechanism JUST
SO they can be seen as implementing an SO(A)... and of course, for all the wrong reasons.
</p>
        <p>
Hence, many of them complain when performance suffers.
</p>
        <p>
What do they expect when they are making verbose, chatty calls to their own Data
Access Layer via SOAP ?
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=0addacde-3722-4925-a793-b5c72bfd392a" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>XML and Overheads</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,0addacde-3722-4925-a793-b5c72bfd392a.aspx</guid>
      <link>http://www.softwaremaker.net/blog/XMLAndOverheads.aspx</link>
      <pubDate>Wed, 29 Dec 2004 12:23:13 GMT</pubDate>
      <description>&lt;p&gt;
Mike Champion has a great&amp;nbsp;post &lt;a href="http://weblogs.asp.net/mikechampion/archive/2004/12/28/338998.aspx" target=_blank&gt;here&lt;/a&gt;&amp;nbsp;on
the overheads of XML.
&lt;/p&gt;
&lt;p&gt;
IMHO, I think a binary representation of XML brings on a whole different set of issues,
namely removing the abstraction it is supposed to represent.
&lt;/p&gt;
&lt;p&gt;
On a slightly different perspective and from a designing front, I have been advocating
against the use of XML in all layers of a enterprise application esp. when tightly
bound object technology is much more desired. In my presentations on SO(A), I have
always preach on best using service-messaging as communication b/w applications, NOT
between tiers of an application.
&lt;/p&gt;
&lt;p&gt;
However, many businesses are using XML Services as a communication mechanism JUST
SO they can be seen as implementing an SO(A)... and of course, for all the wrong reasons.
&lt;/p&gt;
&lt;p&gt;
Hence, many of them complain when performance suffers.
&lt;/p&gt;
&lt;p&gt;
What do they expect when they are making verbose, chatty&amp;nbsp;calls to their own Data
Access Layer via SOAP ?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=0addacde-3722-4925-a793-b5c72bfd392a" /&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>Service-Orientation;Software Architectures;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=9f35d4ed-cd3e-44cd-869a-465109401259</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,9f35d4ed-cd3e-44cd-869a-465109401259.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Another good XML Learning Resource <a href="http://www.topxml.com/" target="_blank">TopXML</a> has
built the <a href="http://www.topxml.com/reblogger/" target="_blank">XML News Reblogger</a>.
As quoted <a href="http://www.topxml.com/reblogger/xml_news/default.asp" target="_blank">here</a> on
their Website:
</p>
        <p>
“<font face="Georgia"><em>Reblogger is a free aggregator service provided by
TopXML. We collect XML blog items four times a day from around the web, so that you
can view all the most interesting and most useful news right here in our reblogger.
Enjoy</em></font></p>
        <p>
          <font face="Georgia">
            <em>View the </em>
          </font>
          <a href="http://www.topxml.com/reblogger/bloggers.asp" target="_blank">
            <font face="Georgia">
              <em>blogs
and feeds</em>
            </font>
          </a>
          <font face="Georgia">
            <em> we fetch...</em>
          </font>”
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=9f35d4ed-cd3e-44cd-869a-465109401259" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>TopXML has built the XML News Reblogger</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,9f35d4ed-cd3e-44cd-869a-465109401259.aspx</guid>
      <link>http://www.softwaremaker.net/blog/TopXMLHasBuiltTheXMLNewsReblogger.aspx</link>
      <pubDate>Sun, 19 Dec 2004 11:45:52 GMT</pubDate>
      <description>&lt;p&gt;
Another good XML Learning Resource &lt;a href="http://www.topxml.com/" target=_blank&gt;TopXML&lt;/a&gt; has
built the &lt;a href="http://www.topxml.com/reblogger/" target=_blank&gt;XML News Reblogger&lt;/a&gt;.
As quoted &lt;a href="http://www.topxml.com/reblogger/xml_news/default.asp" target=_blank&gt;here&lt;/a&gt; on
their Website:
&lt;/p&gt;
&lt;p&gt;
&amp;#8220;&lt;font face=Georgia&gt;&lt;em&gt;Reblogger is a free aggregator service provided by TopXML.
We collect XML blog items four times a day from around the web, so that you can view
all the most interesting and most useful news right here in our reblogger. Enjoy&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Georgia&gt;&lt;em&gt;View the &lt;/em&gt;&lt;/font&gt;&lt;a href="http://www.topxml.com/reblogger/bloggers.asp" target=_blank&gt;&lt;font face=Georgia&gt;&lt;em&gt;blogs
and feeds&lt;/em&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face=Georgia&gt;&lt;em&gt; we fetch...&lt;/em&gt;&lt;/font&gt;&amp;#8221;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=9f35d4ed-cd3e-44cd-869a-465109401259" /&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>XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=45822828-5b63-4cb6-b139-97bd1ab03ec4</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,45822828-5b63-4cb6-b139-97bd1ab03ec4.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,43d85031-3e0b-48a7-bdd7-1f49932db40a.aspx" target="_blank">here</a>,
I had explained how we can encrypt the Usernametoken element &lt;wsse:UsernameToken&gt;
if we choose to use the PasswordOption.SendPlainText enumeration, for real-world reasons
such as
</p>
        <ul>
          <li>
Windows Authentication 
</li>
          <li>
Passwords are stored as Hash in the UserDB</li>
        </ul>
        <p>
Other elements in the &lt;wsse:Security&gt; Header element can be encrypted too, although
great care and design must be taken as it may reduce the extensibility of SOAP Headers
through routing intermediaries. One of them is the &lt;Signature&gt; element.
</p>
        <p>
As I had explained in another post <a href="http://www.softwaremaker.net/blog/CommentView,guid,371862d9-5622-4bc7-a6d6-5581b9eea12e.aspx" target="_blank">here</a>,
digital signatures <strong><em>can</em></strong> and <strong><em>may</em></strong> be
verified for authentication and trust by any SOAP node. If the &lt;Signature&gt; element
is encrypted, we may be preventing any SOAP intermediary from authenticating and verifying
the digital signature. Unlike digital signatures, &lt;xenc:EncryptedData&gt; elements
are encrypted for a specific receiver in mind and therefore, only that one party <strong><em>SHOULD</em></strong> be
able to decipher it with a corresponding Private key or shared secret. SOAP intermediaries,
trusted or not, <strong><em>SHOULD NOT</em></strong> be able to decrypt or view
the the encrypted content(s) and therefore cannot authenticate and verify the signature.
</p>
        <p>
However, if one should decide that their dispatching mechanism is based on a non-intermediary
route or if the &lt;Signature&gt; element may not be meant for the ultimate SOAP
receiver and therefore can be removed by the SOAP intermediary, this can
be done easily as well with WSE 2.0.
</p>
        <p>
The key is to create a MessageSignature on its own and assign it an ID. Here is the
code snippet on how to implement it:<span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><hr id="null" />
Dim</span> a <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">New</span> MessageSignature(yourSignatureToken)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> g <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> Guid <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> g.NewGuid<br />
a.Signature.Id <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> g.ToString<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'...</span><br /><br />
Context.Tokens.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(yourSignatureToken)<br />
Context.Tokens.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(yourEncryptionToken)<br />
Context.Elements.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(a)<br />
Context.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(yourEncryptionToken, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"#"</span> &amp;
a.Signature.Id)) 
<hr id="null" /></span></p>
        <p>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">And
the wonderful result that comes out from the oven: (geez...I need a life <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" />)
</font>
          </span>
        </p>
        <p>
          <hr id="null" />
        </p>
        <p>
        </p>
        <p>
&lt;wsse:Security soap:mustUnderstand="1"&gt;<br />
&lt;wsse:BinarySecurityToken ValueType="<a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3</a>"
EncodingType="<a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary</a>"
wsu:Id="SecurityToken-e8f64eea-1d63-4db2-943c-9bfb5dfccbfc"&gt;MIIBxDC...du2fPMER8ajJfl&lt;/wsse:BinarySecurityToken&gt; 
<br />
&lt;wsse:UsernameToken wsu:Id="SecurityToken-3370d9ae-deb9-4a01-9b9c-c8dd072568fa"&gt;<br />
&lt;wsse:Username&gt;ABC&lt;/wsse:Username&gt; 
<br />
&lt;wsse:Nonce&gt;Amx9amrLXR02etJLsNwdwA==&lt;/wsse:Nonce&gt; 
<br />
&lt;wsu:Created&gt;2004-12-11T07:38:33Z&lt;/wsu:Created&gt; 
<br />
&lt;/wsse:UsernameToken&gt;<br />
&lt;xenc:ReferenceList xmlns:xenc="<a href="http://www.w3.org/2001/04/xmlenc">http://www.w3.org/2001/04/xmlenc</a>#"&gt;<br />
&lt;xenc:DataReference URI="#EncryptedContent-0e6936bf-67a5-48a5-ba8a-d9ba6141e75f"
/&gt; 
<br />
&lt;/xenc:ReferenceList&gt;<br /><strong><font color="#ff0000">&lt;Signature Id="2c091bb3-bcdc-4da1-97c5-dcd60dac7312"
xmlns="</font></strong><a href="http://www.w3.org/2000/09/xmldsig"><strong><font color="#ff0000">http://www.w3.org/2000/09/xmldsig</font></strong></a><strong><font color="#ff0000">#"&gt;<br />
&lt;xenc:EncryptedData Id="EncryptedContent-0e6936bf-67a5-48a5-ba8a-d9ba6141e75f"
Type="</font></strong><a href="http://www.w3.org/2001/04/xmlenc#Content"><strong><font color="#ff0000">http://www.w3.org/2001/04/xmlenc#Content</font></strong></a><strong><font color="#ff0000">"
xmlns:xenc="</font></strong><a href="http://www.w3.org/2001/04/xmlenc"><strong><font color="#ff0000">http://www.w3.org/2001/04/xmlenc</font></strong></a><strong><font color="#ff0000">#"&gt;<br />
&lt;xenc:EncryptionMethod Algorithm="</font></strong><a href="http://www.w3.org/2001/04/xmlenc#aes128-cbc"><strong><font color="#ff0000">http://www.w3.org/2001/04/xmlenc#aes128-cbc</font></strong></a><strong><font color="#ff0000">"
/&gt; 
<br />
&lt;KeyInfo xmlns="</font></strong><a href="http://www.w3.org/2000/09/xmldsig"><strong><font color="#ff0000">http://www.w3.org/2000/09/xmldsig</font></strong></a><strong><font color="#ff0000">#"&gt;<br />
&lt;wsse:SecurityTokenReference&gt;<br />
&lt;wsse:Reference URI="#SecurityToken-3370d9ae-deb9-4a01-9b9c-c8dd072568fa" ValueType="</font></strong><a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken"><strong><font color="#ff0000">http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken</font></strong></a><strong><font color="#ff0000">"
/&gt; 
<br />
&lt;/wsse:SecurityTokenReference&gt;<br />
&lt;/KeyInfo&gt;<br />
&lt;xenc:CipherData&gt;  &lt;xenc:CipherValue&gt;rFfJS87yAdFFkW1dVbot...tJ+9U8+CU5qsI=&lt;/xenc:CipherValue&gt; 
<br />
&lt;/xenc:CipherData&gt;<br />
&lt;/xenc:EncryptedData&gt;<br />
&lt;/Signature&gt;</font><br /></strong>&lt;/wsse:Security&gt; 
<hr id="null" /></p>
        <p>
        </p>
        <p>
Voila! The Red bold font will show that the Signature Element is now encrypted.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=45822828-5b63-4cb6-b139-97bd1ab03ec4" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Encrypting the Signature Element in the &lt;wsse:Security&gt; Header element</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,45822828-5b63-4cb6-b139-97bd1ab03ec4.aspx</guid>
      <link>http://www.softwaremaker.net/blog/EncryptingTheSignatureElementInTheHeaderElement.aspx</link>
      <pubDate>Sat, 11 Dec 2004 08:14:03 GMT</pubDate>
      <description>&lt;p&gt;
With reference to my earlier post &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,43d85031-3e0b-48a7-bdd7-1f49932db40a.aspx" target=_blank&gt;here&lt;/a&gt;,
I had explained how we can encrypt the Usernametoken element &amp;lt;wsse:UsernameToken&amp;gt;
if we choose to use the PasswordOption.SendPlainText enumeration, for real-world reasons
such as
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Windows Authentication 
&lt;li&gt;
Passwords are stored as Hash in the UserDB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Other elements in the &amp;lt;wsse:Security&amp;gt; Header element can be encrypted too, although
great care and design must be taken as it may reduce the extensibility of SOAP Headers
through routing intermediaries. One of them is the &amp;lt;Signature&amp;gt; element.
&lt;/p&gt;
&lt;p&gt;
As I had explained in another post &lt;a href="http://www.softwaremaker.net/blog/CommentView,guid,371862d9-5622-4bc7-a6d6-5581b9eea12e.aspx" target=_blank&gt;here&lt;/a&gt;,
digital signatures &lt;strong&gt;&lt;em&gt;can&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;may&lt;/em&gt;&lt;/strong&gt; be
verified for authentication and trust by any SOAP node. If the &amp;lt;Signature&amp;gt; element
is encrypted, we may be preventing any SOAP intermediary from authenticating and verifying
the digital signature. Unlike digital signatures, &amp;lt;xenc:EncryptedData&amp;gt; elements
are encrypted&amp;nbsp;for a specific receiver in mind and therefore, only that one party &lt;strong&gt;&lt;em&gt;SHOULD&lt;/em&gt;&lt;/strong&gt; be
able to decipher it with a corresponding Private key or shared secret. SOAP intermediaries,
trusted or not, &lt;strong&gt;&lt;em&gt;SHOULD NOT&lt;/em&gt;&lt;/strong&gt; be able to decrypt&amp;nbsp;or view
the the encrypted content(s) and therefore cannot authenticate and verify the signature.
&lt;/p&gt;
&lt;p&gt;
However, if one should decide that their dispatching mechanism is based on a non-intermediary
route or if the &amp;lt;Signature&amp;gt; element&amp;nbsp;may not be meant for the ultimate SOAP
receiver and therefore can&amp;nbsp;be removed&amp;nbsp;by the SOAP intermediary, this can
be done easily as well with WSE 2.0.
&lt;/p&gt;
&lt;p&gt;
The key is to create a MessageSignature on its own and assign it an ID. Here is the
code snippet on how to implement it:&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt; 
&lt;hr id=null&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; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; MessageSignature(yourSignatureToken)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; g &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; Guid &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; g.NewGuid&lt;br&gt;
a.Signature.Id &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; g.ToString&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'...&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
Context.Tokens.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(yourSignatureToken)&lt;br&gt;
Context.Tokens.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(yourEncryptionToken)&lt;br&gt;
Context.Elements.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(a)&lt;br&gt;
Context.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(yourEncryptionToken, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"#"&lt;/span&gt; &amp;amp;
a.Signature.Id)) 
&lt;hr id=null&gt;
&lt;/span&gt; 
&lt;p&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 color=#003300 size=2&gt;And
the wonderful result that comes out from the oven: (geez...I need a life &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;hr id=null&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;lt;wsse:Security soap:mustUnderstand="1"&amp;gt;&lt;br&gt;
&amp;lt;wsse:BinarySecurityToken ValueType="&lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"&gt;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3&lt;/a&gt;"
EncodingType="&lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"&gt;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary&lt;/a&gt;"
wsu:Id="SecurityToken-e8f64eea-1d63-4db2-943c-9bfb5dfccbfc"&amp;gt;MIIBxDC...du2fPMER8ajJfl&amp;lt;/wsse:BinarySecurityToken&amp;gt; 
&lt;br&gt;
&amp;lt;wsse:UsernameToken wsu:Id="SecurityToken-3370d9ae-deb9-4a01-9b9c-c8dd072568fa"&amp;gt;&lt;br&gt;
&amp;lt;wsse:Username&amp;gt;ABC&amp;lt;/wsse:Username&amp;gt; 
&lt;br&gt;
&amp;lt;wsse:Nonce&amp;gt;Amx9amrLXR02etJLsNwdwA==&amp;lt;/wsse:Nonce&amp;gt; 
&lt;br&gt;
&amp;lt;wsu:Created&amp;gt;2004-12-11T07:38:33Z&amp;lt;/wsu:Created&amp;gt; 
&lt;br&gt;
&amp;lt;/wsse:UsernameToken&amp;gt;&lt;br&gt;
&amp;lt;xenc:ReferenceList xmlns:xenc="&lt;a href="http://www.w3.org/2001/04/xmlenc"&gt;http://www.w3.org/2001/04/xmlenc&lt;/a&gt;#"&amp;gt;&lt;br&gt;
&amp;lt;xenc:DataReference URI="#EncryptedContent-0e6936bf-67a5-48a5-ba8a-d9ba6141e75f"
/&amp;gt; 
&lt;br&gt;
&amp;lt;/xenc:ReferenceList&amp;gt;&lt;br&gt;
&lt;strong&gt;&lt;font color=#ff0000&gt;&amp;lt;Signature Id="2c091bb3-bcdc-4da1-97c5-dcd60dac7312"
xmlns="&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2000/09/xmldsig"&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;http://www.w3.org/2000/09/xmldsig&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;#"&amp;gt;&lt;br&gt;
&amp;lt;xenc:EncryptedData Id="EncryptedContent-0e6936bf-67a5-48a5-ba8a-d9ba6141e75f"
Type="&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#Content"&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;http://www.w3.org/2001/04/xmlenc#Content&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;"
xmlns:xenc="&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc"&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;http://www.w3.org/2001/04/xmlenc&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;#"&amp;gt;&lt;br&gt;
&amp;lt;xenc:EncryptionMethod Algorithm="&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2001/04/xmlenc#aes128-cbc"&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;http://www.w3.org/2001/04/xmlenc#aes128-cbc&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;"
/&amp;gt; 
&lt;br&gt;
&amp;lt;KeyInfo xmlns="&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.w3.org/2000/09/xmldsig"&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;http://www.w3.org/2000/09/xmldsig&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;#"&amp;gt;&lt;br&gt;
&amp;lt;wsse:SecurityTokenReference&amp;gt;&lt;br&gt;
&amp;lt;wsse:Reference URI="#SecurityToken-3370d9ae-deb9-4a01-9b9c-c8dd072568fa" ValueType="&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken"&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;"
/&amp;gt; 
&lt;br&gt;
&amp;lt;/wsse:SecurityTokenReference&amp;gt;&lt;br&gt;
&amp;lt;/KeyInfo&amp;gt;&lt;br&gt;
&amp;lt;xenc:CipherData&amp;gt;&amp;nbsp; &amp;lt;xenc:CipherValue&amp;gt;rFfJS87yAdFFkW1dVbot...tJ+9U8+CU5qsI=&amp;lt;/xenc:CipherValue&amp;gt; 
&lt;br&gt;
&amp;lt;/xenc:CipherData&amp;gt;&lt;br&gt;
&amp;lt;/xenc:EncryptedData&amp;gt;&lt;br&gt;
&amp;lt;/Signature&amp;gt;&lt;/font&gt;
&lt;br&gt;
&lt;/strong&gt;&amp;lt;/wsse:Security&amp;gt; 
&lt;hr id=null&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Voila! The Red bold font will show that the Signature Element is now encrypted.&gt;&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=45822828-5b63-4cb6-b139-97bd1ab03ec4" /&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>Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=d6a2bd5f-310f-4697-9d8c-8f53b6caeb03</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,d6a2bd5f-310f-4697-9d8c-8f53b6caeb03.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
To slightly expand on my <a href="http://www.softwaremaker.net/blog/PermaLink,guid,1508b8a2-a4f5-49a3-beb4-15725f0b0f59.aspx" target="_blank">post</a> and <a href="http://www.dynamic-cast.com/mt-archives/000069.html" target="_blank">Hervey's</a> a
little bit further, there was mention on the use of Enveloped Signatures in the SOAP
Headers. Enveloped Signature (as defined by <a href="http://www.w3.org/TR/xmldsig-core/" target="_blank">XML-Digital
Signature</a>) is a signature over the XML content that contains the
signature as an element. The content provides the root XML document element. Obviously,
enveloped signatures must take care not to include their own value in the calculation
of the SignatureValue. In other words, Enveloped Signature would sign the contents
of the SOAP headers <strong><em>WITHOUT</em></strong> the signature. This is
the only way a Security header can be signed without creating a circular reference
dependency.
</p>
        <p>
To do the above, you are enforcing the prevention of intermediaries from modifying
the SOAP Headers.
</p>
        <p>
However, as taken from the _WS-Security Specs_ 
<hr id="null" /><em><font face="Georgia" color="#ff0000">Because of the mutability of some SOAP headers,
producers SHOULD NOT use the Enveloped Signature Transform defined in XML Signature.
Instead, messages SHOULD explicitly include the elements to be signed. Similarly,
producers SHOULD NOT use the Enveloping Signature defined in XML Signature [XMLSIG]</font></em><hr id="null" /></p>
        <p>
        </p>
        <p>
WS-Security doesnt *believe* in the Enveloped Signatures because it stands on the belief
that SOAP Headers are <a href="http://www.hyperdictionary.com/dictionary/mutable" target="_blank">mutable</a>.
Since SOAP Headers can change and the likelihood is there that a SOAP intermediary
can change the headers, an Enveloped Signature would not be as extensible and work
as well.
</p>
        <p>
I am a strong believer of that. If a normal signature is used instead of an enveloped one,
then an intermediary can safely add more tokens and more signatures to a Security
header targeted at another node on the message path...and that is why there is WS-Security.
Security cannot just be based on End-to-End scenarios or else SSL / HTTPS will
suffice.
</p>
        <p>
I also further believe that an intermediary should be able to extend Security headers
which are meant for other target nodes. Since a SOAP node can only process a
single Security Header (because of re-ordering constraints of SOAP Headers), this
option may not be as far-fetched or ridiculous as it may sound.
</p>
        <p>
Of course, anyone can still choose to implement Enveloped Signatures over their SOAP
Headers if they are just implementing End-to-End scenarios and enforcing non-tampering
measures over any desired or <em>un-desired</em> intermediaries. However, extensibility may
not be an option here should intermediaries be required to offload certain processing
functionality off the ultimate receiver or even add more tokens and signatures along
the way.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=d6a2bd5f-310f-4697-9d8c-8f53b6caeb03" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Enveloped Signatures - XMLDSIG and WS-Security</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,d6a2bd5f-310f-4697-9d8c-8f53b6caeb03.aspx</guid>
      <link>http://www.softwaremaker.net/blog/EnvelopedSignaturesXMLDSIGAndWSSecurity.aspx</link>
      <pubDate>Sat, 11 Dec 2004 02:57:32 GMT</pubDate>
      <description>&lt;p&gt;
To slightly expand on&amp;nbsp;my &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,1508b8a2-a4f5-49a3-beb4-15725f0b0f59.aspx" target=_blank&gt;post&lt;/a&gt; and &lt;a href="http://www.dynamic-cast.com/mt-archives/000069.html" target=_blank&gt;Hervey's&lt;/a&gt; a
little bit further, there was mention on the use of Enveloped Signatures in the SOAP
Headers. Enveloped Signature&amp;nbsp;(as defined by &lt;a href="http://www.w3.org/TR/xmldsig-core/" target="_blank"&gt;XML-Digital
Signature&lt;/a&gt;)&amp;nbsp;is a&amp;nbsp;signature&amp;nbsp;over the XML content that contains the
signature as an element. The content provides the root XML document element. Obviously,
enveloped signatures must take care not to include their own value in the calculation
of the SignatureValue. In other words, Enveloped Signature would sign the contents
of the SOAP headers&amp;nbsp;&lt;strong&gt;&lt;em&gt;WITHOUT&lt;/em&gt;&lt;/strong&gt; the signature. This is
the only way a Security header can be signed without creating a circular reference
dependency.
&lt;/p&gt;
&lt;p&gt;
To do the above, you are enforcing the prevention of&amp;nbsp;intermediaries from modifying
the SOAP Headers.
&lt;/p&gt;
&lt;p&gt;
However, as taken from the _WS-Security Specs_ 
&lt;hr id=null&gt;
&lt;em&gt;&lt;font face=Georgia color=#ff0000&gt;Because of the mutability of some SOAP headers,
producers SHOULD NOT use the Enveloped Signature Transform defined in XML Signature.
Instead, messages SHOULD explicitly include the elements to be signed. Similarly,
producers SHOULD NOT use the Enveloping Signature defined in XML Signature [XMLSIG]&lt;/font&gt;&lt;/em&gt; 
&lt;hr id=null&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
WS-Security doesnt *believe* in the Enveloped Signatures because it stands on the&amp;nbsp;belief
that SOAP Headers are &lt;a href="http://www.hyperdictionary.com/dictionary/mutable" target=_blank&gt;mutable&lt;/a&gt;.
Since SOAP Headers can change and the likelihood is there that a SOAP intermediary
can change the headers, an Enveloped Signature would not be as extensible and work
as well.
&lt;/p&gt;
&lt;p&gt;
I am a strong believer of that. If a normal signature is used instead of an&amp;nbsp;enveloped&amp;nbsp;one,
then an intermediary can safely add more tokens and more signatures to a Security
header targeted at another node on the message path...and that is why there is WS-Security.
Security cannot just be based on End-to-End scenarios or else SSL / HTTPS&amp;nbsp;will
suffice.
&lt;/p&gt;
&lt;p&gt;
I also further believe that an intermediary should be able to extend Security headers
which&amp;nbsp;are meant for other target nodes. Since a SOAP node can only process a
single Security Header (because of re-ordering constraints of SOAP Headers), this
option may not be as far-fetched or ridiculous as it may sound.
&lt;/p&gt;
&lt;p&gt;
Of course, anyone can still choose to implement Enveloped Signatures over their SOAP
Headers if they are just implementing End-to-End scenarios and enforcing non-tampering
measures over any desired or &lt;em&gt;un-desired&lt;/em&gt; intermediaries. However, extensibility&amp;nbsp;may
not be an option here should intermediaries be required to offload certain processing
functionality off the ultimate receiver or even add more tokens and signatures along
the way.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=d6a2bd5f-310f-4697-9d8c-8f53b6caeb03" /&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>Software Architectures;Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=20f8fcb0-a5eb-41b4-8ddf-217f4e338cf1</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,20f8fcb0-a5eb-41b4-8ddf-217f4e338cf1.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have been noticing an increasing number of emails and newgroup threads asking for
the security of Usernametokens as specified by _WS-Security Specs_ on <a href="http://www.oasis-open.org" target="_blank">OASIS</a>.
Most people would like to use it because it is the only alternative they have and
there are no other options for using <a href="http://www.ietf.org/html.charters/pkix-charter.html" target="_blank">X.509
PKI Digital Certificates</a>. Here is my personal take on it.
</p>
        <p>
I think some of the security concerns are slightly misplaced here. Firstly, I dont
think <a href="http://www.ws-i.org" target="_blank" title="Web Services Interoperability Organization">WS-I</a> or
OASIS would include Usernametokens inside the WS-Security Specifications if they doubt
its security. As I would like to say, --- <strong>Implementation is key</strong>.
</p>
        <p>
A Username token does <strong><em>NOT</em></strong> use any simpler or less-standard
security algorithm than any other tokens. In fact, it uses the same hashing algorithm,
symmetric algorithm such as the 128-key Cipher Block Chain (cbc) <a href="http://www.cescomm.co.nz/about/aes.html" target="_blank">Advanced
Encryption Standard</a>, etc as any other token. Many people, also, do not realize
that the same symmetric algorithm is used to encrypt the SOAP message body when an asymmetric
X509SecurityToken is used as well. The asymmetric key algorithm is only used
to encrypt the secret key that is doing the actual symmetric encryption processing.
This is done for the purpose of reducing cipher bloat and increasing processing speed.
The paranoia in me, however, would go for a higher-bit key implementation, which
is possible.
</p>
        <p>
Remember that your secret can be stolen and kept for years and tried to be broken
with much higher-end and cheaper deciphering machines in the future. OK, OK, that
is my paraniod self talking. <img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif" /></p>
        <p>
I believe when statements are made against the security of Usernametokens, they are
made against the passwords of the Usernametokens. Therefore, the statement: "Usernametokens,
on their own they are only as secure as the passwords"
</p>
        <p>
Usernametokens are as secure as your passwords. That means that if you have a good
security policy on how your company treats passwords, ie...
</p>
        <ol>
          <li>
Minimum password length 
</li>
          <li>
Implementation of alphanumeric and other different characters and symbols in password 
</li>
          <li>
Password change frequency (in months instead of years <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" />) 
</li>
          <li>
Elimination of Weak Passwords such as using names and such 
</li>
          <li>
...</li>
        </ol>
        <p>
you should <strong><em>NOT</em></strong> be so fearful of using a Usernametoken
in your Web Service implementation.
</p>
        <p>
On the other hand, if you don't treat or administer your passwords with good password
policies, then you cannot expect Usernametokens to give your message as secure a protection
as you would like.
</p>
        <p>
I would also recommend using the PasswordOption.SendNone, if possible. The hash of
the password and other elements are used to produce the cipher. NO password is
sent over using this enumerated option. Of course, the only caveat is except through
a dictionary attack, which of course, can be made so much more difficult
(or almost impossible) by having a good password policy administration system.
</p>
        <p>
If you have to send your Usernametoken over in PasswordOption.SendPlainText for whatever
reasons (using Windows, LDAP Authentication or you may have hashed versions of your
passwords stored in your UserDB), you <strong><em>SHOULD</em></strong> encrypt
the UsernameToken with a X.509 digital certificate. Read my post <a href="http://www.softwaremaker.net/blog/PermaLink,guid,43d85031-3e0b-48a7-bdd7-1f49932db40a.aspx" target="_blank">here</a> for
my own implementation of it.
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
Another thing to take note is one that relates to the real world and why I believe
Usernametokens have its place here. It is easiest to implement and common in any business
environments. Therefore, it can be plugged into any existing IT systems with relatively
lesser effort. Also, X509 digital certs are usually used to authenticate machines
and / or companies, it would be more expensive and unrealistic to expect every user
in a 100+ user organization to have a digital cert and a private / public key
pair. Therefore, I strongly believe that Usernametokens are more appt to authenticate
the users <strong><em>themselves</em></strong> in the real world and will continue
to be one of the most popular way to authenticate users in the near <em>biometric-less</em> future.
However, if you are using authentication between machines, you <strong><em>should</em></strong> opt
for X509 digital certs instead.
</p>
        <p>
          <hr id="null" />
          <font color="#ff0000">
            <font face="Georgia">[Author note] I believe WSE 2.0 SP2 has
taken some lengths to make sure that Usernametokens which transmits a clear text password
are now encrypted.</font>
          </font>
        </p>
        <p>
        </p>
        <p>
          <font color="#ff0000">
          </font>
        </p>
        <ul>
          <li>
            <font face="Georgia" color="#ff0000">For security reasons, it is strongly recommended
to encrypt Username tokens, especially when they contain password information. The <b>SecurityTokenServiceClient</b> class
now automatically encrypts any <b>UsernameToken</b> security tokens included in outgoing
SOAP requests. Similarly, the <b>SecurityTokenService</b> class automatically encrypts
any <b>UsernameToken</b> security tokens included in outgoing SOAP responses.</font>
          </li>
        </ul>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=20f8fcb0-a5eb-41b4-8ddf-217f4e338cf1" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Security of UsernameTokens in WS-Security as implemented by WSE 2.0</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,20f8fcb0-a5eb-41b4-8ddf-217f4e338cf1.aspx</guid>
      <link>http://www.softwaremaker.net/blog/SecurityOfUsernameTokensInWSSecurityAsImplementedByWSE20.aspx</link>
      <pubDate>Thu, 09 Dec 2004 01:57:26 GMT</pubDate>
      <description>&lt;p&gt;
I have been noticing an increasing number of emails and newgroup threads asking for
the security of Usernametokens as specified by _WS-Security Specs_ on &lt;a href="http://www.oasis-open.org" target="_blank"&gt;OASIS&lt;/a&gt;.
Most people would like to use it because it is the only alternative they have and
there are no other options for using &lt;a href="http://www.ietf.org/html.charters/pkix-charter.html" target="_blank"&gt;X.509
PKI Digital Certificates&lt;/a&gt;. Here is my personal take on it.
&lt;/p&gt;
&lt;p&gt;
I think some of the security concerns are slightly misplaced here. Firstly, I dont
think &lt;a href="http://www.ws-i.org" target="_blank" title="Web Services Interoperability Organization"&gt;WS-I&lt;/a&gt; or
OASIS would include Usernametokens inside the WS-Security Specifications if they doubt
its security. As I would like to say, --- &lt;strong&gt;Implementation is key&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
A Username token does &lt;strong&gt;&lt;em&gt;NOT&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;use any simpler or less-standard
security algorithm than any other tokens. In fact, it uses the same hashing algorithm,
symmetric algorithm such as the 128-key Cipher Block Chain (cbc) &lt;a href="http://www.cescomm.co.nz/about/aes.html" target=_blank&gt;Advanced
Encryption Standard&lt;/a&gt;, etc as any other token. Many people, also, do not realize
that the same symmetric algorithm is used to encrypt the SOAP message body when an&amp;nbsp;asymmetric
X509SecurityToken is used as well. The asymmetric key algorithm is&amp;nbsp;only used
to encrypt the secret&amp;nbsp;key that is doing the actual symmetric encryption processing.
This is done for the purpose of reducing cipher bloat and increasing processing speed.
The paranoia in me, however,&amp;nbsp;would go for a higher-bit key implementation, which
is possible.
&lt;/p&gt;
&lt;p&gt;
Remember that your secret can be stolen and kept for years and tried to be broken
with much higher-end and cheaper deciphering machines in the future. OK, OK, that
is my paraniod self talking. &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/smile.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
I believe when statements are made against the security of Usernametokens, they are
made against the passwords of the Usernametokens. Therefore, the statement: "Usernametokens,
on their own they are only as secure as the passwords"
&lt;/p&gt;
&lt;p&gt;
Usernametokens are as secure as your passwords. That means that if you have a good
security policy on how your company treats passwords, ie...
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Minimum password length 
&lt;li&gt;
Implementation of alphanumeric and other different characters and symbols in password 
&lt;li&gt;
Password change frequency (in months instead of years &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;) 
&lt;li&gt;
Elimination of Weak Passwords such as using names and such 
&lt;li&gt;
...&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
you should &lt;strong&gt;&lt;em&gt;NOT&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;be so fearful of using a Usernametoken
in your Web Service implementation.
&lt;/p&gt;
&lt;p&gt;
On the other hand, if you don't treat or administer your passwords with good&amp;nbsp;password
policies, then you cannot expect Usernametokens to give your message as secure a protection
as&amp;nbsp;you would like.
&lt;/p&gt;
&lt;p&gt;
I would also recommend using the PasswordOption.SendNone, if possible. The hash of
the password&amp;nbsp;and other elements are used to produce the cipher. NO password is
sent over using this enumerated option. Of course, the only caveat is except through
a dictionary attack, which&amp;nbsp;of course,&amp;nbsp;can be made so much more difficult
(or almost impossible) by having a good password policy administration system.
&lt;/p&gt;
&lt;p&gt;
If you have to send your Usernametoken over in PasswordOption.SendPlainText for whatever
reasons (using Windows, LDAP Authentication or you may have hashed versions of your
passwords stored in your UserDB), you&amp;nbsp;&lt;strong&gt;&lt;em&gt;SHOULD&lt;/em&gt;&lt;/strong&gt; encrypt
the UsernameToken with a X.509 digital certificate. Read my post &lt;a href="http://www.softwaremaker.net/blog/PermaLink,guid,43d85031-3e0b-48a7-bdd7-1f49932db40a.aspx" target=_blank&gt;here&lt;/a&gt; for
my own implementation of it.
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Another thing to take note is one that relates to the real world and why I believe
Usernametokens have its place here. It is easiest to implement and common in any business
environments. Therefore, it can be plugged into any existing IT systems with relatively
lesser effort. Also, X509 digital certs are usually used to authenticate machines
and / or companies, it would be more expensive and unrealistic to expect every user
in a 100+ user&amp;nbsp;organization to have a digital cert and a private / public key
pair. Therefore, I strongly believe that Usernametokens are more appt to authenticate
the users &lt;strong&gt;&lt;em&gt;themselves&lt;/em&gt;&lt;/strong&gt; in the real world and will continue
to be one of the most popular way to authenticate users in the near &lt;em&gt;biometric-less&lt;/em&gt; future.
However, if you are using authentication between machines, you &lt;strong&gt;&lt;em&gt;should&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;opt
for X509 digital certs instead.
&lt;/p&gt;
&lt;p&gt;
&lt;hr id=null&gt;
&lt;font color=#ff0000&gt;&lt;font face=Georgia&gt;[Author note] I believe WSE 2.0 SP2 has taken
some lengths to make sure that Usernametokens which transmits a clear text password
are now encrypted.&lt;/font&gt; &lt;/font&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#ff0000&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font face=Georgia color=#ff0000&gt;For security reasons, it is strongly recommended
to encrypt Username tokens, especially when they contain password information. The &lt;b&gt;SecurityTokenServiceClient&lt;/b&gt; class
now automatically encrypts any &lt;b&gt;UsernameToken&lt;/b&gt; security tokens included in outgoing
SOAP requests. Similarly, the &lt;b&gt;SecurityTokenService&lt;/b&gt; class automatically encrypts
any &lt;b&gt;UsernameToken&lt;/b&gt; security tokens included in outgoing SOAP responses.&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=20f8fcb0-a5eb-41b4-8ddf-217f4e338cf1" /&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>Software Architectures;Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=aaa1d757-7c04-44d9-b469-95a0a790448b</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,aaa1d757-7c04-44d9-b469-95a0a790448b.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For all those wanting to do WS-ReliableMessaging today with WSE 2.0, you can check
out what Andrés has done <a href="http://weblogs.asp.net/andresv/archive/2004/11/28/271255.aspx" target="_blank">here</a>.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=aaa1d757-7c04-44d9-b469-95a0a790448b" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>WS-ReliableMessaging for WSE 2.0 - Way Cool</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,aaa1d757-7c04-44d9-b469-95a0a790448b.aspx</guid>
      <link>http://www.softwaremaker.net/blog/WSReliableMessagingForWSE20WayCool.aspx</link>
      <pubDate>Mon, 29 Nov 2004 08:25:11 GMT</pubDate>
      <description>&lt;p&gt;
For all those wanting to do WS-ReliableMessaging today with WSE 2.0, you can check
out what Andr&amp;#233;s has done &lt;a href="http://weblogs.asp.net/andresv/archive/2004/11/28/271255.aspx" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=aaa1d757-7c04-44d9-b469-95a0a790448b" /&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>Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=1508b8a2-a4f5-49a3-beb4-15725f0b0f59</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,1508b8a2-a4f5-49a3-beb4-15725f0b0f59.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <title>Security Headers, Intermediaries and the next Actor Attribute</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,1508b8a2-a4f5-49a3-beb4-15725f0b0f59.aspx</guid>
      <link>http://www.softwaremaker.net/blog/SecurityHeadersIntermediariesAndTheNextActorAttribute.aspx</link>
      <pubDate>Sat, 27 Nov 2004 10:18:35 GMT</pubDate>
      <description>&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;Had a good brief chat with Plumbers: &lt;a href="http://www.bristowe.com/blog/" target=_blank&gt;John
Bristowe&lt;/a&gt; and &lt;a href="http://hyperthink.net/blog/" target=_blank&gt;Steve Maine&lt;/a&gt; on
this issue&lt;span class=442385200-26112004&gt;.&lt;/span&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;span class=442385200-26112004&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;span class=442385200-26112004&gt;&lt;strong&gt;[Just added: &lt;/strong&gt;&lt;a href="http://www.dynamic-cast.com/" target=_blank&gt;&lt;strong&gt;Hervey
Wilson&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; [Dev Lead of WSE] has &lt;/strong&gt;&lt;a href="http://www.dynamic-cast.com/mt-archives/000069.html" target=_blank&gt;&lt;strong&gt;this&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to
reply to this post.. Thanks Hervey for your thoughts on this issue.]&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt; 
&lt;hr id=null&gt;
My confusion seems to come from reading the WS-Security specs on both MSDN and OASIS.
The MSDN copy that wasnt the OASIS standard says and incidentally was implemeted through
WSE 1.0 :&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial color=#ff0000 size=2&gt;&lt;em&gt;&lt;strong&gt;An intermediary on the message
path MAY add one or more new sub-elements to an existing &amp;lt;Security&amp;gt; header block
if they are targeted for the same SOAP node&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;However, the same specs on OASIS reads:&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;em&gt;&lt;/em&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial color=#ff0000 size=2&gt;&lt;em&gt;&lt;strong&gt;An active intermediary on the
message path MAY add one or more new sub-elements to an existing &amp;lt;wsse:Security&amp;gt;
header block if they are targeted for its SOAP node&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;IMHO, that IS a whole lot of difference. The first specs
indicate that you can change the securityHeaders if they are going to the same soap
node. In this case, if I am assuming that the same soap node = ulitmate receiver,
I can basically access something NOT meant for me.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;However, the&amp;nbsp;&lt;span class=442385200-26112004&gt;meaning
on the &lt;/span&gt;OASIS one is&amp;nbsp;&lt;span class=442385200-26112004&gt;slightly &lt;/span&gt;different.
It says that I can change the securityHeaders if it is meant for itself (its SOAP
node). That changed the whole thing quite a bit. It doesnt say now that I can change
or add additional elements into the securityHeaders for the ultimate receiver. To
be honest, and I have read this line many times to make sure I got the context right,
I dont see the point in adding any sub-elements to a security header block that is
targetted at itself. It doesnt really make much sense, if any, at all.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;John is definitely right in saying that I shouldnt be
trying to use security headers targeted for&amp;nbsp;the ultimate receiver&amp;nbsp;inside
the context of&amp;nbsp;a SOAP intermediary.&amp;nbsp;In most cases, the security element(s)
targeted for the final destination will be signed. Therefore, providing access via
the object model doesn't make sense because manipulating these headers would invalidate
the digital signature.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;I definitely agree with him on this. That is one of the
reasons why WS-Routing was superseded by WS-Addressing.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;And of course, WSE 2.0 implements the OASIS-standard
WS-Security Specs.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;However, I&amp;nbsp;am looking at the&amp;nbsp;idea&amp;nbsp;of taking
the securityHeaders meant for someone else that arent signed and sign it. The final
SOAP actor can and will only accept a message that is signed by&amp;nbsp;&lt;span class=442385200-26112004&gt;its
adjacent node&lt;/span&gt;&amp;nbsp;and NOT the initial actor, per se. &lt;/font&gt;&lt;font face=Arial size=2&gt;Does
this idea sound far-fetched ?
&lt;/div&gt;
&lt;div&gt;
&lt;hr id=null&gt;
&lt;/div&gt;
&gt; 
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;I have done some reading into the WS-Security Specs and
also cracked open [&lt;em&gt;aka Reflect()&lt;/em&gt;] WSE 2.0 to see how it implements and processes
the Security Headers. &lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial&gt;&lt;font size=2&gt;&lt;span class=442385200-26112004&gt;First of all, do
take note of this&amp;nbsp;&lt;/span&gt;very important specification block found in the OASIS-standard
WS-Security Specs.&lt;/font&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial color=#ff0000 size=2&gt;&lt;em&gt;&lt;strong&gt;&amp;#8220;The header block provides
a mechanism for attaching security-related information targeted at a specific recipient
in the form of a SOAP actor/role. This may be either the ultimate recipient of the
message or an intermediary. Consequently, elements of this type may be present multiple
times in a SOAP message. An active intermediary on the message path MAY add one or
more new sub-elements to an existing header block if they are targeted for its SOAP
node or it MAY add one or more new headers for additional targets. As stated, a message
MAY have multiple header blocks if they are targeted for separate recipients. However,
only one header block MAY omit the S11: actor or S12: role attributes. Two header
blocks MUST NOT have the same value for S11: actor or S12: role. Message security
information targeted for different recipients MUST appear in different header blocks.
This is due to potential processing order issues (e.g. due to possible header re-ordering).
The header block without a specified S11: actor or S12: role MAY be processed by anyone,
but MUST NOT be removed prior to the final destination or endpoint..."&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;span class=442385200-26112004&gt;&lt;font face=Arial size=2&gt;This boils down to another
interesting fundamental concept of trust here which Steve Maine talks about &lt;a href="http://hyperthink.net/blog/PermaLink,guid,97388cbb-fd2c-4fd2-8347-1b0770c776e4.aspx" target=_blank&gt;here&lt;/a&gt;&amp;nbsp;in
which he &lt;/font&gt;&lt;/span&gt;&lt;span class=442385200-26112004&gt;&lt;font face=Arial size=2&gt;asked
if Trust is Point-to-Point or End-to-End ?&lt;/font&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span class=442385200-26112004&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;span class=442385200-26112004&gt;&lt;font face=Arial size=2&gt;The intermediary is a
very important concept of SOAP Routing extensibility and is pretty much explains the
processing model of SOAP messages. An intermediary sits between the initial sender
and the ultimate receiver and intercepts SOAP messages. An intermediary acts as both
a SOAP sender and a SOAP receiver at the same time. Intermediary nodes make it possible
to design some interesting and flexible networking architectures that can be influenced
by message content.&lt;/font&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span class=442385200-26112004&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font size=2&gt;&lt;font face=Arial&gt;While processing a message, a SOAP node assumes
one or more roles that influence how SOAP headers are processed. &lt;/font&gt;&lt;/font&gt;&lt;font size=+0&gt;&lt;span class=442385200-26112004&gt;&lt;font face=Arial size=2&gt;SOAP
1.1 only defines a single role named &lt;b&gt;http://schemas.xmlsoap.org/soap/actor/next&lt;/b&gt; (&lt;i&gt;next, &lt;/i&gt;for
short). Every SOAP node is required to assume the &lt;i&gt;next &lt;/i&gt;role. Hence, when a
SOAP message arrives at any given SOAP node, the node must process all mandatory headers
targeted at the &lt;i&gt;next &lt;/i&gt;role, and it may choose to process optional headers also
targeted at the &lt;i&gt;next &lt;/i&gt;role. In addition to &lt;i&gt;next, &lt;/i&gt;SOAP 1.2 adds two new
predefined roles to the existing "&lt;strong&gt;&lt;em&gt;Next&lt;/em&gt;&lt;/strong&gt;" role in SOAP 1.1
which is the "&lt;strong&gt;&lt;em&gt;None&lt;/em&gt;&lt;/strong&gt;" and the "&lt;strong&gt;&lt;em&gt;Ultimate Receiver&lt;/em&gt;&lt;/strong&gt;"
role.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;
&lt;font face=Arial size=2&gt;SOAP headers target specific roles through the global &lt;b&gt;actor&lt;/b&gt; attribute
(SOAP 1.&lt;span class=442385200-26112004&gt;1&lt;/span&gt;). When&amp;nbsp;you send a SOAP message
to a receiving service&amp;nbsp;without specifying the actor value, the actor attribute
will be absent from the header&lt;span class=442385200-26112004&gt;.&amp;nbsp;In this case&lt;/span&gt;,
the header is targeted at the ultimate receiver by default.&lt;span class=442385200-26112004&gt; &lt;/span&gt;If
a SOAP node successfully processes a header, it&lt;span class=442385200-26112004&gt; &lt;strong&gt;&lt;em&gt;MUST&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;remove
the header from the message. SOAP nodes are allowed to reinsert headers, but doing
so changes the contract parties&amp;#8212;it's now between the current node and the next
node the header targets&lt;span class=442385200-26112004&gt; (&lt;strike&gt;Point-to-Point&lt;/strike&gt; Node-to-Node
Trust ?)&lt;/span&gt;.&lt;/font&gt;&gt;&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span class=442385200-26112004&gt;&lt;font face=Arial&gt;&lt;font size=2&gt;In WSE 2.0,&amp;nbsp;security
headers can be processed if any of the following conditions are true:&lt;/font&gt; 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font face=Arial size=2&gt;Actor is equal to ActorNext. &lt;/font&gt; 
&lt;li&gt;
&lt;font face=Arial size=2&gt;Actor matches this node. &lt;/font&gt; 
&lt;li&gt;
&lt;font face=Arial size=2&gt;Actor is empty and the IsIntermediary property of context
is false .&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;font size=2&gt;From my understanding of the above, an endpoint (not an intermediary)&amp;nbsp;should
assume 3 roles --- Its own role, an actorless security header and also must process
one that says &lt;em&gt;&lt;strong&gt;next&lt;/strong&gt;.&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;However, if I send 2 security headers (one for "&lt;a href="http://schemas.xmlsoap.org/soap/actor/next"&gt;http://schemas.xmlsoap.org/soap/actor/next&lt;/a&gt;"
and the other doesnt have an actor attribute) to an&amp;nbsp;endpoint.asmx, it fails with
a "&lt;em&gt;&lt;strong&gt;&lt;font color=#ff0000&gt;The &amp;lt;EncryptedData&amp;gt; element referenced by
the &amp;lt;ReferenceList&amp;gt; in the Security header could not be found&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;"
exception. I did some tracing and found that the later security header with the &lt;em&gt;&lt;strong&gt;next&lt;/strong&gt;&lt;/em&gt; role
is appended to the security header with the actorless attribute. I believe it should
have been &lt;strong&gt;&lt;em&gt;prepended&lt;/em&gt;&lt;/strong&gt; instead.&lt;/font&gt;
&lt;/p&gt;
&gt;&gt; 
&lt;div&gt;&lt;font face=Arial size=2&gt;Cracking open the&amp;nbsp;IL on&amp;nbsp;SecurityInputFilter
further reveals this.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;There is a CanProcessHeader method that looks for the
actorless attribute first, once it finds it, it processes it and removes it. Then,
it then look for the ActorNext URI role.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;This will not work in my case as the intermediary which
has inserted the later &lt;em&gt;&lt;strong&gt;next&lt;/strong&gt;&lt;/em&gt; role security header by encrypting
the SOAP message a &lt;em&gt;&lt;strong&gt;second&lt;/strong&gt;&lt;/em&gt; time needs to be processed and
decrypted first. The CanProcessHeader method will definitely fail as it cannot find
the actorless security header referenced security token without decrypting it with
the tokens found in the&amp;nbsp;&lt;em&gt;next&lt;/em&gt;&amp;nbsp;role security header first. However,&amp;nbsp;WSE
looks for the actorless attribute header first.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;protected&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;...&lt;/span&gt;
&lt;br&gt;
...&lt;/span&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; text1 &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; header.GetAttribute(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"actor"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://schemas.xmlsoap.org/soap/envelope/"&lt;/span&gt;);&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (text1.Length
== 0)&lt;br&gt;
{&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (context.IsIntermediary)&lt;br&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: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;false&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;return&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;true&lt;/span&gt;;&lt;br&gt;
}&lt;br&gt;
Uri uri1 &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; Uri(text1);&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (!uri1.Equals(Soap.ActorNextURI)
&amp;amp;&amp;amp; !uri1.Equals(context.Actor))&lt;br&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: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;false&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;return&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;true&lt;/span&gt;;&lt;br&gt;
}&lt;/span&gt;
&lt;/p&gt;
&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;I suppose I can try to re-arrange the security headers
to a proper sequence although I would hate to do that (Am I supposed to be even doing
that ?).&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;The funny thing is that if I choose not to encrypt the
body a second time and instead just add the &lt;em&gt;next&lt;/em&gt; role attribute security
header instead (which means this second security header does nothing), it still throws
me an exception&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial color=#ff0000 size=2&gt;&lt;strong&gt;&lt;em&gt;Microsoft.Web.Services2.Security.SecurityFault:
An error was discovered processing the &amp;lt;Security&amp;gt; header&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;Could someone shed some light on this issue. Is an endpoint
supposed to take on the role of the next actor attribute ? If so, shouldn't the security
headers with a SOAP &lt;em&gt;&lt;strong&gt;next&lt;/strong&gt;&lt;/em&gt; role attribute (which is very likely
to be input from an intermediary) be &lt;strong&gt;&lt;em&gt;prepended&lt;/em&gt;&lt;/strong&gt; to the actorless
security header instead or is this a bug in&amp;nbsp;WSE ?&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;span class=442385200-26112004&gt;&lt;strong&gt;[Just added: &lt;/strong&gt;&lt;a href="http://www.dynamic-cast.com/" target=_blank&gt;&lt;strong&gt;Hervey
Wilson&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; [Dev Lead of WSE] has &lt;/strong&gt;&lt;a href="http://www.dynamic-cast.com/mt-archives/000069.html" target=_blank&gt;&lt;strong&gt;this&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to
reply to this post.. Thanks Hervey for your thoughts on this issue.]&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=1508b8a2-a4f5-49a3-beb4-15725f0b0f59" /&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>Web Services Enhancements (WSE);WS-Splat Specs;XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=14a50c42-347c-4198-9489-7c67535a23f2</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,14a50c42-347c-4198-9489-7c67535a23f2.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Word from the man <a href="http://www.dynamic-cast.com/mt-archives/000068.html" target="_blank">Hervey</a> himself.
Find it here.
</p>
        <p>
          <a href="http://download.microsoft.com/download/6/a/b/6ab540df-0a42-48a3-891d-8f54bcfdeb0a/Microsoft%20WSE%202.0%20SP2.msi">WSE2.0
SP2 Pre-release Full product</a> and the <a href="http://download.microsoft.com/download/1/5/5/155251c1-a7df-49be-91e3-e6138e82146b/Microsoft%20WSE%202.0%20SP2%20Runtime.msi">Runtime</a></p>
        <p>
          <strong>
            <em>
              <u>Contents from the ReadMe:</u>
            </em>
          </strong>
        </p>
        <p>
          <i>Core product changes</i>:
</p>
        <ul>
          <li>
A new compatibility section is used to select the wire format on the sending<br />
side. The mode attribute tells WSE runtime to generate a message which will be<br />
compatibable to a particular release of WSE. By default, the mode is WSE2RTM. It can
be WSE2RTM, WSE2SP1 WSE2SP2 and so on. On the receiving end, a particular version
of WSE runtime will be able to accept all types of wire format in all its previous
releases. In a request-response message exchange, a server will generate a response
message which is compatible with the request message. The server will, by default,
still use the compatibility section to generate its response if it cannot determine
the compatibility mode based on the request message.<br /></li>
          <li>
A new implementation of the Kerberos token based on SSPI interfaces is included in
this release. The new token is named KerberosToken2. Please see the reference documentation
for more details.<br /></li>
          <li>
The TokenIssuer element in the KerberosToken security token assertion is 
<br />
no longer supported on the receiving end.<br /></li>
          <li>
The SecurityTokenManager no longer throws exception in LoadTokenFromXml() when token.IsCurrent
returns false. WSE security input filter will continue checking that and throw exception
if token.IsCurrent returns false.<br /></li>
          <li>
The inclusion of unencrypted Username tokens in a message may represent a security
vulnerability. The SecurityTokenServiceClient class will now automatically encrypt
any Username tokens included in a request. Similarly, the SecurityTokenService class
will automatically encrypt any username tokens included in a response. 
<p></p><p>
The following methods have been added to the token issuing framework:
</p><p><b>protected virtual void SecurityTokenServiceClient.EnforceRequestUsernameTokenEncryption()</b>.<br />
Called from EnforceRequestPolicy(), this method enforces the requirement that any
Username tokens in an RST message must be encrypted. The issuerToken is used as the
encrypting token. This method will throw an exception if it cannot encrypt the UsernameTokens
in an RST message.<br />
Override this method to suppress this behavior.
</p><p><b>protected virtual void SecurityTokenService.VerifyRequestUsernameTokenEncryption()</b>.<br />
Called from VerifyRequestPolicy(), this method verifies that tokens in an RST message
are encrypted. This method will throw an exception if it encounters an unencrypted
UsernameToken in an RST message.<br />
Override this method to suppress this test.
</p><p><b>protected virtual void SecurityTokenService.EnforceResponseUsernameTokenEncryption()</b>.<br />
Called from EnforceResponsePolicy(), this method enforces the requirement that any
Username tokens in an RSTR message must be encrypted. The ResponseEncryptingToken
is used as the encrypting token. This method will throw an exception if it cannot
encrypt the UsernameTokens in an RSTR message.<br />
Override this method to suppress this behavior.
</p><p><b>protected virtual void SecurityTokenServiceClient.VerifyResponseUsernameTokenEncryption()</b>.<br />
Called from VerifyResponsePolicy(), this method verifies that tokens in an RSTR message
are encrypted. This method will throw an exception if it encounters an unencrypted
UsernameToken in an RSTR message.<br />
Override this method to suppress this test.<br /></p></li>
          <li>
A new method, <b>protected virtual void SecurityTokenServiceClient.ClearRequestSoapContext()</b>,
has been added. This method was added to fix a bug in which successive requests for
a SecurityContextToken, made through a single instance of SecurityContextTokenClient,
would fail. The problem was caused by a failure to clear security elements and tokens
from the soap context after a request was made. In the event that a sub-class of SecurityTokenServiceClient
requires that security elements or tokens in the soap context be preserved from one
request to another, the new behavior may be suppressed by overriding the <b>ClearRequestSoapContext</b> method.<br /></li>
          <li>
SoapService will now send back an empty SoapEnvelope back if the soap method it is
invoking returns null for a request/response scenario.<br /></li>
          <li>
EncryptedData.Decrypt will only support decryption to one and only one xml element.
It throws a security fault otherwise.<br /></li>
          <li>
In the SoapHttpOutputChannel.Send method, if the response has an unsupported content
type, such as text/html, the response stream will be read and stored in the exception
text.<br /></li>
          <li>
Two new properties, SimpleDisplayName and FriendlyDisplayName, have been added to
the X509Certificate class.<br /></li>
          <li>
The default Label used in DerivedKeyToken has changed from "WS-SecureConversation"
to "WS-SecureConversationWS-SecureConversation".<br /></li>
          <li>
If an incoming message contains multiple security tokens with envelope signature inside
those tokens, the server was returning a security fault. This is now fixed.<br /></li>
          <li>
If WSE SOAP messaging stack is used over HTTP/HTTPS transport, a simple WSE805 exception
was thrown when the response content type was not supported. Now if the response stream
is readable, WSE runtime will read from response stream and throw a WSE805 exception
with a more detailed error information read from the response stream.<br /></li>
          <li>
WSE configuration section will now allow whitespace or comments as child nodes for
the following configuration elements: diagnostics/trace, diagnostics/policyTrace,
diagnostics/detailedErrors, referralCache/cache, security/x509, security/limits.<br /></li>
          <li>
When a security context token was deserialized, WSE runtime will retrieve a token
from its cache based on its globally unique Identifier. The token retrieved from the
cache sometimes have a different Id than the token received from the incoming message.
If that happens, WSE runtime would previously fail to verify a signature or decrypt
the message. It is now fixed as it will assign the Id of the token from the incoming
message to the token retrieved from the cache.<br /></li>
          <li>
The built-in SecurityContextToken service would previously cache a newly issued security
context token instance before those properties defined in the IIssuedToken interface
are set. Now it is fixed so that those properties are set before the newly issued
token is cached.<br /></li>
          <li>
WSE runtime would previouly always generate a relative token reference in calculating
message signature. When the token is not sent with the message, the receiver will
return a security fault. It is now fixed so that an absolute token reference will
be generated in the case when the security token is not in the message.<br /></li>
          <li>
A server fault was thrown previously when a server tries to verify a signature or
decrypt a message based on a username token which uses plaintext password option or
no password option and does not have nonce and/or created element. The exception is
now changed to be a client fault.<br /></li>
          <li>
SoapService instances configured to automatically issue <b>SecurityContextToken</b> (SCT)
security tokens no longer re-use the same instance of the SCT issuer. With this service
pack, a new instance is created per request. This instance is accessible via the <b>SoapService.AutoIssueSCTService</b> property.
If the old behavior<br />
is required, there are two work-arounds:<br /><ol></ol><br /></li>
          <li>
override the <b>SoapService.AutoIssueSCTService</b> property to return a singleton
instance of a <b>SecurityContextTokenService</b>, or<br /><br /></li>
          <li>
create a wrapper <b>SecurityContextTokenService</b> that delegates to a singleton
instance and register it through configuration.</li>
        </ul>
        <p>
        </p>
        <p>
          <i>Visual Studio tool integration changes</i>: 
</p>
        <ul>
          <li>
The default value for http Routing handler type is updated.<br /></li>
          <li>
WSE setting tool can support VS C++ project.<br /></li>
          <li>
WSE setting tool would always prompt users for confirmation when the Cancel button
was clicked. Now it is fixed so that the tool will prompt user only when some changes
are made by users.<br /></li>
          <li>
The Security Settings Wizard can support creating Policy files for remote service.<br /><i></i></li>
        </ul>
        <p>
          <i>WseWsdl2 tool changes</i>:
</p>
        <ul>
          <li>
The WseWsdl2 tool now properly generates proxy classes when an Web service uses a
Guid type.<br /></li>
          <li>
If an input schema contains a type definition which is derived from another complex
type, the proxy class would generate a class definition for that derived type with
incorrect namespace. This is now fixed.</li>
        </ul>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=14a50c42-347c-4198-9489-7c67535a23f2" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>WSE 2.0 SP2 is here</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,14a50c42-347c-4198-9489-7c67535a23f2.aspx</guid>
      <link>http://www.softwaremaker.net/blog/WSE20SP2IsHere.aspx</link>
      <pubDate>Tue, 23 Nov 2004 10:07:07 GMT</pubDate>
      <description>&lt;p&gt;
Word from the man &lt;a href="http://www.dynamic-cast.com/mt-archives/000068.html" target=_blank&gt;Hervey&lt;/a&gt; himself.
Find it here.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://download.microsoft.com/download/6/a/b/6ab540df-0a42-48a3-891d-8f54bcfdeb0a/Microsoft%20WSE%202.0%20SP2.msi"&gt;WSE2.0
SP2 Pre-release Full product&lt;/a&gt;&amp;nbsp;and the &lt;a href="http://download.microsoft.com/download/1/5/5/155251c1-a7df-49be-91e3-e6138e82146b/Microsoft%20WSE%202.0%20SP2%20Runtime.msi"&gt;Runtime&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;&lt;u&gt;Contents from the ReadMe:&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Core product changes&lt;/i&gt;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
A new compatibility section is used to select the wire format on the sending&lt;br&gt;
side. The mode attribute tells WSE runtime to generate a message which will be&lt;br&gt;
compatibable to a particular release of WSE. By default, the mode is WSE2RTM. It can
be WSE2RTM, WSE2SP1 WSE2SP2 and so on. On the receiving end, a particular version
of WSE runtime will be able to accept all types of wire format in all its previous
releases. In a request-response message exchange, a server will generate a response
message which is compatible with the request message. The server will, by default,
still use the compatibility section to generate its response if it cannot determine
the compatibility mode based on the request message.&lt;br&gt;
&lt;li&gt;
A new implementation of the Kerberos token based on SSPI interfaces is included in
this release. The new token is named KerberosToken2. Please see the reference documentation
for more details.&lt;br&gt;
&lt;li&gt;
The TokenIssuer element in the KerberosToken security token assertion is 
&lt;br&gt;
no longer supported on the receiving end.&lt;br&gt;
&lt;li&gt;
The SecurityTokenManager no longer throws exception in LoadTokenFromXml() when token.IsCurrent
returns false. WSE security input filter will continue checking that and throw exception
if token.IsCurrent returns false.&lt;br&gt;
&lt;li&gt;
The inclusion of unencrypted Username tokens in a message may represent a security
vulnerability. The SecurityTokenServiceClient class will now automatically encrypt
any Username tokens included in a request. Similarly, the SecurityTokenService class
will automatically encrypt any username tokens included in a response. 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The following methods have been added to the token issuing framework:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;protected virtual void SecurityTokenServiceClient.EnforceRequestUsernameTokenEncryption()&lt;/b&gt;.&lt;br&gt;
Called from EnforceRequestPolicy(), this method enforces the requirement that any
Username tokens in an RST message must be encrypted. The issuerToken is used as the
encrypting token. This method will throw an exception if it cannot encrypt the UsernameTokens
in an RST message.&lt;br&gt;
Override this method to suppress this behavior.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;protected virtual void SecurityTokenService.VerifyRequestUsernameTokenEncryption()&lt;/b&gt;.&lt;br&gt;
Called from VerifyRequestPolicy(), this method verifies that tokens in an RST message
are encrypted. This method will throw an exception if it encounters an unencrypted
UsernameToken in an RST message.&lt;br&gt;
Override this method to suppress this test.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;protected virtual void SecurityTokenService.EnforceResponseUsernameTokenEncryption()&lt;/b&gt;.&lt;br&gt;
Called from EnforceResponsePolicy(), this method enforces the requirement that any
Username tokens in an RSTR message must be encrypted. The ResponseEncryptingToken
is used as the encrypting token. This method will throw an exception if it cannot
encrypt the UsernameTokens in an RSTR message.&lt;br&gt;
Override this method to suppress this behavior.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;protected virtual void SecurityTokenServiceClient.VerifyResponseUsernameTokenEncryption()&lt;/b&gt;.&lt;br&gt;
Called from VerifyResponsePolicy(), this method verifies that tokens in an RSTR message
are encrypted. This method will throw an exception if it encounters an unencrypted
UsernameToken in an RSTR message.&lt;br&gt;
Override this method to suppress this test.&lt;br&gt;
&lt;/p&gt;
&lt;li&gt;
A new method, &lt;b&gt;protected virtual void SecurityTokenServiceClient.ClearRequestSoapContext()&lt;/b&gt;,
has been added. This method was added to fix a bug in which successive requests for
a SecurityContextToken, made through a single instance of SecurityContextTokenClient,
would fail. The problem was caused by a failure to clear security elements and tokens
from the soap context after a request was made. In the event that a sub-class of SecurityTokenServiceClient
requires that security elements or tokens in the soap context be preserved from one
request to another, the new behavior may be suppressed by overriding the &lt;b&gt;ClearRequestSoapContext&lt;/b&gt; method.&lt;br&gt;
&lt;li&gt;
SoapService will now send back an empty SoapEnvelope back if the soap method it is
invoking returns null for a request/response scenario.&lt;br&gt;
&lt;li&gt;
EncryptedData.Decrypt will only support decryption to one and only one xml element.
It throws a security fault otherwise.&lt;br&gt;
&lt;li&gt;
In the SoapHttpOutputChannel.Send method, if the response has an unsupported content
type, such as text/html, the response stream will be read and stored in the exception
text.&lt;br&gt;
&lt;li&gt;
Two new properties, SimpleDisplayName and FriendlyDisplayName, have been added to
the X509Certificate class.&lt;br&gt;
&lt;li&gt;
The default Label used in DerivedKeyToken has changed from "WS-SecureConversation"
to "WS-SecureConversationWS-SecureConversation".&lt;br&gt;
&lt;li&gt;
If an incoming message contains multiple security tokens with envelope signature inside
those tokens, the server was returning a security fault. This is now fixed.&lt;br&gt;
&lt;li&gt;
If WSE SOAP messaging stack is used over HTTP/HTTPS transport, a simple WSE805 exception
was thrown when the response content type was not supported. Now if the response stream
is readable, WSE runtime will read from response stream and throw a WSE805 exception
with a more detailed error information read from the response stream.&lt;br&gt;
&lt;li&gt;
WSE configuration section will now allow whitespace or comments as child nodes for
the following configuration elements: diagnostics/trace, diagnostics/policyTrace,
diagnostics/detailedErrors, referralCache/cache, security/x509, security/limits.&lt;br&gt;
&lt;li&gt;
When a security context token was deserialized, WSE runtime will retrieve a token
from its cache based on its globally unique Identifier. The token retrieved from the
cache sometimes have a different Id than the token received from the incoming message.
If that happens, WSE runtime would previously fail to verify a signature or decrypt
the message. It is now fixed as it will assign the Id of the token from the incoming
message to the token retrieved from the cache.&lt;br&gt;
&lt;li&gt;
The built-in SecurityContextToken service would previously cache a newly issued security
context token instance before those properties defined in the IIssuedToken interface
are set. Now it is fixed so that those properties are set before the newly issued
token is cached.&lt;br&gt;
&lt;li&gt;
WSE runtime would previouly always generate a relative token reference in calculating
message signature. When the token is not sent with the message, the receiver will
return a security fault. It is now fixed so that an absolute token reference will
be generated in the case when the security token is not in the message.&lt;br&gt;
&lt;li&gt;
A server fault was thrown previously when a server tries to verify a signature or
decrypt a message based on a username token which uses plaintext password option or
no password option and does not have nonce and/or created element. The exception is
now changed to be a client fault.&lt;br&gt;
&lt;li&gt;
SoapService instances configured to automatically issue &lt;b&gt;SecurityContextToken&lt;/b&gt; (SCT)
security tokens no longer re-use the same instance of the SCT issuer. With this service
pack, a new instance is created per request. This instance is accessible via the &lt;b&gt;SoapService.AutoIssueSCTService&lt;/b&gt; property.
If the old behavior&lt;br&gt;
is required, there are two work-arounds:&lt;br&gt;
&lt;ol&gt;
&lt;br&gt;
&lt;li&gt;
override the &lt;b&gt;SoapService.AutoIssueSCTService&lt;/b&gt; property to return a singleton
instance of a &lt;b&gt;SecurityContextTokenService&lt;/b&gt;, or&lt;br&gt;
&lt;br&gt;
&lt;li&gt;
create a wrapper &lt;b&gt;SecurityContextTokenService&lt;/b&gt; that delegates to a singleton
instance and register it through configuration.&lt;/li&gt;&gt;
&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Visual Studio tool integration changes&lt;/i&gt;: 
&lt;ul&gt;
&lt;li&gt;
The default value for http Routing handler type is updated.&lt;br&gt;
&lt;li&gt;
WSE setting tool can support VS C++ project.&lt;br&gt;
&lt;li&gt;
WSE setting tool would always prompt users for confirmation when the Cancel button
was clicked. Now it is fixed so that the tool will prompt user only when some changes
are made by users.&lt;br&gt;
&lt;li&gt;
The Security Settings Wizard can support creating Policy files for remote service.&lt;br&gt;
&lt;i&gt;&lt;/i&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;i&gt;WseWsdl2 tool changes&lt;/i&gt;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The WseWsdl2 tool now properly generates proxy classes when an Web service uses a
Guid type.&lt;br&gt;
&lt;li&gt;
If an input schema contains a type definition which is derived from another complex
type, the proxy class would generate a class definition for that derived type with
incorrect namespace. This is now fixed.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=14a50c42-347c-4198-9489-7c67535a23f2" /&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>Web Services Enhancements (WSE);XML Services</category>
    </item>
    <item>
      <trackback:ping>http://www.softwaremaker.net/blog/Trackback.aspx?guid=86bbdfc8-cb36-4691-9988-48f91aed1dac</trackback:ping>
      <pingback:server>http://www.softwaremaker.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.softwaremaker.net/blog/PermaLink,guid,86bbdfc8-cb36-4691-9988-48f91aed1dac.aspx</pingback:target>
      <dc:creator>William Tay</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I came across this <a href="http://www.thespoke.net/MyBlog/Fai/MyBlog_Comments.aspx?ID=30191" target="_blank">blog</a> last
week, detailing a problem he is facing with WSE 2.0
</p>
        <p>
Now I that realize who he is (Hello Fai <img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif" />),
I peep into his project to see how I could help. Fai, incidentally, is the Academic
DE for MSFT Malaysia and I met him in MS Tech.ED 2004 Asia in Msia.
</p>
        <p>
Since I cannot comment on this blog (since theSpoke doesnt allow it <img src="http://www.softwaremaker.net/pictures/swmemoticons/sad.gif" /> and
I dont intend to keep another account), I will comment on his problem here.
</p>
        <p>
I reproduce Fai's blog snippets here. 
<hr id="null" /><font face="Arial" color="#000066" size="2"><strong><em>SoapSender &amp; SoapReceiver</em></strong></font></p>
        <p>
        </p>
        <p>
          <font face="Arial" color="#000066" size="2">I've been mucking around with WSE 2.0
Messaging, now moving on to SoapSender and SoapReceiver. I noticed a potential problem
when I have a class that extends the SoapReceiver class, and within the Receive()
method, it also sends out a SoapEnvelope via the SoapSender.Send() method. The problem
only arises when I use a real transport protocol, i.e., TCP, but not when I'm using
the in-proc transport. I've tried all sort of ways, including transfering the SoapSender
code away from the Receive() method to a method in another class. But it still doesn't
work.</font>
        </p>
        <div>
          <font face="Arial" color="#000066" size="2">The behavior of my current Receive()
method almost seems like it is acting like a SOAP router. This is because it receives
a SoapEnvelope, sends out another SoapEnvelope albeit doing some computation and returning
a totally different SoapEnvelope.</font>
        </div>
        <div>
          <font color="#000066">
          </font> 
</div>
        <div>
          <font face="Arial" color="#000066" size="2">Then I discovered the IsIntermediary
property of the Pipeline class from this <a href="http://hyperthink.net/blog/PermaLink,guid,97388cbb-fd2c-4fd2-8347-1b0770c776e4.aspx" target="_blank">blog</a>.
According to the WSE 2.0 Class Reference, this property gets or sets a value indicating
whether the pipeline is running within a SOAP router. Fair enough, and I implemented
the following code:</font>
        </div>
        <div>
          <font face="Arial" color="#000066" size="2">
            <br />
   // send response SOAP message<br />
   SoapEnvelope env = new SoapEnvelope();<br />
   env.Context.Addressing.Action = e.Context.Addressing.Action;<br />
   env.Context.Addressing.Destination = e.Context.Addressing.ReplyTo;<br />
   env.SetBodyObject(resp);<br />
   Pipeline pipe = new Pipeline();<br />
   pipe.IsIntermediary = false;<br />
   pipe.ProcessOutputMessage(env);<br />
   
<br />
   SoapSender responseSender = new SoapSender(env.Context.Addressing.Destination);<br />
   responseSender.Pipeline = pipe;<br />
   responseSender.Destination = env.Context.Addressing.Destination;<br />
   responseSender.Send(env);</font>
        </div>
        <div>
          <font face="Arial" color="#000066" size="2">
          </font> 
</div>
        <div>
          <font face="Arial" color="#000066" size="2">I've also tried move the MathResponseReceiver
class to a separate project so that it can be started separately. Still to no avail.
According to another blog I read, WSE 2.0 is smart enough to know if there are two
receivers classes within a single application domain, and both are communicating with
each other using an actual network protocol like TCP or HTTP, it will detect that
and switch it in-process instead. </font>
        </div>
        <div>
          <font color="#000066">
          </font> 
</div>
        <div>
          <font face="Arial" size="2">
            <font color="#000066">But still it doesn't work!
I appreciate if anyone out there could help me fix this. Could it be a bug in WSE
2.0?</font>
          </font>
          <font face="Arial" size="2">
          </font>
        </div>
        <div>
          <hr id="null" />
        </div>
        <div> 
</div>
        <div>
          <a href="http://hyperthink.net/blog" target="_blank">Steve</a> talks about pipelines
and routing in his blog above. However, I dont think the pipeline.IsIntermediary helps
you in this case because you really never did subject your message through a routing
pipeline. Therefore, it doesnt address or solve your problem at all.
</div>
        <div> 
</div>
        <div>The problem (after looking through your codes and running SOAP Trace Diagnostics)
and you are going to hate me for this, is just a programmatic syntax error 
</div>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">env.Context.Addressing.Destination <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> e.Context.Addressing.ReplyTo<strong><font color="#ff0000">.Address.Value</font></strong>;</span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Arial" color="#003300" size="2">What
you missed out was actually pass in the address property of the ReplyTo class. This
address property (<em>which is inherited from an EPR</em>) will get you the address
of the destination.</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Arial" color="#003300" size="2">So,
your final code snippet should simply look like this (without the pipelines class):
</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SoapSender
responseSender <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> SoapSender(e.Context.Addressing.ReplyTo.Address.Value);<br />
SoapEnvelope env <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> SoapEnvelope();<br />
env.Context.Addressing.Action <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> e.Context.Addressing.Action;<br />
env.SetBodyObject(resp);<br />
responseSender.Send(env);</span>
        </p>
        <p>
I hope this helps. Try it and let me know here if it works.
</p>
        <img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=86bbdfc8-cb36-4691-9988-48f91aed1dac" />
        <br />
        <hr />
© William Tay 2012 | Swinging Technologist 
<br /><a href="http://www.softwaremaker.net/blog">http://www.softwaremaker.net/blog</a></body>
      <title>Not a bug, but a programmatical syntax error ... and Pipeline.IsIntermediary is only used within the context of a Pipeline</title>
      <guid isPermaLink="false">http://www.softwaremaker.net/blog/PermaLink,guid,86bbdfc8-cb36-4691-9988-48f91aed1dac.aspx</guid>
      <link>http://www.softwaremaker.net/blog/NotABugButAProgrammaticalSyntaxErrorAndPipelineIsIntermediaryIsOnlyUsedWithinTheContextOfAPipeline.aspx</link>
      <pubDate>Tue, 23 Nov 2004 06:23:16 GMT</pubDate>
      <description>&lt;p&gt;
I came across this &lt;a href="http://www.thespoke.net/MyBlog/Fai/MyBlog_Comments.aspx?ID=30191" target=_blank&gt;blog&lt;/a&gt; last
week, detailing a problem he is facing with WSE 2.0
&lt;/p&gt;
&lt;p&gt;
Now I that realize who he is (Hello Fai &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/wink.gif"&gt;),
I peep into his project to see how I could help. Fai, incidentally, is the Academic
DE for MSFT Malaysia and I met him in MS Tech.ED 2004 Asia in Msia.
&lt;/p&gt;
&lt;p&gt;
Since I cannot comment on this blog (since theSpoke doesnt allow it &lt;img src="http://www.softwaremaker.net/pictures/swmemoticons/sad.gif"&gt; and
I dont intend to&amp;nbsp;keep another account), I will comment on his problem here.
&lt;/p&gt;
&lt;p&gt;
I reproduce&amp;nbsp;Fai's blog snippets here. 
&lt;hr id=null&gt;
&lt;font face=Arial color=#000066 size=2&gt;&lt;strong&gt;&lt;em&gt;SoapSender &amp;amp; SoapReceiver&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Arial color=#000066 size=2&gt;I've been mucking around with WSE 2.0 Messaging,
now moving on to SoapSender and SoapReceiver. I noticed a potential problem when I
have a class that extends the SoapReceiver class, and within the Receive() method,
it also sends out a SoapEnvelope via the SoapSender.Send() method. The problem only
arises when I use a real transport protocol, i.e., TCP, but not when I'm using the
in-proc transport. I've tried all sort of ways, including transfering the SoapSender
code away from the Receive() method to a method in another class. But it still doesn't
work.&lt;/font&gt;
&lt;/p&gt;
&lt;div&gt;&lt;font face=Arial color=#000066 size=2&gt;The behavior of my current Receive() method
almost seems like it is acting like a SOAP router. This is because it receives a SoapEnvelope,
sends out another SoapEnvelope albeit doing some computation and returning a totally
different SoapEnvelope.&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font color=#000066&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial color=#000066 size=2&gt;Then I discovered the IsIntermediary property
of the Pipeline class from this &lt;a href="http://hyperthink.net/blog/PermaLink,guid,97388cbb-fd2c-4fd2-8347-1b0770c776e4.aspx" target=_blank&gt;blog&lt;/a&gt;.
According to the WSE 2.0 Class Reference, this property gets or sets a value indicating
whether the pipeline is running within a SOAP router. Fair enough, and I implemented
the following code:&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial color=#000066 size=2&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; // send response SOAP message&lt;br&gt;
&amp;nbsp;&amp;nbsp; SoapEnvelope env = new SoapEnvelope();&lt;br&gt;
&amp;nbsp;&amp;nbsp; env.Context.Addressing.Action = e.Context.Addressing.Action;&lt;br&gt;
&amp;nbsp;&amp;nbsp; env.Context.Addressing.Destination = e.Context.Addressing.ReplyTo;&lt;br&gt;
&amp;nbsp;&amp;nbsp; env.SetBodyObject(resp);&lt;br&gt;
&amp;nbsp;&amp;nbsp; Pipeline pipe = new Pipeline();&lt;br&gt;
&amp;nbsp;&amp;nbsp; pipe.IsIntermediary = false;&lt;br&gt;
&amp;nbsp;&amp;nbsp; pipe.ProcessOutputMessage(env);&lt;br&gt;
&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp; SoapSender responseSender = new SoapSender(env.Context.Addressing.Destination);&lt;br&gt;
&amp;nbsp;&amp;nbsp; responseSender.Pipeline = pipe;&lt;br&gt;
&amp;nbsp;&amp;nbsp; responseSender.Destination = env.Context.Addressing.Destination;&lt;br&gt;
&amp;nbsp;&amp;nbsp; responseSender.Send(env);&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial color=#000066 size=2&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial color=#000066 size=2&gt;I've also tried move the MathResponseReceiver
class to a separate project so that it can be started separately. Still to no avail.
According to another blog I read, WSE 2.0 is smart enough to know if there are two
receivers classes within a single application domain, and both are communicating with
each other using an actual network protocol like TCP or HTTP, it will detect that
and switch it in-process instead. &lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font color=#000066&gt;&lt;/font&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;font face=Arial size=2&gt;&lt;font color=#000066&gt;But still it doesn't work! I appreciate
if anyone out there could help me fix this. Could it be a bug in WSE 2.0?&lt;/font&gt;&lt;/font&gt;&lt;font face=Arial size=2&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;hr id=null&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&lt;a href="http://hyperthink.net/blog" target=_blank&gt;Steve&lt;/a&gt; talks about pipelines
and routing in his blog above. However, I dont think the pipeline.IsIntermediary helps
you in this case because you really never did subject your message through a routing
pipeline. Therefore, it doesnt address or solve your problem at all.
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;The problem (after looking through your codes and running SOAP Trace Diagnostics)
and you are going to hate me for this, is just a programmatic syntax error 
&lt;/div&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;env.Context.Addressing.Destination &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; e.Context.Addressing.ReplyTo&lt;strong&gt;&lt;font color=#ff0000&gt;.Address.Value&lt;/font&gt;&lt;/strong&gt;;&lt;/span&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=Arial color=#003300 size=2&gt;What
you missed out was actually pass in the address property of the ReplyTo class. This
address property (&lt;em&gt;which is inherited from an EPR&lt;/em&gt;) will get you the address
of the destination.&lt;/font&gt;&lt;/span&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=Arial color=#003300 size=2&gt;So,
your final code snippet should simply look like this (without the pipelines class):
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SoapSender
responseSender &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; SoapSender(e.Context.Addressing.ReplyTo.Address.Value);&lt;br&gt;
SoapEnvelope env &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; SoapEnvelope();&lt;br&gt;
env.Context.Addressing.Action &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; e.Context.Addressing.Action;&lt;br&gt;
env.SetBodyObject(resp);&lt;br&gt;
responseSender.Send(env);&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
I hope this helps. Try it and let me know here if it works.&gt;&gt;
&lt;/p&gt;
&gt;&lt;img width="0" height="0" src="http://www.softwaremaker.net/blog/aggbug.ashx?id=86bbdfc8-cb36-4691-9988-48f91aed1dac" /&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>Web Services Enhancements (WSE);XML Services</category>
    </item>
  </channel>
</rss>