<?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:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Clemens Vasters - Technology|Web Services</title>
    <link>http://vasters.com/clemensv/</link>
    <description>Cloud Development and Alien Abductions</description>
    <language>en-us</language>
    <copyright>Clemens Vasters</copyright>
    <lastBuildDate>Mon, 19 Sep 2011 02:15:26 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.7067.0</generator>
    <managingEditor>cvasters@guhhome.com</managingEditor>
    <webMaster>cvasters@guhhome.com</webMaster>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=44c95cba-0951-4f92-96e2-1366b516f72c</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,44c95cba-0951-4f92-96e2-1366b516f72c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,44c95cba-0951-4f92-96e2-1366b516f72c.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=44c95cba-0951-4f92-96e2-1366b516f72c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This session is a followup to the Service Bus session <a href="http://vasters.com/clemensv/2011/09/16/Building+Looselycoupled+Apps+With+Windows+Azure+Service+Bus+Topics+And+Queues.aspx">that
I did at the build conference</a> and explains advanced usage patterns:
</p>
        <p>
          <iframe style="WIDTH: 512px; HEIGHT: 288px" src="http://channel9.msdn.com/posts/ServiceBusTopicsAndQueues/player?w=512&amp;h=288" frameborder="0" scrolling="no">
          </iframe>
        </p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=44c95cba-0951-4f92-96e2-1366b516f72c" />
      </body>
      <title>Service Bus Topics and Queues &amp;ndash; Advanced</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,44c95cba-0951-4f92-96e2-1366b516f72c.aspx</guid>
      <link>http://vasters.com/clemensv/2011/09/19/Service+Bus+Topics+And+Queues+Ndash+Advanced.aspx</link>
      <pubDate>Mon, 19 Sep 2011 02:15:26 GMT</pubDate>
      <description>&lt;p&gt;
This session is a followup to the Service Bus session &lt;a href="http://vasters.com/clemensv/2011/09/16/Building+Looselycoupled+Apps+With+Windows+Azure+Service+Bus+Topics+And+Queues.aspx"&gt;that
I did at the build conference&lt;/a&gt; and explains advanced usage patterns:
&lt;/p&gt;
&lt;p&gt;
&lt;iframe style="WIDTH: 512px; HEIGHT: 288px" src="http://channel9.msdn.com/posts/ServiceBusTopicsAndQueues/player?w=512&amp;amp;h=288" frameborder=0 scrolling=no&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=44c95cba-0951-4f92-96e2-1366b516f72c" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,44c95cba-0951-4f92-96e2-1366b516f72c.aspx</comments>
      <category>.NET Services</category>
      <category>AppFabric</category>
      <category>Azure</category>
      <category>Talks</category>
      <category>Technology/MSMQ</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=981f28ab-0743-4c34-9130-8811a8d523da</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,981f28ab-0743-4c34-9130-8811a8d523da.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,981f28ab-0743-4c34-9130-8811a8d523da.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=981f28ab-0743-4c34-9130-8811a8d523da</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
From //build in Anaheim
</p>
        <iframe style="WIDTH: 960px; HEIGHT: 544px" src="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-862T/player?w=960&amp;h=544" frameborder="0" scrolling="no">
        </iframe>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=981f28ab-0743-4c34-9130-8811a8d523da" />
      </body>
      <title>Building loosely-coupled Apps with Windows Azure Service Bus Topics and Queues</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,981f28ab-0743-4c34-9130-8811a8d523da.aspx</guid>
      <link>http://vasters.com/clemensv/2011/09/16/Building+Looselycoupled+Apps+With+Windows+Azure+Service+Bus+Topics+And+Queues.aspx</link>
      <pubDate>Fri, 16 Sep 2011 14:49:01 GMT</pubDate>
      <description>&lt;p&gt;
From //build in Anaheim
&lt;/p&gt;
&lt;iframe style="WIDTH: 960px; HEIGHT: 544px" src="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-862T/player?w=960&amp;amp;h=544" frameborder=0 scrolling=no&gt;
&lt;/iframe&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=981f28ab-0743-4c34-9130-8811a8d523da" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,981f28ab-0743-4c34-9130-8811a8d523da.aspx</comments>
      <category>AppFabric</category>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Technology/ISB</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=d41ef7d0-63cd-42ad-8455-ccfcd40997a6</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,d41ef7d0-63cd-42ad-8455-ccfcd40997a6.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,d41ef7d0-63cd-42ad-8455-ccfcd40997a6.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=d41ef7d0-63cd-42ad-8455-ccfcd40997a6</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Our team’s Development Manager MK (Murali Krishnaprasad) and me were interviewed by
Michael Washam on May 2011 CTP release of Windows Azure AppFabric. We discuss new
technologies such as Topics, Queues, Subscriptions and how this relates to doing async
development in the cloud.
</p>
        <p>
 <iframe style="WIDTH: 512px; HEIGHT: 288px" src="http://channel9.msdn.com/Blogs/Server-Side/Understanding-Windows-Azure-AppFabric-Queues/player?w=512&amp;h=288" frameborder="0" scrolling="no"></iframe></p>
        <p>
Republished from <a href="http://channel9.msdn.com/Blogs/Server-Side/Understanding-Windows-Azure-AppFabric-Queues" target="_blank">Channel
9</a></p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=d41ef7d0-63cd-42ad-8455-ccfcd40997a6" />
      </body>
      <title>Understanding Windows Azure AppFabric Queues (and Topics)</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,d41ef7d0-63cd-42ad-8455-ccfcd40997a6.aspx</guid>
      <link>http://vasters.com/clemensv/2011/06/11/Understanding+Windows+Azure+AppFabric+Queues+And+Topics.aspx</link>
      <pubDate>Sat, 11 Jun 2011 01:29:21 GMT</pubDate>
      <description>&lt;p&gt;
Our team’s Development Manager MK (Murali Krishnaprasad) and me were interviewed by
Michael Washam on May 2011 CTP release of Windows Azure AppFabric. We discuss new
technologies such as Topics, Queues, Subscriptions and how this relates to doing async
development in the cloud.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;iframe style="WIDTH: 512px; HEIGHT: 288px" src="http://channel9.msdn.com/Blogs/Server-Side/Understanding-Windows-Azure-AppFabric-Queues/player?w=512&amp;amp;h=288" frameborder=0 scrolling=no&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;
Republished from &lt;a href="http://channel9.msdn.com/Blogs/Server-Side/Understanding-Windows-Azure-AppFabric-Queues" target=_blank&gt;Channel
9&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=d41ef7d0-63cd-42ad-8455-ccfcd40997a6" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,d41ef7d0-63cd-42ad-8455-ccfcd40997a6.aspx</comments>
      <category>AppFabric</category>
      <category>Architecture</category>
      <category>Technology/ISB</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=f5707b54-5d11-4b5a-a1c4-cfc65faca55e</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,f5707b54-5d11-4b5a-a1c4-cfc65faca55e.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,f5707b54-5d11-4b5a-a1c4-cfc65faca55e.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=f5707b54-5d11-4b5a-a1c4-cfc65faca55e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My PDC10 session is available online (it was pre-recorded). I talk about the new ‘Labs’
release that we released into the datacenter this week and about a range of future
capabilities that we’re planning for Service Bus. Some of those future capabilities
that are a bit further out are about bringing back some popular capabilities from
back in the .NET Services incubation days (like Push and Service Orchestration), some
are entirely new.
</p>
        <p>
One important note about the new release at <a href="http://portal.appfabriclabs.com">http://portal.appfabriclabs.com</a> –
for Service Bus, this is a focused release that provides mostly only new features
and doesn’t provide the full capability scope of the production system and SDK. The
goal here is to provide insight into an ongoing development process and opportunity
for feedback as we’re continuing to evolve AppFabric. So don’t derive any implications
from this release on what we’re going to do with the capabilities already in production.
</p>
        <p>
          <a href="http://player.microsoftpdc.com/Session/1f7d009e-29cb-4a15-a1bf-91ffd115c54d">Click
here to go to the talk.</a>
        </p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=f5707b54-5d11-4b5a-a1c4-cfc65faca55e" />
      </body>
      <title>PDC10 Windows Azure AppFabric - Service Bus Futures</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,f5707b54-5d11-4b5a-a1c4-cfc65faca55e.aspx</guid>
      <link>http://vasters.com/clemensv/2010/10/29/PDC10+Windows+Azure+AppFabric+Service+Bus+Futures.aspx</link>
      <pubDate>Fri, 29 Oct 2010 18:20:38 GMT</pubDate>
      <description>&lt;p&gt;
My PDC10 session is available online (it was pre-recorded). I talk about the new ‘Labs’
release that we released into the datacenter this week and about a range of future
capabilities that we’re planning for Service Bus. Some of those future capabilities
that are a bit further out are about bringing back some popular capabilities from
back in the .NET Services incubation days (like Push and Service Orchestration), some
are entirely new.
&lt;/p&gt;
&lt;p&gt;
One important note about the new release at &lt;a href="http://portal.appfabriclabs.com"&gt;http://portal.appfabriclabs.com&lt;/a&gt; –
for Service Bus, this is a focused release that provides mostly only new features
and doesn’t provide the full capability scope of the production system and SDK. The
goal here is to provide insight into an ongoing development process and opportunity
for feedback as we’re continuing to evolve AppFabric. So don’t derive any implications
from this release on what we’re going to do with the capabilities already in production.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://player.microsoftpdc.com/Session/1f7d009e-29cb-4a15-a1bf-91ffd115c54d"&gt;Click
here to go to the talk.&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=f5707b54-5d11-4b5a-a1c4-cfc65faca55e" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,f5707b54-5d11-4b5a-a1c4-cfc65faca55e.aspx</comments>
      <category>AppFabric</category>
      <category>Azure</category>
      <category>Technology</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=6a3321d3-1e96-47ae-8c5e-9d60346627de</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,6a3321d3-1e96-47ae-8c5e-9d60346627de.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,6a3321d3-1e96-47ae-8c5e-9d60346627de.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=6a3321d3-1e96-47ae-8c5e-9d60346627de</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://oreilly.com/catalog/9780596805494">
            <img style="MARGIN: 5px; DISPLAY: inline" alt="Book cover of Programming WCF Services" align="right" src="http://covers.oreilly.com/images/9780596805494/cat.gif" width="180" />
          </a>
        </p>
        <p>
Juval Löwy’s very successful WCF book is now available in its third edition – and
Juval asked me to update the foreword this time around. It’s been over three years
since I wrote the foreword to the first edition and thus it was time for an update
since WCF has moved on quite a bit and the use of it in the customer landscape and
inside of MS has deepened where we’re building a lot of very interesting products
on top of the WCF technology across all businesses – not least of which is the Azure
AppFabric Service Bus that I work on and that’s entirely based on WCF services.
</p>
        <p>
You can take a peek into the latest edition <a href="http://oreilly.com/catalog/9780596805494/preview#preview">at
the O’Reilly website</a> and read my foreword if you care. To be clear: It’s the least
important part of the whole book :-)
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6a3321d3-1e96-47ae-8c5e-9d60346627de" />
      </body>
      <title>Programming WCF Services, Third Edition</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,6a3321d3-1e96-47ae-8c5e-9d60346627de.aspx</guid>
      <link>http://vasters.com/clemensv/2010/09/11/Programming+WCF+Services+Third+Edition.aspx</link>
      <pubDate>Sat, 11 Sep 2010 03:10:05 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://oreilly.com/catalog/9780596805494"&gt;&lt;img style="MARGIN: 5px; DISPLAY: inline" alt="Book cover of Programming WCF Services" align=right src="http://covers.oreilly.com/images/9780596805494/cat.gif" width=180&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Juval Löwy’s very successful WCF book is now available in its third edition – and
Juval asked me to update the foreword this time around. It’s been over three years
since I wrote the foreword to the first edition and thus it was time for an update
since WCF has moved on quite a bit and the use of it in the customer landscape and
inside of MS has deepened where we’re building a lot of very interesting products
on top of the WCF technology across all businesses – not least of which is the Azure
AppFabric Service Bus that I work on and that’s entirely based on WCF services.
&lt;/p&gt;
&lt;p&gt;
You can take a peek into the latest edition &lt;a href="http://oreilly.com/catalog/9780596805494/preview#preview"&gt;at
the O’Reilly website&lt;/a&gt; and read my foreword if you care. To be clear: It’s the least
important part of the whole book :-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6a3321d3-1e96-47ae-8c5e-9d60346627de" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,6a3321d3-1e96-47ae-8c5e-9d60346627de.aspx</comments>
      <category>AppFabric</category>
      <category>Azure</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=a14d84f7-0d07-49da-a5d8-35088052c3e5</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,a14d84f7-0d07-49da-a5d8-35088052c3e5.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,a14d84f7-0d07-49da-a5d8-35088052c3e5.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=a14d84f7-0d07-49da-a5d8-35088052c3e5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In case you need a refresher or update about the things me and our team work on at
Microsoft, <a href="http://www.msteched.com/2010/Australia/COS230">go here</a> for
a very recent and very good presentation by my PM colleague <a href="http://twitter.com/mmyslin">Maggie
Myslinska</a> from TechEd Australia 2010 about Windows Azure AppFabric with Service
Bus demos and a demo of the new Access Control V2 CTP
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=a14d84f7-0d07-49da-a5d8-35088052c3e5" />
      </body>
      <title>Windows Azure AppFabric Overview session from TechEd Australia 2010 </title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,a14d84f7-0d07-49da-a5d8-35088052c3e5.aspx</guid>
      <link>http://vasters.com/clemensv/2010/09/09/Windows+Azure+AppFabric+Overview+Session+From+TechEd+Australia+2010.aspx</link>
      <pubDate>Thu, 09 Sep 2010 01:08:52 GMT</pubDate>
      <description>&lt;p&gt;
In case you need a refresher or update about the things me and our team work on at
Microsoft, &lt;a href="http://www.msteched.com/2010/Australia/COS230"&gt;go here&lt;/a&gt; for
a very recent and very good presentation by my PM colleague &lt;a href="http://twitter.com/mmyslin"&gt;Maggie
Myslinska&lt;/a&gt; from TechEd Australia 2010 about Windows Azure AppFabric with Service
Bus demos and a demo of the new Access Control V2 CTP
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=a14d84f7-0d07-49da-a5d8-35088052c3e5" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,a14d84f7-0d07-49da-a5d8-35088052c3e5.aspx</comments>
      <category>AppFabric</category>
      <category>Architecture/SOA</category>
      <category>Azure</category>
      <category>Technology</category>
      <category>Technology/ISB</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=29ec4fe1-65d8-467e-8360-ce50a2ccd1ff</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,29ec4fe1-65d8-467e-8360-ce50a2ccd1ff.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,29ec4fe1-65d8-467e-8360-ce50a2ccd1ff.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=29ec4fe1-65d8-467e-8360-ce50a2ccd1ff</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I put the slides for my talks at NT Konferenca 2010 <a href="http://cid-123ccd2a7ab10107.skydrive.live.com/browse.aspx/NT%20Konferenca%202010">on
SkyDrive</a>. The major difference from my <a href="http://vasters.com/clemensv/PermaLink,guid,cb6599da-5785-4186-8ca1-68a0f32f4495.aspx">APAC
slides</a> is that I had to put compute and storage <a href="http://cid-123ccd2a7ab10107.skydrive.live.com/self.aspx/NT%20Konferenca%202010/NTK2010-Azure-CapabilitiesAndTips.pptx">into
one deck</a> due to the conference schedule, but instead of purely consolidating and
cutting down the slide count,  I also incorporated some common patterns coming
out from debates in Asia and added slides on predictable and dynamic scaling as well
as on multitenancy. Sadly, I need to rush through all that in 45 minutes
today. 
</p>
        <p>
          <iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 98px; PADDING-RIGHT: 0px; HEIGHT: 115px; PADDING-TOP: 0px" title="Preview" marginheight="0" src="http://cid-123ccd2a7ab10107.skydrive.live.com/embedicon.aspx/NT%20Konferenca%202010" frameborder="0" marginwidth="0" scrolling="no">
          </iframe>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=29ec4fe1-65d8-467e-8360-ce50a2ccd1ff" />
      </body>
      <title>NT Konferenca 2010 - Windows Azure Slidedecks</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,29ec4fe1-65d8-467e-8360-ce50a2ccd1ff.aspx</guid>
      <link>http://vasters.com/clemensv/2010/05/25/NT+Konferenca+2010+Windows+Azure+Slidedecks.aspx</link>
      <pubDate>Tue, 25 May 2010 07:08:59 GMT</pubDate>
      <description>&lt;p&gt;
I put the slides for my talks at NT Konferenca 2010 &lt;a href="http://cid-123ccd2a7ab10107.skydrive.live.com/browse.aspx/NT%20Konferenca%202010"&gt;on
SkyDrive&lt;/a&gt;.&amp;nbsp;The major difference from my&amp;nbsp;&lt;a href="http://vasters.com/clemensv/PermaLink,guid,cb6599da-5785-4186-8ca1-68a0f32f4495.aspx"&gt;APAC
slides&lt;/a&gt;&amp;nbsp;is that I had to put compute and storage&amp;nbsp;&lt;a href="http://cid-123ccd2a7ab10107.skydrive.live.com/self.aspx/NT%20Konferenca%202010/NTK2010-Azure-CapabilitiesAndTips.pptx"&gt;into
one deck&lt;/a&gt; due to the conference schedule, but instead of purely consolidating and
cutting down the slide count,&amp;nbsp; I also incorporated some common patterns coming
out from debates in Asia and added slides on predictable and dynamic scaling as well
as on&amp;nbsp;multitenancy. Sadly, I need to rush&amp;nbsp;through all that in&amp;nbsp;45 minutes
today. 
&lt;/p&gt;
&lt;p&gt;
&lt;iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; WIDTH: 98px; PADDING-RIGHT: 0px; HEIGHT: 115px; PADDING-TOP: 0px" title=Preview marginheight=0 src="http://cid-123ccd2a7ab10107.skydrive.live.com/embedicon.aspx/NT%20Konferenca%202010" frameborder=0 marginwidth=0 scrolling=no&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=29ec4fe1-65d8-467e-8360-ce50a2ccd1ff" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,29ec4fe1-65d8-467e-8360-ce50a2ccd1ff.aspx</comments>
      <category>AppFabric</category>
      <category>Architecture</category>
      <category>Azure</category>
      <category>Talks</category>
      <category>Technology</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=238db3c9-4d49-4c6f-8ff9-a37eaae3eeaa</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,238db3c9-4d49-4c6f-8ff9-a37eaae3eeaa.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,238db3c9-4d49-4c6f-8ff9-a37eaae3eeaa.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=238db3c9-4d49-4c6f-8ff9-a37eaae3eeaa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My office neighbor, our Service Bus Test Lead Vishal Chowdhary put together a bundle
of code and documentation for how to use Service Bus with Server AppFabric and IIS
7.5. Here: <a title="http://code.msdn.microsoft.com/ServiceBusDublinIIS" href="http://code.msdn.microsoft.com/ServiceBusDublinIIS">http://code.msdn.microsoft.com/ServiceBusDublinIIS</a></p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=238db3c9-4d49-4c6f-8ff9-a37eaae3eeaa" />
      </body>
      <title>Hosting Service Bus endpoints in IIS and Server AppFabric (Dublin)</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,238db3c9-4d49-4c6f-8ff9-a37eaae3eeaa.aspx</guid>
      <link>http://vasters.com/clemensv/2010/05/09/Hosting+Service+Bus+Endpoints+In+IIS+And+Server+AppFabric+Dublin.aspx</link>
      <pubDate>Sun, 09 May 2010 23:45:33 GMT</pubDate>
      <description>&lt;p&gt;
My office neighbor, our Service Bus Test Lead Vishal Chowdhary put together a bundle
of code and documentation for how to use Service Bus with Server AppFabric and IIS
7.5. Here: &lt;a title=http://code.msdn.microsoft.com/ServiceBusDublinIIS href="http://code.msdn.microsoft.com/ServiceBusDublinIIS"&gt;http://code.msdn.microsoft.com/ServiceBusDublinIIS&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=238db3c9-4d49-4c6f-8ff9-a37eaae3eeaa" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,238db3c9-4d49-4c6f-8ff9-a37eaae3eeaa.aspx</comments>
      <category>AppFabric</category>
      <category>Azure</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=634b72d9-e200-45de-82db-2ae4c8ef947e</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,634b72d9-e200-45de-82db-2ae4c8ef947e.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,634b72d9-e200-45de-82db-2ae4c8ef947e.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=634b72d9-e200-45de-82db-2ae4c8ef947e</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>… <a href="http://de.wikipedia.org/wiki/Auf_der_Mauer,_auf_der_Lauer">seht Euch
mal die Wa an, wie die Wa ta kann. Auf der Mauer auf der Lauer sitzt ‘ne kleine Wa!</a>.</em>
        </p>
        <p>
It’s a German children’s song. The song starts out with “… sitzt ‘ne kleine Wanze”
(bedbug) and with each verse you leave off a letter: Wanz, Wan, Wa, W, – silence. 
</p>
        <p>
I’ll do the same here, but not with a bedbug:
</p>
        <p>
Let’s sing:
</p>
        <p>
          <font face="Courier New">&lt;soap:Envelope xmlns:soap=”” xmlns:wsaddr=”” xmlns:wsrm=””
xmlns:wsu=”” xmlns:app=””&gt;<br />
   &lt;soap:Header&gt;<br />
         &lt;addr:Action&gt;http://tempuri.org/1.0/Status.set&lt;/addr:Action&gt;<br />
         &lt;wsrm:Sequence&gt;<br />
              &lt;wsrm:Identifier&gt;urn:session-id&lt;/wsrm:Identifier&gt;<br />
              &lt;wsrm:MessageNumber&gt;5&lt;/wsrm:MessageNumber&gt;<br />
          &lt;/wsrm:Sequence&gt;<br />
          &lt;wsse:Security xmlns:wsse=”…”&gt;<br />
              
&lt;wsse:BinarySecurityToken ValueType="</font>
          <font face="Courier New">http://tempuri.org#CustomToken</font>
          <font face="Courier New">" 
<br />
                                        
EncodingType="...#Base64Binary" wsu:Id=" MyID "&gt;<br />
                         
FHUIORv...<br />
               
&lt;/wsse:BinarySecurityToken&gt;<br />
              
&lt;ds:Signature&gt;<br />
                 
&lt;ds:SignedInfo&gt; 
<br />
                     
&lt;ds:CanonicalizationMethod Algorithm="</font>
          <font face="Courier New">http://www.w3.org/2001/10/xml-exc-c14n#"/&gt;</font>
          <br />
          <font face="Courier New">                     
&lt;ds:SignatureMethod Algorithm="</font>
          <font face="Courier New">http://www.w3.org/2000/09/xmldsig#md5"/</font>
          <font face="Courier New">&gt;  
<br />
                     
&lt;ds:Reference URI="#MsgBody"&gt;<br />
                           
&lt;ds:DigestMethod  Algorithm="</font>
          <font face="Courier New">http://www.w3.org/2000/09/xmldsig#md5"/&gt;</font>
          <font face="Courier New"> <br />
                           
&lt;ds:DigestValue&gt;LyLsF0Pi4wPU...&lt;/ds:DigestValue&gt;<br />
                     
&lt;/ds:Reference&gt;<br />
                
&lt;/ds:SignedInfo&gt;   
<br />
                
&lt;ds:SignatureValue&gt;DJbchm5gK...&lt;/ds:SignatureValue&gt; 
<br />
                
&lt;ds:KeyInfo&gt;  
<br />
                 
&lt;wsse:SecurityTokenReference&gt;  
<br />
                   
&lt;wsse:Reference URI="#MyID"/&gt; 
<br />
                  
&lt;/wsse:SecurityTokenReference&gt; 
<br />
              
&lt;/ds:KeyInfo&gt; 
<br />
             &lt;/ds:Signature&gt;<br />
         &lt;/wsse:Security&gt;<br />
         &lt;app:ResponseFormat&gt;Xml&lt;/app:ResponseFormat&gt;<br />
         &lt;app:Key wsu:Id=”AppKey”&gt;27729912882….&lt;/app:Key&gt; 
<br />
    &lt;soap:Header&gt;<br />
    &lt;soap:Body wsu:Id=”MyId”&gt;<br />
          &lt;app:status&gt;Hello, I’m
good&lt;/app:status&gt;<br />
     &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt; </font>
        </p>
        <p>
Not a very pretty song, I’ll admit. Let’s drop a some stuff. Let’s assume that we
don’t need to tell the other party that we’re looking to give it an MD5 signature,
but let’s say that’s implied and so were the canonicalization algorithm. Let’s also
assume that the other side already knows the security token and the key. Since we
only have a single signature digest here and yield a single signature we can just
collapse to the signature value. Heck, you may not even know about what that all means.
Verse 2:
</p>
        <p>
          <font face="Courier New">&lt;soap:Envelope xmlns:soap=”” xmlns:wsaddr=”” xmlns:wsrm=””
xmlns:wsu=”” xmlns:app=””&gt;<br />
   &lt;soap:Header&gt;<br />
         &lt;addr:Action&gt;http://tempuri.org/1.0/Status.set&lt;/addr:Action&gt;<br />
         &lt;wsrm:Sequence&gt;<br />
              &lt;wsrm:Identifier&gt;urn:session-id&lt;/wsrm:Identifier&gt;<br />
              &lt;wsrm:MessageNumber&gt;5&lt;/wsrm:MessageNumber&gt;<br />
          &lt;/wsrm:Sequence&gt;<br />
          &lt;wsse:Security xmlns:wsse=”…”&gt;<br />
              
&lt;ds:Signature&gt;<br />
                 
&lt;ds:SignatureValue&gt;DJbchm5gK...&lt;/ds:SignatureValue&gt; 
<br />
             &lt;/ds:Signature&gt;<br />
         &lt;/wsse:Security&gt;<br />
         &lt;app:ResponseFormat&gt;Xml&lt;/app:ResponseFormat&gt;<br />
         &lt;app:Key wsu:Id=”AppKey”&gt;27729912882….&lt;/app:Key&gt; 
<br />
    &lt;soap:Header&gt;<br />
    &lt;soap:Body wsu:Id=”MyId”&gt;<br />
          &lt;app:status&gt;Hello, I’m
good&lt;/app:status&gt;<br />
     &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt; </font>
        </p>
        <p>
Better. Now let’s strip all these extra XML namespace decorations since there aren’t
any name collisions as far as I can see. We’ll also collapse the rest of the security
elements into one element since there’s no need for three levels of nesting with a
single signature. Verse 3:
</p>
        <p>
          <font face="Courier New">&lt;Envelope&gt;<br />
   &lt;Header&gt;<br />
         &lt;Action&gt;http://tempuri.org/1.0/Status.set&lt;/Action&gt;<br />
         &lt;Sequence&gt;<br />
              &lt;Identifier&gt;urn:session-id&lt;/Identifier&gt;<br />
              &lt;MessageNumber&gt;5&lt;/MessageNumber&gt;<br />
          &lt;/Sequence&gt;<br />
          &lt;SignatureValue&gt;DJbchm5gK...&lt;/SignatureValue&gt;<br />
          &lt;ResponseFormat&gt;Xml&lt;/ResponseFormat&gt;<br />
          &lt;Key&gt;27729912882….&lt;/Key&gt; 
<br />
    &lt;Header&gt;<br />
    &lt;Body&gt;<br />
       &lt;status&gt;Hello, I’m good&lt;/status&gt;<br />
     &lt;/Body&gt;<br />
&lt;/Envelope&gt; </font>
        </p>
        <p>
Much better. The whole angle-bracket stuff and the nesting seems semi-gratuitous and
repetitive here, too. Let’s make that a bit simpler. Verse 4:
</p>
        <p>
          <font face="Courier New">         Action=http://tempuri.org/1.0/Status.set<br />
         Sequence-Identifier=urn:session-id<br />
         Sequence-MessageNumber=5<br />
         SignatureValue=DJbchm5gK...<br />
         ResponseFormat=Xml<br />
         Key=27729912882…. 
<br />
         status=Hello, I’m good</font>
        </p>
        <p>
Much, much better. Now let’s get rid of that weird URI up there and split up the action
and the version info, make some of these keys are little more terse and turn that
into a format that’s easily transmittable over HTTP. By what we have here application/www-form-urlencoded
would probably be best. Verse 5:
</p>
        <p>
          <font face="Courier New">         method=Status.set<br />
         &amp;v=1.0<br />
         &amp;session_key=929872172..<br />
         &amp;call_id=5<br />
         &amp;sig=DJbchm5gK...<br />
         &amp;format=Xml<br />
         &amp;api_key=27729912882…. 
<br />
         &amp;status=Hello,%20I’m%20good</font>
        </p>
        <p>
Oops. <a href="http://wiki.developers.facebook.com/index.php/Status.set">Facebook</a>’s
Status.set API. How did that happen? I thought that was REST?
</p>
        <p>
Now play the song backwards. The “new thing” is largely analogous to where we started
before the WS* Web Services stack and its CORBA/DCE/DCOM predecessors came around
and there are, believe it or not, good reasons for having of that additional “overhead”.
A common way to frame message content and the related control data, a common way to
express complex data structures and distinguish between data domains, a common way
to deal with addressing in multi-hop or store-and-forward messaging scenarios, an
agreed notion of sessions and message sequencing, a solid mechanism for protecting
the integrity of messages and parts of messages. This isn’t all just stupid.
</p>
        <p>
It’s well worth discussing whether messages need to be expressed as XML 1.0 text on
the wire at all times. I don’t think they need to and there are alternatives that
aren’t as heavy. JSON is fine and encodings like the .NET Binary Encoding or Fast
Infoset are viable alternatives as well. It’s also well worth discussing whether WS-Security
and the myriad of related standards that were clearly built by security geniuses for
security geniuses really need to be that complicated or whether we could all live
with a handful of simple profiles and just cut out 80% of the options and knobs and
parameters in that land. 
</p>
        <p>
I find it very sad that the discussion isn’t happening. Instead, people use the “REST”
moniker as the escape hatch to conveniently ignore any existing open standard for
tunnel-through-HTTP messaging and completely avoid the discussion. 
</p>
        <p>
It’s not only sad, it’s actually a bit frustrating. As one of the people responsible
for the protocol surface of the .NET Service Bus, I am absolutely not at liberty to
ignore what exists in the standards space. And this isn’t a mandate handed down to
me, but something I do because I believe it’s the right thing to live with the constraints
of the standards frameworks that exist. 
</p>
        <p>
When we’re sitting down and talk about a REST API, were designing a set of resources
– which may result in splitting a thing like a queue into two resources, head and
tail - and then we put RFC2616 on the table and try to be very precise in picking
the appropriate predefined HTTP method for a given semantic and how the HTTP 2xx,
3xx, 4xx, 5xx status codes map to success and error conditions. We’re also trying
to avoid inventing new ways to express things for which standards exists. There’s
a standard for how to express and manage lists with ATOM and APP and hence we use
that as a foundation. We use the designed extension points to add data to those lists
whenever necessary.
</p>
        <p>
When we’re designing a <strike>RPC</strike> SOAP API, we’re intentionally trying to
avoid inventing new protocol surface and will try to leverage as much from the existing
and standardized stack as we possibly can – at a minimum we’ll stick with established
patterns such as the Create/GetInfo/Renew/Delete patterns for endpoint factories with
renewal (which is used in several standards). I’ll add that we are – ironically -
a bit backlogged on the protocol documentation for our SOAP endpoints and have more
info on the REST endpoint in the latest SDK, but we’ll make that up in the near future.
</p>
        <p>
So - can I build “REST” (mind the quotes) protocols that are as reduced as Facebook,
Twitter, Flickr, etc? Absolutely. There wouldn’t be much new work. It’s just a matter
of how we put messages on and pluck message off the wire. It’s really mostly a matter
of formatting and we have a lot of the necessary building blocks in the shipping WCF
bits today. I would just omit a bunch of decoration as things go out and make a bunch
of assumptions on things that come in.
</p>
        <p>
I just have a sense that I’d be hung upside down from a tree by the press and the
blogging, twittering, facebooking community if I, as someone at Microsoft, wouldn’t
follow the existing open and agreed standards or at least use protocols that we’ve
published under the <a href="http://www.microsoft.com/interop/osp/default.mspx">OSP</a> and
instead just started to do my own interpretative dance - even if that looked strikingly
similar to what the folks down in the Valley are doing. At the very least, someone
would call it a rip-off.
</p>
        <p>
What do you think? What should I/we do? 
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=634b72d9-e200-45de-82db-2ae4c8ef947e" />
      </body>
      <title>[Intermission] Auf der Mauer, auf der Lauer sitzt 'ne kleine Wa! - or: When REST isn't REST - or: Why and How I Care About Standards-Compliance</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,634b72d9-e200-45de-82db-2ae4c8ef947e.aspx</guid>
      <link>http://vasters.com/clemensv/2009/04/01/Intermission+Auf+Der+Mauer+Auf+Der+Lauer+Sitzt+Ne+Kleine+Wa+Or+When+REST+Isnt+REST+Or+Why+And+How+I+Care+About+StandardsCompliance.aspx</link>
      <pubDate>Wed, 01 Apr 2009 17:40:41 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;… &lt;a href="http://de.wikipedia.org/wiki/Auf_der_Mauer,_auf_der_Lauer"&gt;seht Euch
mal die Wa an, wie die Wa ta kann. Auf der Mauer auf der Lauer sitzt ‘ne kleine Wa!&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
It’s a German children’s song. The song starts out with “… sitzt ‘ne kleine Wanze”
(bedbug) and with each verse you leave off a letter: Wanz, Wan, Wa, W, – silence. 
&lt;/p&gt;
&lt;p&gt;
I’ll do the same here, but not with a bedbug:
&lt;/p&gt;
&lt;p&gt;
Let’s sing:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;soap:Envelope xmlns:soap=”” xmlns:wsaddr=”” xmlns:wsrm=””
xmlns:wsu=”” xmlns:app=””&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;soap:Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;addr:Action&amp;gt;http://tempuri.org/1.0/Status.set&amp;lt;/addr:Action&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsrm: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;lt;wsrm:Identifier&amp;gt;urn:session-id&amp;lt;/wsrm:Identifier&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;wsrm:MessageNumber&amp;gt;5&amp;lt;/wsrm:MessageNumber&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;/wsrm: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;lt;wsse:Security xmlns:wsse=”…”&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;lt;wsse:BinarySecurityToken ValueType="&lt;/font&gt;&lt;font face="Courier New"&gt;http://tempuri.org#CustomToken&lt;/font&gt;&lt;font face="Courier New"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
EncodingType="...#Base64Binary" wsu:Id=" MyID "&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;
FHUIORv...&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;/wsse:BinarySecurityToken&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;lt;ds:Signature&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;ds:SignedInfo&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;ds:CanonicalizationMethod Algorithm="&lt;/font&gt;&lt;font face="Courier New"&gt;http://www.w3.org/2001/10/xml-exc-c14n#"/&amp;gt;&lt;/font&gt;
&lt;br&gt;
&lt;font face="Courier New"&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;ds:SignatureMethod Algorithm="&lt;/font&gt;&lt;font face="Courier New"&gt;http://www.w3.org/2000/09/xmldsig#md5"/&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;gt;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;ds:Reference URI="#MsgBody"&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;nbsp;&amp;nbsp;
&amp;lt;ds:DigestMethod&amp;nbsp; Algorithm="&lt;/font&gt;&lt;font face="Courier New"&gt;http://www.w3.org/2000/09/xmldsig#md5"/&amp;gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;ds:DigestValue&amp;gt;LyLsF0Pi4wPU...&amp;lt;/ds:DigestValue&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;/ds:Reference&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;lt;/ds:SignedInfo&amp;gt;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;ds:SignatureValue&amp;gt;DJbchm5gK...&amp;lt;/ds:SignatureValue&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;lt;ds:KeyInfo&amp;gt;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;wsse:SecurityTokenReference&amp;gt;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;wsse:Reference URI="#MyID"/&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;lt;/wsse:SecurityTokenReference&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;lt;/ds:KeyInfo&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;lt;/ds:Signature&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/wsse:Security&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;app:ResponseFormat&amp;gt;Xml&amp;lt;/app:ResponseFormat&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;app:Key wsu:Id=”AppKey”&amp;gt;27729912882….&amp;lt;/app:Key&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Body wsu:Id=”MyId”&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;app:status&amp;gt;Hello, I’m
good&amp;lt;/app:status&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Not a very pretty song, I’ll admit. Let’s drop a some stuff. Let’s assume that we
don’t need to tell the other party that we’re looking to give it an MD5 signature,
but let’s say that’s implied and so were the canonicalization algorithm. Let’s also
assume that the other side already knows the security token and the key. Since we
only have a single signature digest here and yield a single signature we can just
collapse to the signature value. Heck, you may not even know about what that all means.
Verse 2:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;soap:Envelope xmlns:soap=”” xmlns:wsaddr=”” xmlns:wsrm=””
xmlns:wsu=”” xmlns:app=””&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;soap:Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;addr:Action&amp;gt;http://tempuri.org/1.0/Status.set&amp;lt;/addr:Action&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsrm: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;lt;wsrm:Identifier&amp;gt;urn:session-id&amp;lt;/wsrm:Identifier&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;wsrm:MessageNumber&amp;gt;5&amp;lt;/wsrm:MessageNumber&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;/wsrm: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;lt;wsse:Security xmlns:wsse=”…”&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;lt;ds:Signature&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;ds:SignatureValue&amp;gt;DJbchm5gK...&amp;lt;/ds:SignatureValue&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;lt;/ds:Signature&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/wsse:Security&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;app:ResponseFormat&amp;gt;Xml&amp;lt;/app:ResponseFormat&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;app:Key wsu:Id=”AppKey”&amp;gt;27729912882….&amp;lt;/app:Key&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Body wsu:Id=”MyId”&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;app:status&amp;gt;Hello, I’m
good&amp;lt;/app:status&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Better. Now let’s strip all these extra XML namespace decorations since there aren’t
any name collisions as far as I can see. We’ll also collapse the rest of the security
elements into one element since there’s no need for three levels of nesting with a
single signature. Verse 3:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;Envelope&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Action&amp;gt;http://tempuri.org/1.0/Status.set&amp;lt;/Action&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;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;lt;Identifier&amp;gt;urn:session-id&amp;lt;/Identifier&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;MessageNumber&amp;gt;5&amp;lt;/MessageNumber&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;/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;lt;SignatureValue&amp;gt;DJbchm5gK...&amp;lt;/SignatureValue&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;ResponseFormat&amp;gt;Xml&amp;lt;/ResponseFormat&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;Key&amp;gt;27729912882….&amp;lt;/Key&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Body&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;status&amp;gt;Hello, I’m good&amp;lt;/status&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Body&amp;gt;&lt;br&gt;
&amp;lt;/Envelope&amp;gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Much better. The whole angle-bracket stuff and the nesting seems semi-gratuitous and
repetitive here, too. Let’s make that a bit simpler. Verse 4:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Action=http://tempuri.org/1.0/Status.set&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sequence-Identifier=urn:session-id&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sequence-MessageNumber=5&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SignatureValue=DJbchm5gK...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ResponseFormat=Xml&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Key=27729912882…. 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status=Hello, I’m good&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Much, much better. Now let’s get rid of that weird URI up there and split up the action
and the version info, make some of these keys are little more terse and turn that
into a format that’s easily transmittable over HTTP. By what we have here application/www-form-urlencoded
would probably be best. Verse 5:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; method=Status.set&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;v=1.0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;session_key=929872172..&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;call_id=5&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;sig=DJbchm5gK...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;format=Xml&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;api_key=27729912882…. 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;status=Hello,%20I’m%20good&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Oops. &lt;a href="http://wiki.developers.facebook.com/index.php/Status.set"&gt;Facebook&lt;/a&gt;’s
Status.set API. How did that happen? I thought that was REST?
&lt;/p&gt;
&lt;p&gt;
Now play the song backwards. The “new thing” is largely analogous to where we started
before the WS* Web Services stack and its CORBA/DCE/DCOM predecessors came around
and there are, believe it or not, good reasons for having of that additional “overhead”.
A common way to frame message content and the related control data, a common way to
express complex data structures and distinguish between data domains, a common way
to deal with addressing in multi-hop or store-and-forward messaging scenarios, an
agreed notion of sessions and message sequencing, a solid mechanism for protecting
the integrity of messages and parts of messages. This isn’t all just stupid.
&lt;/p&gt;
&lt;p&gt;
It’s well worth discussing whether messages need to be expressed as XML 1.0 text on
the wire at all times. I don’t think they need to and there are alternatives that
aren’t as heavy. JSON is fine and encodings like the .NET Binary Encoding or Fast
Infoset are viable alternatives as well. It’s also well worth discussing whether WS-Security
and the myriad of related standards that were clearly built by security geniuses for
security geniuses really need to be that complicated or whether we could all live
with a handful of simple profiles and just cut out 80% of the options and knobs and
parameters in that land. 
&lt;/p&gt;
&lt;p&gt;
I find it very sad that the discussion isn’t happening. Instead, people use the “REST”
moniker as the escape hatch to conveniently ignore any existing open standard for
tunnel-through-HTTP messaging and completely avoid the discussion. 
&lt;/p&gt;
&lt;p&gt;
It’s not only sad, it’s actually a bit frustrating. As one of the people responsible
for the protocol surface of the .NET Service Bus, I am absolutely not at liberty to
ignore what exists in the standards space. And this isn’t a mandate handed down to
me, but something I do because I believe it’s the right thing to live with the constraints
of the standards frameworks that exist. 
&lt;/p&gt;
&lt;p&gt;
When we’re sitting down and talk about a REST API, were designing a set of resources
– which may result in splitting a thing like a queue into two resources, head and
tail - and then we put RFC2616 on the table and try to be very precise in picking
the appropriate predefined HTTP method for a given semantic and how the HTTP 2xx,
3xx, 4xx, 5xx status codes map to success and error conditions. We’re also trying
to avoid inventing new ways to express things for which standards exists. There’s
a standard for how to express and manage lists with ATOM and APP and hence we use
that as a foundation. We use the designed extension points to add data to those lists
whenever necessary.
&lt;/p&gt;
&lt;p&gt;
When we’re designing a &lt;strike&gt;RPC&lt;/strike&gt; SOAP API, we’re intentionally trying to
avoid inventing new protocol surface and will try to leverage as much from the existing
and standardized stack as we possibly can – at a minimum we’ll stick with established
patterns such as the Create/GetInfo/Renew/Delete patterns for endpoint factories with
renewal (which is used in several standards). I’ll add that we are – ironically -
a bit backlogged on the protocol documentation for our SOAP endpoints and have more
info on the REST endpoint in the latest SDK, but we’ll make that up in the near future.
&lt;/p&gt;
&lt;p&gt;
So - can I build “REST” (mind the quotes) protocols that are as reduced as Facebook,
Twitter, Flickr, etc? Absolutely. There wouldn’t be much new work. It’s just a matter
of how we put messages on and pluck message off the wire. It’s really mostly a matter
of formatting and we have a lot of the necessary building blocks in the shipping WCF
bits today. I would just omit a bunch of decoration as things go out and make a bunch
of assumptions on things that come in.
&lt;/p&gt;
&lt;p&gt;
I just have a sense that I’d be hung upside down from a tree by the press and the
blogging, twittering, facebooking community if I, as someone at Microsoft, wouldn’t
follow the existing open and agreed standards or at least use protocols that we’ve
published under the &lt;a href="http://www.microsoft.com/interop/osp/default.mspx"&gt;OSP&lt;/a&gt; and
instead just started to do my own interpretative dance - even if that looked strikingly
similar to what the folks down in the Valley are doing. At the very least, someone
would call it a rip-off.
&lt;/p&gt;
&lt;p&gt;
What do you think? What should I/we do? 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=634b72d9-e200-45de-82db-2ae4c8ef947e" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,634b72d9-e200-45de-82db-2ae4c8ef947e.aspx</comments>
      <category>.NET Services</category>
      <category>Architecture</category>
      <category>Azure</category>
      <category>Technology</category>
      <category>Technology/ISB</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=e59f4a38-8e07-401a-b291-3ab4a561a2ae</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,e59f4a38-8e07-401a-b291-3ab4a561a2ae.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,e59f4a38-8e07-401a-b291-3ab4a561a2ae.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=e59f4a38-8e07-401a-b291-3ab4a561a2ae</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Earlier today I hopefully gave a somewhat reasonable, simple answer to the question
"<a href="http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx">What
is a Claim?</a>" Let's try the same with "Token":
</p>
        <p>
In the WS-* security world, "Token" is really just a another name the security
geniuses decided to use for "Handy package for all sorts of security
stuff". The most popular type of token is the <a href="http://en.wikipedia.org/wiki/SAML">SAML</a> (just
say "samel") token. If the ladies and gentlemen designing and writing security platform
infrastructure and frameworks are doing a good job you might want to know about the
existence of such a thing, but otherwise be blissfully ignorant of all the gory details. 
</p>
        <p>
Tokens are meant to be a thing that you need to know about in much the same way you
need to know about ... ummm... rebate coupons you can cut out of your local newspaper
or all those funny books that you get in the mail. I have really no idea how the accounting
works behind the scenes between the manufacturers and the stores, but it really doesn't
interest me much, either. What matters to me is that we get $4 off that jumbo pack
of diapers and we go through a lot of those these days with a 9 month old baby here
at home. We cut out the coupon, present it at the store, four bucks saved. Works for
me.
</p>
        <p>
A token is the same kind of deal. You go to some (security) service, get a token,
and present that token to some other service. The other service takes a good look
at the token and figures whether it 'trusts' the token issuer and might then
do some further inspection; if all is well you get four bucks off. Or you get
to do the thing you want to do at the service. The latter is more likely, but I liked
the idea for a moment.
</p>
        <p>
Remember when I mentioned the surprising fact that <strong>people lie</strong> from
time to time when I wrote about <a href="http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx">claims</a>?
Well, that's where tokens come in. The security stuff in a token is there to keep
people honest and to make '<a href="http://dictionary.reference.com/search?q=assertion">assertions</a>'
about claims. The security dudes and dudettes will say "Err, that's not the whole
story", but for me it's good enough. It's actually pretty common (that'll be
their objection) that there are tokens that don't carry any claims and where
the security service effectively says "whoever brings this token is a fine person;
they are ok to get in". It's like having a really close buddy relationship with the
boss of the nightclub when you are having troubles with the monsters guarding the
door. I'm getting a bit ahead of myself here, though.
</p>
        <p>
In the post about claims I claimed that "I am authorized to approve corporate
acquisitions with a transaction volume of up to $5Bln". That's a pretty obvious lie.
If there was such a thing as a one-click shopping button for companies on some Microsoft
Intranet site (there isn't, don't get any ideas) and I were to push it, I surely
should not be authorized to execute the transaction. The imaginary "just
one click and you own Xigg" button would surely have some sort of authorization
mechanism on it. 
</p>
        <p>
I don't know what Xigg is assumed to be worth these days, but there is actually be
a second authorization gate to check. I might indeed be authorized to do one-click
shopping for corporate acquisitions, but even with my made-up $5Bln limit claim, Xigg
may just be worth more that I'm claiming I'm authorized to approve. I digress.
</p>
        <p>
How would the one-click-merger-approval service be secured? It would expect some sort
of token that absolutely, positively asserts that my claim "I am authorized to approve corporate
acquisitions with a transaction volume of up to $5Bln" is truthful and the one-click-merger-approval
service would have to absolutely trust the security service that is making that
assertion. The resulting token that I'm getting from the security service would contain
the claim as an attribute of the assertion and that assertion would be signed and
encrypted in mysterious (for me) yet very secure and interoperable ways, so that I
can't tamper with it as much as I look at the token while having it in hands.
</p>
        <p>
The service receiving the token is the only one able to crack the token (I'll get
to that point in a later post) and look at its internals and the asserted attributes.
So what if I were indeed authorized to spend a bit of Microsoft's reserves
and I were trying to acquire Xigg at the touch of a button and, for some reason I
wouldn't understand, the valuation were outside my acquisition limit? That's
the service's job. It'd look at my claim, understand that I can't spend more than
$5Bln and say "nope!" - and it would likely send email to SteveB under the covers.
Trouble.
</p>
        <p>
Bottom line: For a client application, a token is a collection of opaque (and
mysterious) security stuff. The token may contain an assertion (saying "yep,
that's actually true") about a claim or a set of claims that I am making. I shouldn't
have to care about the further details unless I'm writing a service and I'm interested
in some deeper inspection of the claims that have been asserted. I will
get to that.
</p>
        <p>
Before that, I notice that I talked quite a bit about some sort of "security service"
here. Next post...
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=e59f4a38-8e07-401a-b291-3ab4a561a2ae" />
      </body>
      <title>What is a Token?</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,e59f4a38-8e07-401a-b291-3ab4a561a2ae.aspx</guid>
      <link>http://vasters.com/clemensv/2008/04/03/What+Is+A+Token.aspx</link>
      <pubDate>Thu, 03 Apr 2008 06:10:36 GMT</pubDate>
      <description>&lt;p&gt;
Earlier today I hopefully gave a somewhat reasonable, simple answer to the question
"&lt;a href="http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx"&gt;What
is a Claim?&lt;/a&gt;" Let's try the same with "Token":
&lt;/p&gt;
&lt;p&gt;
In the WS-* security world, "Token" is really just a&amp;nbsp;another name the security
geniuses&amp;nbsp;decided to use&amp;nbsp;for "Handy package&amp;nbsp;for all sorts of security
stuff". The most popular type of token is the &lt;a href="http://en.wikipedia.org/wiki/SAML"&gt;SAML&lt;/a&gt; (just
say "samel") token. If the ladies and gentlemen designing and writing security platform
infrastructure and frameworks are doing a good job you might want to know about the
existence of such a thing, but otherwise be blissfully ignorant of all the gory details. 
&lt;/p&gt;
&lt;p&gt;
Tokens are meant to be a thing that you need to know about in much the same way you
need to know about ... ummm... rebate coupons you can cut out of your local newspaper
or all those funny books that you get in the mail. I have really no idea how the accounting
works behind the scenes between the manufacturers and the stores, but it really doesn't
interest me much, either. What matters to me is that we get $4 off that jumbo pack
of diapers and we go through a lot of those these days with a 9 month old baby here
at home. We cut out the coupon, present it at the store, four bucks saved. Works for
me.
&lt;/p&gt;
&lt;p&gt;
A token is the same kind of deal. You go to some (security) service, get a token,
and present that token to some other service. The other service takes a good look
at the token and figures whether it 'trusts' the token issuer and&amp;nbsp;might then
do some further inspection; if all is well you get four bucks off. Or&amp;nbsp;you get
to do the thing you want to do at the service. The latter is more likely, but I liked
the idea for a moment.
&lt;/p&gt;
&lt;p&gt;
Remember when I mentioned the surprising fact that &lt;strong&gt;people lie&lt;/strong&gt; from
time to time when I wrote about &lt;a href="http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx"&gt;claims&lt;/a&gt;?
Well, that's where tokens come in. The security stuff in a token is there to keep
people honest and to make '&lt;a href="http://dictionary.reference.com/search?q=assertion"&gt;assertions&lt;/a&gt;'
about claims. The security dudes and dudettes will say "Err, that's not the whole
story", but for me it's good enough.&amp;nbsp;It's actually pretty common (that'll be
their objection) that there are&amp;nbsp;tokens that don't carry any claims and where
the security service effectively says "whoever brings this token is a fine person;
they are ok to get in". It's like having a really close buddy relationship with the
boss of the nightclub when you are having troubles with the monsters guarding the
door. I'm getting a bit ahead of myself here, though.
&lt;/p&gt;
&lt;p&gt;
In the post about claims I claimed that "I am authorized to approve&amp;nbsp;corporate
acquisitions with a transaction volume of up to $5Bln". That's a pretty obvious lie.
If there was such a thing as a one-click shopping button for companies on some Microsoft
Intranet site (there isn't, don't get any ideas) and I were to push it, I&amp;nbsp;surely
should&amp;nbsp;not be authorized to execute the transaction.&amp;nbsp;The imaginary "just
one click and you&amp;nbsp;own Xigg" button would surely have some sort of authorization
mechanism on it. 
&lt;/p&gt;
&lt;p&gt;
I don't know what Xigg is assumed to be worth these days, but there is actually be
a second authorization gate to check. I might indeed be authorized to do one-click
shopping for corporate acquisitions, but even with my made-up $5Bln limit claim, Xigg
may just be worth more that I'm claiming I'm authorized to approve. I digress.
&lt;/p&gt;
&lt;p&gt;
How would the one-click-merger-approval service be secured? It would expect some sort
of token that absolutely, positively asserts that my claim "I am authorized to approve&amp;nbsp;corporate
acquisitions with a transaction volume of up to $5Bln" is truthful and&amp;nbsp;the one-click-merger-approval
service would have to absolutely trust the security service that&amp;nbsp;is making that
assertion. The resulting token that I'm getting from the security service would contain
the claim as an attribute of the assertion and that assertion would be signed and
encrypted in mysterious (for me) yet very secure and interoperable ways, so that I
can't tamper with it as much as I look at the token while having it in hands.
&lt;/p&gt;
&lt;p&gt;
The service receiving the token is the only one able to crack the token (I'll get
to that point in a later post) and look at its internals and the asserted attributes.
So what if I were indeed authorized to&amp;nbsp;spend&amp;nbsp;a bit of&amp;nbsp;Microsoft's&amp;nbsp;reserves
and I were trying to acquire Xigg at the touch of a button and, for some reason I
wouldn't understand,&amp;nbsp;the valuation were outside my acquisition limit? That's
the service's job. It'd look at my claim, understand that I can't spend more than
$5Bln and say "nope!" - and it would likely send email to SteveB under the covers.
Trouble.
&lt;/p&gt;
&lt;p&gt;
Bottom line: For a client application,&amp;nbsp;a token is a collection of opaque (and
mysterious) security stuff.&amp;nbsp;The token may contain&amp;nbsp;an assertion (saying "yep,
that's actually true") about a&amp;nbsp;claim or a set of claims that I am making. I shouldn't
have to care about the further details unless I'm writing a service and I'm interested
in some deeper&amp;nbsp;inspection of the claims that have been asserted.&amp;nbsp;I will
get to that.
&lt;/p&gt;
&lt;p&gt;
Before that, I notice that I talked quite a bit about some sort of "security service"
here. Next post...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=e59f4a38-8e07-401a-b291-3ab4a561a2ae" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,e59f4a38-8e07-401a-b291-3ab4a561a2ae.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Technology/CardSpace</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=6efdfc92-27ac-4d51-8aa1-f187eba098d0</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=6efdfc92-27ac-4d51-8aa1-f187eba098d0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you ask any search engine "What is a Claim?" and you mean the sort of claim used in
the WS-* security space, you'll likely find an answer somewhere, but that answer
is just as likely buried in a sea of complex terminology that is only really comprehensible
if you have already wrapped your head around the details of the WS-* security model.
I would have thought that by now there would be a simple and not too technical explanation
of the concept that's easy to find on the Web, but I haven't really had success finding
one.  
</p>
        <p>
So "What is a Claim?" It's really simple.
</p>
        <p>
A <strong>claim</strong> is just a simple statement like "I am Clemens Vasters", or
"I am over 21 years of age", or "I am a Microsoft employee", or "I work in the Connected
Systems Division", or "I am authorized to approve corporate acquisitions with
a transaction volume of up to $5Bln". A <strong>claim set</strong> is just a bundle
of such claims. 
</p>
        <p>
When I walk up to a service with some client program and want to do something on the
service that requires authorization, the client program sends a claim set
along with the request. For the client to know what claims to send along, the
service lets it know about its requirements in its <strong>policy</strong>. 
</p>
        <p>
When a request comes in, this imaginary (U.S.) service looks at the request
knowing <em>"I'm a service for an online game  promoting alcoholic
beverages!". </em>It then it looks at the claim set, finds the <em>"I am over
21 years of age"</em> claim and thinks <em>"Alright, I think we got that covered"</em>. 
</p>
        <p>
The service didn't really care who was trying to get at the service. And it shouldn't.
To cover the liquor company's legal behind, they only need to know that you are over
21. They don't really need to know (and you probably don't want them to know) who is
talking to them. From the client's perspective that's a good thing, because the
client is now in a position to refuse giving out (m)any clues about the
user's identity and only provide the exact data needed to pass the authorization
gate. Mind that the claim isn't the date of birth for that exact reason. The claim
just says "over 21".
</p>
        <p>
Providing control over what claims are being sent to a service (I'm lumping websites,
SOAP, and REST services all in the same bucket here) is one of the key reasons
why Windows CardSpace exists, by the way. The service asks for a set of claims,
you get to see what is being asked for, and it's ultimately your personal, interactive decision
to provide or refuse to provide that information. 
</p>
        <p>
The only problem with relying on simple statements (claims) of that sort is that <strong>people
lie</strong>. When you go to the <a href="http://www.jackdaniels.com/">Jack Daniel's</a> website,
you are asked to enter your date of birth before you can proceed. In reality, it's
any date you like and an 10-year old kid is easily smart enough to figure that out. 
</p>
        <p>
All that complex security stuff is mostly there to keep people honest. Next time ...
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6efdfc92-27ac-4d51-8aa1-f187eba098d0" />
      </body>
      <title>What is a Claim?</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx</guid>
      <link>http://vasters.com/clemensv/2008/04/02/What+Is+A+Claim.aspx</link>
      <pubDate>Wed, 02 Apr 2008 20:20:43 GMT</pubDate>
      <description>&lt;p&gt;
If you ask any search engine "What is a Claim?" and you mean the sort of claim used&amp;nbsp;in
the WS-* security space, you'll&amp;nbsp;likely find an answer somewhere, but that answer
is just as likely buried in a sea of complex terminology that is only really comprehensible
if you have already wrapped your head around the details of the WS-* security model.
I would have thought that by now there would be a simple and not too technical explanation
of the concept that's easy to find on the Web, but I haven't really had success finding
one.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
So "What is a Claim?" It's really simple.
&lt;/p&gt;
&lt;p&gt;
A &lt;strong&gt;claim&lt;/strong&gt; is just a simple statement like "I am Clemens Vasters", or
"I am over 21 years of age", or "I am a Microsoft employee", or "I work in the Connected
Systems Division", or "I am authorized to approve&amp;nbsp;corporate acquisitions with
a transaction volume of up to $5Bln". A &lt;strong&gt;claim set&lt;/strong&gt; is just a bundle
of such claims. 
&lt;/p&gt;
&lt;p&gt;
When I walk up to a service with some client program and want to do something on the
service that requires authorization,&amp;nbsp;the client program&amp;nbsp;sends a claim set
along with the request.&amp;nbsp;For the client to know what claims to send along, the
service&amp;nbsp;lets it know about its requirements in&amp;nbsp;its&amp;nbsp;&lt;strong&gt;policy&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
When a request comes in, this imaginary (U.S.) service&amp;nbsp;looks at&amp;nbsp;the request
knowing &lt;em&gt;"I'm a&amp;nbsp;service&amp;nbsp;for an online game&amp;nbsp; promoting&amp;nbsp;alcoholic
beverages!". &lt;/em&gt;It then it looks at the claim set,&amp;nbsp;finds the &lt;em&gt;"I am over
21 years of age"&lt;/em&gt; claim and&amp;nbsp;thinks &lt;em&gt;"Alright, I think we got that covered"&lt;/em&gt;. 
&lt;/p&gt;
&lt;p&gt;
The service&amp;nbsp;didn't really care who was trying to get at the service. And it shouldn't.
To cover the liquor company's legal behind, they only need to know that you are over
21. They don't really need to know (and you probably don't want them to know) who&amp;nbsp;is
talking to them.&amp;nbsp;From the client's perspective that's&amp;nbsp;a good thing, because&amp;nbsp;the
client is now in a position to&amp;nbsp;refuse giving out&amp;nbsp;(m)any clues about the
user's identity and only provide the exact data needed&amp;nbsp;to pass the authorization
gate. Mind that the claim isn't the date of birth for that exact reason. The claim
just says "over 21".
&lt;/p&gt;
&lt;p&gt;
Providing control over what claims are being sent to a service (I'm lumping websites,
SOAP, and REST services all in the same bucket here) is&amp;nbsp;one of the&amp;nbsp;key reasons
why Windows CardSpace exists, by the way. The service&amp;nbsp;asks for a set of claims,
you get to&amp;nbsp;see what is being asked for, and it's ultimately your personal, interactive&amp;nbsp;decision
to provide or refuse to provide that information. 
&lt;/p&gt;
&lt;p&gt;
The only problem with relying on simple statements (claims)&amp;nbsp;of that sort is that &lt;strong&gt;people
lie&lt;/strong&gt;.&amp;nbsp;When you go to the &lt;a href="http://www.jackdaniels.com/"&gt;Jack Daniel's&lt;/a&gt; website,
you are asked to enter your date of birth before you can proceed. In reality, it's
any date you like and an 10-year old kid is easily smart enough to figure that out. 
&lt;/p&gt;
&lt;p&gt;
All that complex security stuff is mostly there to keep people honest. Next time ...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6efdfc92-27ac-4d51-8aa1-f187eba098d0" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Technology/CardSpace</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=aa502cba-e47c-4cfe-a036-875175ad295a</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,aa502cba-e47c-4cfe-a036-875175ad295a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,aa502cba-e47c-4cfe-a036-875175ad295a.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=aa502cba-e47c-4cfe-a036-875175ad295a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We love WS-* as much as we do love Web-Style services. I say "Web-style",
full knowing that the buzzterm is REST. Since REST is an architectural style and not
an implementation technology, it makes sense to make a distinction and, also, claiming
complete RESTfulness for a system is actually a pretty high bar to aspire to. So in
order to avoid monikers like POX or Lo-REST/Hi-REST, I just call it what it
what this is all about to mere mortals whose don't have an advanced degree in HTTP
Philosophy: Services that work like the Web - or Web-Style. That's not to say
that a Web-Style service cannot be fully RESTful. It surely can be. But if all you
want to do is GET to serve up data into mashups and manipulate your backend resources
in some other way, that's up to you. Anyways....
</p>
        <p>
Tomorrow at 10:00am (Session DEV03, Room Delfino 4101A), our resident Lo-REST/Hi-REST/POX/Web-Style Program
Manager <strong>Steve Maine</strong> and our Architect <strong>Don Box</strong> will
explain to you how to use the new Web-Style "Programmable Web" features that we're
adding to the .NET Framework 3.5 to implement the server magic and the service-client
magic to power all the user experience goodness you've seen here at MIX.
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <div style="FONT-WEIGHT: bold">
            <em>Navigating the Programmable Web</em>
          </div>
          <div>
            <em>
            </em>
          </div>
          <div>
            <em>
              <span class="catalogSpeakerLabel">Speaker(s):</span>
              <span>Don Box - Microsoft</span>, <span>Steve
Maine</span></em>
          </div>
          <div>
            <em>
              <span class="catalogCategoryLabel">Audience(s):</span> Developer</em>
          </div>
          <div>
            <em>RSS. ATOM. JSON. POX. REST. WS-*. What are all these terms, and how do they
impact the daily life of a developer trying to navigate today’s programmable Web?
Join us as we explore how to consume and create Web services using a variety of different
formats and protocols. Using popular services (Flickr, GData, and Amazon S3) as case
studies, we look at what it takes to program against these services using the Microsoft
platform today and how that will change in the future.</em>
          </div>
        </blockquote>
        <div dir="ltr">If you are in Vegas for MIX, come see the session. I just saw the demo,
it'll be good.
</div>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=aa502cba-e47c-4cfe-a036-875175ad295a" />
      </body>
      <title>Live at MIX: WCF and the Web (and Steve Maine, and Don Box)</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,aa502cba-e47c-4cfe-a036-875175ad295a.aspx</guid>
      <link>http://vasters.com/clemensv/2007/05/02/Live+At+MIX+WCF+And+The+Web+And+Steve+Maine+And+Don+Box.aspx</link>
      <pubDate>Wed, 02 May 2007 00:51:05 GMT</pubDate>
      <description>&lt;p&gt;
We love WS-*&amp;nbsp;as much as we do love&amp;nbsp;Web-Style services. I say "Web-style",
full knowing that the buzzterm is REST. Since REST is an architectural style and not
an implementation technology, it makes sense to make a distinction and, also, claiming
complete RESTfulness for a system is actually a pretty high bar to aspire to. So in
order to avoid&amp;nbsp;monikers like POX or Lo-REST/Hi-REST, I just call it what&amp;nbsp;it
what this is all about to mere mortals whose don't have an advanced degree in HTTP
Philosophy: Services that work like the Web - or Web-Style.&amp;nbsp;That's not to say
that a Web-Style service cannot be fully RESTful. It surely can be. But if all you
want to do is GET to serve up data into mashups and manipulate your backend resources
in some other way, that's up to you. Anyways....
&lt;/p&gt;
&lt;p&gt;
Tomorrow at 10:00am (Session DEV03, Room Delfino 4101A), our&amp;nbsp;resident Lo-REST/Hi-REST/POX/Web-Style&amp;nbsp;Program
Manager&amp;nbsp;&lt;strong&gt;Steve Maine&lt;/strong&gt; and our Architect &lt;strong&gt;Don Box&lt;/strong&gt; will
explain to you how to use the new Web-Style "Programmable Web" features that we're
adding to the .NET Framework 3.5 to implement&amp;nbsp;the server magic and the service-client
magic to power all the&amp;nbsp;user experience&amp;nbsp;goodness you've seen here at MIX.
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;div style="FONT-WEIGHT: bold"&gt;&lt;em&gt;Navigating the Programmable Web&lt;/em&gt;
&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&lt;/em&gt;
&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&lt;span class=catalogSpeakerLabel&gt;Speaker(s):&lt;/span&gt; &lt;span&gt;Don Box - Microsoft&lt;/span&gt;, &lt;span&gt;Steve
Maine&lt;/span&gt;&lt;/em&gt;
&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&lt;span class=catalogCategoryLabel&gt;Audience(s):&lt;/span&gt; Developer&lt;/em&gt;
&lt;/div&gt;
&lt;div&gt;&lt;em&gt;RSS. ATOM. JSON. POX. REST. WS-*. What are all these terms, and how do they
impact the daily life of a developer trying to navigate today’s programmable Web?
Join us as we explore how to consume and create Web services using a variety of different
formats and protocols. Using popular services (Flickr, GData, and Amazon S3) as case
studies, we look at what it takes to program against these services using the Microsoft
platform today and how that will change in the future.&lt;/em&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;div dir=ltr&gt;If you are in Vegas for MIX, come see the session. I just saw the demo,
it'll be good.
&lt;/div&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=aa502cba-e47c-4cfe-a036-875175ad295a" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,aa502cba-e47c-4cfe-a036-875175ad295a.aspx</comments>
      <category>Talks</category>
      <category>Technology</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=b2d16e20-c2d6-4a8c-b59a-640cd7dbc0ae</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,b2d16e20-c2d6-4a8c-b59a-640cd7dbc0ae.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,b2d16e20-c2d6-4a8c-b59a-640cd7dbc0ae.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=b2d16e20-c2d6-4a8c-b59a-640cd7dbc0ae</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blogs.thinktecture.com/cweyer/archive/2007/04/27/414819.aspx">Christian
Weyer shows</a> off the few lines of pretty straightforward WCF code &amp; config he
needed to figure out in order to set up a duplex conversation through BizTalk
Services. 
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=b2d16e20-c2d6-4a8c-b59a-640cd7dbc0ae" />
      </body>
      <title>BizTalk Services: Christian shuttling back and forth on the bus</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,b2d16e20-c2d6-4a8c-b59a-640cd7dbc0ae.aspx</guid>
      <link>http://vasters.com/clemensv/2007/04/27/BizTalk+Services+Christian+Shuttling+Back+And+Forth+On+The+Bus.aspx</link>
      <pubDate>Fri, 27 Apr 2007 23:53:15 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://blogs.thinktecture.com/cweyer/archive/2007/04/27/414819.aspx"&gt;Christian
Weyer shows&lt;/a&gt; off the few lines of pretty straightforward WCF code &amp;amp; config&amp;nbsp;he
needed to figure out in order to&amp;nbsp;set up a duplex conversation through BizTalk
Services. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=b2d16e20-c2d6-4a8c-b59a-640cd7dbc0ae" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,b2d16e20-c2d6-4a8c-b59a-640cd7dbc0ae.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Technology/BizTalk</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
      <category>Technology/XML</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=d53f0e81-eebb-4327-a92f-2f2ab5fcc602</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,d53f0e81-eebb-4327-a92f-2f2ab5fcc602.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,d53f0e81-eebb-4327-a92f-2f2ab5fcc602.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=d53f0e81-eebb-4327-a92f-2f2ab5fcc602</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Steve has a <a href="http://www.stephenforte.net/owdasblog/PermaLink.aspx?guid=a8de9324-c373-4cab-8e10-4e23251a3fb4">great
analysis </a>of what BizTalk Services means for Corzen and how he views it in the
broader industry context. 
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=d53f0e81-eebb-4327-a92f-2f2ab5fcc602" />
      </body>
      <title>Stephen Forte on what BizTalk Services means for his shop</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,d53f0e81-eebb-4327-a92f-2f2ab5fcc602.aspx</guid>
      <link>http://vasters.com/clemensv/2007/04/26/Stephen+Forte+On+What+BizTalk+Services+Means+For+His+Shop.aspx</link>
      <pubDate>Thu, 26 Apr 2007 22:09:51 GMT</pubDate>
      <description>&lt;p&gt;
Steve has a &lt;a href="http://www.stephenforte.net/owdasblog/PermaLink.aspx?guid=a8de9324-c373-4cab-8e10-4e23251a3fb4"&gt;great
analysis &lt;/a&gt;of what BizTalk Services means for Corzen and how he views it in the
broader industry context. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=d53f0e81-eebb-4327-a92f-2f2ab5fcc602" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,d53f0e81-eebb-4327-a92f-2f2ab5fcc602.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>IT Strategy</category>
      <category>Technology</category>
      <category>Technology/BizTalk</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=842e5373-60c1-4390-b820-00dba8b0cb4c</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,842e5373-60c1-4390-b820-00dba8b0cb4c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,842e5373-60c1-4390-b820-00dba8b0cb4c.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=842e5373-60c1-4390-b820-00dba8b0cb4c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Internet Service Bus</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,842e5373-60c1-4390-b820-00dba8b0cb4c.aspx</guid>
      <link>http://vasters.com/clemensv/2007/04/25/Internet+Service+Bus.aspx</link>
      <pubDate>Wed, 25 Apr 2007 03:28:23 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span&gt;"ESB" (for "Enterprise Service Bus") is an acronym floating around in the SOA/BPM
space for quite a while now. The notion is that you have a set of shared services
in an enterprise that act as a shared foundation for discovering, connecting and federating
services. That's a good thing and there's not much of a debate about the usefulness,
except whether &lt;a href="http://www.microsoft.com/biztalk/solutions/soa/esb.mspx"&gt;&lt;font color=#0000ff&gt;ESB&lt;/font&gt;&lt;/a&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt; is
the actual term is being used to describe this service fabric or whether there's a
concrete product with that name. Microsoft has, for instance,&amp;nbsp;directory services,
the UDDI registry, and our P2P resolution services&amp;nbsp;that contribute to the discovery
portion,&amp;nbsp;we've got BizTalk&amp;nbsp;Server as&amp;nbsp;a scalable business process, integration
and federation hub, we've got the Windows Communication Foundation for building service
oriented applications and endpoints, we've got the Windows Workflow Foundation for
building workflow-driven endpoint applications, and we have the Identity Platform
with ILM/MIIS, ADFS, and CardSpace that provides the federated identity backplane. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Today, the division I work in (Connected Systems Division) has announced &lt;a href="http://labs.biztalk.net/"&gt;&lt;font color=#0000ff&gt;BizTalk
Services&lt;/font&gt;&lt;/a&gt;, which&amp;nbsp;John Shewchuk explains &lt;a href="http://connectedsystems.spaces.live.com/"&gt;&lt;font color=#0000ff&gt;here&lt;/font&gt;&lt;/a&gt;&amp;nbsp;and
Dennis Pilarinos drills into &lt;a href="http://www.dennispi.com/"&gt;&lt;font color=#0000ff&gt;here&lt;/font&gt;&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Two aspects that&amp;nbsp;make&amp;nbsp;the idea of a&amp;nbsp;"service bus" generally very
attractive&amp;nbsp;are that&amp;nbsp;the service bus&amp;nbsp;enables identity federation and
connectivity federation.&amp;nbsp;This idea gets far more interesting and more broadly
applicable when we&amp;nbsp;remove the "Enterprise" constraint from ESB it and put "Internet"
into its place, thus&amp;nbsp;elevating it to an "Internet Services Bus", or ISB.&amp;nbsp;If
we look at&amp;nbsp;the&amp;nbsp;most&amp;nbsp;popular&amp;nbsp;Internet-dependent applications outside
of the browser these days, like the many Instant Messaging apps, BitTorrent, Limewire,
VoIP, Orb/Slingbox, Skype, Halo,&amp;nbsp;Project Gotham Racing, and others,&amp;nbsp;many
of them&amp;nbsp;depend on one or two key services must be provided for each of them:
Identity Federation (or, in absence of that,&amp;nbsp;a central identity&amp;nbsp;service)
and some sort of message relay in order to connect up two or more application instances&amp;nbsp;that
each sit&amp;nbsp;behind firewalls - and at the very least&amp;nbsp;some stable, shared rendezvous
point or directory to seed P2P connections.&amp;nbsp;The question "how does&amp;nbsp;Messenger
work?" has, from an high-level architecture perspective a simple answer: The Messenger
"switchboard" acts as a message relay. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;The problem gets really juicy when we look at the reality of what connecting
such applications means and what an ISV (or you!) were to come up with the next cool
thing on the Internet:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;You'll soon find out that you will have to run a whole lot of server infrastructure
and the routing of all of that traffic goes through your pipes. If your cool thing
involves moving lots of large files around (let's say you'd want to build a photo
sharing app like the very unfortunately deceased &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Max"&gt;&lt;font color=#0000ff&gt;Microsoft
Max&lt;/font&gt;&lt;/a&gt;) you'd&amp;nbsp;suddenly find&amp;nbsp;yourself running some significant sets
of&amp;nbsp;pipes (tubes?)&amp;nbsp;into your basement even though your users&amp;nbsp;are just
passing data from one place to the next.&amp;nbsp;That's a killer for lots of good ideas
as this represents a significant entry barrier. Interesting stuff can get popular
very, very fast these days and sometimes faster than you can say "Venture Capital".&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Messenger runs such infrastructure. And the need for such infrastructure was
indeed an (not entirely unexpected) important&amp;nbsp;takeaway from the cited Max project.
What looked just to be a very polished and cool client app to showcase all the Vista
and NETFX 3.0 goodness was just the tip of a significant iceberg of (just as cool)
server functionality that was running in a Microsoft data center to make the sharing
experience as seamless and easy as it was.&amp;nbsp;Once you want to&amp;nbsp;do cool stuff
that goes beyond the request/response browser thing, you easily end up running a data
center. And people will quickly think that your&amp;nbsp;application sucks if that data
center doesn't "just work". And that translates into several "nines" in terms of availability
in my book. And that'll cost you.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;As cool as Flickr and YouTube are, I don't think of none of them or their brethren
to be nearly as disruptive in terms of architectural paradigm shift&amp;nbsp;and long-term
technology impact as Napster, ICQ and Skype were as they appeared on the scene. YouTube
is just a place with interesting content. ICQ changed the world of collaboration.
Napster's and Skype's impact changed and is changing entire industries. The Internet
is far more and has more potential than just having some shared, mashed-up&amp;nbsp;places
where lots of people go to consume, search&amp;nbsp;and upload stuff. "Personal computing"
where I'm in control of MY stuff and share between MY places from wherever I happen
to be and NOT giving that data to someone else so that they can decorate my stuff
with ads has a future. The pendulum will swing back. I want to be able to take a family
picture with my digital camera and snap that into a digital picture frame at my dad's
house at the push of a button without some&amp;nbsp;"place" being in the middle of that.
The picture frame just has to be able to stick its head out to a place where my camera
can&amp;nbsp;talk to it so that it can accept that picture and know that it's me who is
sending it.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Another personal, and very concrete and real&amp;nbsp;point in case: I am running,
and I've written about that before,&amp;nbsp;a custom-built (software/hardware) combo
of two machines (one in Germany, one here in the US) that provide me and my family
with full Windows Media Center embedded access to live and recorded TV along with
electronic program guide data for 45+ German TV channels, Sports Pay-TV included.
The work of getting the connectivity right (dynamic DNS, port mappings, firewall holes),
dealing with the bandwidth constraints&amp;nbsp;and shielding&amp;nbsp;this against unwanted
access&amp;nbsp;were ridiculously complicated. This solution&amp;nbsp;and IP telephony and
video conferencing (over Messenger, Skype) are&amp;nbsp;shrinking the distance to home
to what's effectively just the inconvenience of the time difference of 9 hours and
that we don't see family and friends in person all that often. Otherwise we're completely
"plugged in" on what's going on at home and in Germany in general. That's an immediate
and huge improvement of the quality of living for us, is enabled by the Internet,
and has very little to do with "the Web", let alone "Web 2.0" - except that my Program
Guide app for Media Center happens to be an AJAX app today.&amp;nbsp;Using BizTalk Services
would throw out a whole lot of complexity that I had to deal with myself, especially
on the access control/identity and connectivity and discoverability fronts. Of course,
as I've done it the hard way and it's working to a degree that my wife is very happy
with it as it stands (which is the customer satisfaction metric that matters here),
I'm not making changes for technology's sake until I'm attacking the next revision
of this or I'll wait for one of the alternative and improving solutions (Orb is on
a good path) to catch up with what I have. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;But I digress. Just as much as the services that&amp;nbsp;were just&amp;nbsp;announced
(and the ones that are lined up to follow) are a potential&amp;nbsp;enabler for new Napster/ICQ/Skype
type consumer space applications from innovative companies who don't have the capacity
or expertise to run their own data center, they are also and just as importantly the
"&lt;em&gt;&lt;b&gt;&lt;span style="FONT-FAMILY: 'Verdana','sans-serif'"&gt;Small and Medium Enterprise&lt;/span&gt;&lt;/b&gt;&lt;/em&gt; Service
Bus". 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;If you are an ISV catering shrink-wrapped business solutions to SMEs whose network
infrastructure&amp;nbsp;may be as simple as&amp;nbsp;a DSL line (with dynamic IP) that goes
into a (wireless) hub and is as locked down as it possibly can be by the local networking
company that services them, we can do as much as we want as an industry in trying
to make inter-company B2B work and expand it to SMEs;&amp;nbsp;your customers just aren't
playing in that game if they can't&amp;nbsp;get over these basic connectivity hurdles. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Your app, that lives behind the firewall shield and NAT and a dynamic IP,&amp;nbsp;doesn't
have a stable, public place where it can publish its endpoints and you have no way
to federate identity (and access control)&amp;nbsp;unless you are doing some pretty invasive
surgery on their network setup&amp;nbsp;or you&amp;nbsp;end up building and running run a
bunch of infrastructure on-site or for them. And that's the same problem as the mentioned
consumer apps have.&amp;nbsp;Even more so, if you look at the list of "coming soon" services,
you'll find that problems like relaying events or coordinating work with workflows
are very suitable for&amp;nbsp;many common use-cases in SME business applications once
you imagine expanding their scope to inter-company collaboration.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;So where's "Megacorp Enterprises" in that play? First of all, Megacorp isn't
an island. Every Megacorp depends on lots of SME suppliers and retailers (or their
equivalents in the respective lingo of the verticals). Plugging all of them directly
into&amp;nbsp;Megacorp's "ESB" often isn't feasible for lots of reasons and increasingly
less so if the SME had a second or third (imagine that!) customer and/or supplier.&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Second, Megacorp isn't a uniform big&amp;nbsp;entity.&amp;nbsp;The count of "enterprise
applications" running inside of Megacorp is measured in thousands rather than dozens.
We're often inclined to think of SAP or Siebel when we think of enterprise applications,&amp;nbsp;but
the vast majority are much simpler and more scoped than that. It's not entirely ridiculous
to think that&amp;nbsp;some of those applications runs (gasp!) under someone's desk or
in a cabinet in an extra room of a department.&amp;nbsp;And it's also not entirely ridiculous
to think that these applications are so vertical and special that their integration
into the "ESB" gets continuously overridden by someone else's higher priorities and
yet, the respective business department needs a very practical way to connect with
partners &lt;em&gt;&lt;span style="FONT-FAMILY: 'Verdana','sans-serif'"&gt;now&lt;/span&gt;&lt;/em&gt; and
be "connectable" even though it sits deeply inside the network thicket of Megacorp.
While it is likely on every CIO's&amp;nbsp;goal sheet to contain that sort of IT anarchy,
it's a reality that needs answers in order to keep the business bring in the money.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Third, Megacorp needs to work with Gigacorp. To make it interesting, let's assume
that Megacorp and Gigacorp don't like each other much and trust each other even less.
They even compete. Yet, they've got to work on a standard and hence they need to collaborate.
It turns out that this scenario is almost entirely the same as the "Panic! Our departments
take IT in their own hands!" scenario described above. At most, Megacorp wants to
give Gigacorp a rendezvous and identity federation point on neutral ground. So instead
of letting Gigacorp on their ESB, they both hook their apps and their identity infrastructures
into the ISB and let the ISB be the mediator in that play.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Bottom line: There are very many solution scenarios, of which I mentioned just
a few,&amp;nbsp;where "I" is&amp;nbsp;a much&amp;nbsp;more suitable&amp;nbsp;scope than "E". Sometimes&amp;nbsp;the
appropriate scope is just "I", sometimes the appropriate scope is just "E". They key
to achieve the agility that SOA strategies commonly promise is the ability to do the
"E to I" scale-up whenever you need it in order to enable broader communication. If
you need to elevate one or a set services from your ESB to Internet scope, you have
the option to go and do so as appropriate and integrated with your identity infrastructure.&amp;nbsp;And
since this all strictly WS-* standards based, your "E" might actually be "whatever
you happen to run today".&amp;nbsp;BizTalk Services is&amp;nbsp;the "I".&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Or, in other words,&amp;nbsp;&lt;a href="http://labs.biztalk.net/"&gt;&lt;font color=#0000ff&gt;this
is a pretty big deal.&lt;/font&gt;&lt;/a&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=842e5373-60c1-4390-b820-00dba8b0cb4c" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,842e5373-60c1-4390-b820-00dba8b0cb4c.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>IT Strategy</category>
      <category>Microsoft</category>
      <category>MSDN</category>
      <category>Technology/BizTalk</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=4248ded3-821b-4a37-bbf2-12849f8f2a16</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,4248ded3-821b-4a37-bbf2-12849f8f2a16.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,4248ded3-821b-4a37-bbf2-12849f8f2a16.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=4248ded3-821b-4a37-bbf2-12849f8f2a16</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've spent the last 1 1/2 weeks doing one of the most fun (seriously) work
assignments that each Program Manager of our team gets to do every once in a while:
Servicing. So until yesterday night (I'm flying home to Germany today) I was in charge
of ASP.NET Web Services and Remoting. An even though these technologies have
been out there for quite a while now, there are still situations where stuff breaks
and people are scratching their heads wondering what's going on. Overall, it was a
very, very quiet time on the bug front though. 
</p>
        <p>
The one issue that we found on my watch is that you can configure ASP.NET Web Forms
in a way that it breaks ASP.NET Web Services (ASMX). We are shipping one ASP.NET Web
Page (.aspx) with ASMX and that unfortunate interaction manages to break that exact
page with an error that's hard to figure out unless you have substantial ASP.NET knowledge
and you have enough confidence in that knowledge to not trust us ;-) 
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
If you globally override the autoEventWireup setting in the &lt;page/&gt; config element
in the ASP.NET web.config and set that to "false", the DefaultWsdlHelpGenator.aspx
page (which sits in the CONFIG directory of the Framework) becomes very unhappy and
fails with a NullReferenceException, stating "Object reference not set to an
instance of an object." and showing you some code that's definitely not yours.
</p>
          <p>
What happened? Well, the file is missing a directive that overrides the override of
the default. The fix is to go edit the DefaultWsdlHelpGenerator.aspx file and
add the line:
</p>
          <p>
&lt;%@ Page AutoEventWireup="true" %&gt;
</p>
          <p>
That will fix the problem. 
</p>
        </blockquote>
        <p>
Now, the big question is: "Will you put that into a service pack?". While there's
obviously a bug here, the answer is, in this particular case, "don't know yet". Replacing
or editing that particular file is a potentially very impactful surgery
done on the patched system given that the file is there in source code and in the
config directory because you are supposed to be able to change it. Could we touch
changed files? Probably not. Could we touch unchanged files? Probably? So how would
you surface the difference and make sure that the systems we couldn't patch would
not suffer from the particular bug? What's the test impact for the code and for the
service pack or patch installer? How many people are actually using that ASP.NET config
directive AND are hosting ASMX services in the same application and/or scope? Is it
actually worth doing that? Making changes in code that has already shipped and
is part of the Framework is serious business, since you are potentially altering the
behavior of millions of machines all at once. So that part is definitely not done
in an "agile" way, but takes quite a bit of consideration, while it takes just
10 seconds and notepad.exe for you.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=4248ded3-821b-4a37-bbf2-12849f8f2a16" />
      </body>
      <title>ASP.NET's autoEventWireup="false" page config setting breaks ASP.NET Web Services (ASMX): NullReferenceException</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,4248ded3-821b-4a37-bbf2-12849f8f2a16.aspx</guid>
      <link>http://vasters.com/clemensv/2006/12/21/ASPNETs+AutoEventWireupfalse+Page+Config+Setting+Breaks+ASPNET+Web+Services+ASMX+NullReferenceException.aspx</link>
      <pubDate>Thu, 21 Dec 2006 18:56:58 GMT</pubDate>
      <description>&lt;p&gt;
I've spent the last&amp;nbsp;1 1/2&amp;nbsp;weeks doing one of the most fun (seriously) work
assignments that each Program Manager of our team gets to do every once in a while:
Servicing. So until yesterday night (I'm flying home to Germany today) I was in charge
of ASP.NET Web Services and Remoting.&amp;nbsp;An even though these technologies have
been out there for quite a while now, there are still situations where stuff breaks
and people are scratching their heads wondering what's going on. Overall, it was a
very, very&amp;nbsp;quiet time on the bug front though. 
&lt;/p&gt;
&lt;p&gt;
The one issue that we found on my watch is that you can configure ASP.NET Web Forms
in a way that it breaks ASP.NET Web Services (ASMX). We are shipping one ASP.NET Web
Page (.aspx) with ASMX and that unfortunate interaction manages to break that exact
page with an error that's hard to figure out unless you have substantial ASP.NET knowledge
and you have enough confidence in that knowledge to not trust us ;-) 
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
If you globally override the autoEventWireup setting in the &amp;lt;page/&amp;gt; config element
in the ASP.NET web.config and set that to "false", the DefaultWsdlHelpGenator.aspx
page (which sits in the CONFIG directory of the Framework) becomes very unhappy and
fails with a NullReferenceException, stating&amp;nbsp;"Object reference not set to an
instance of an object." and showing you some code that's definitely not yours.
&lt;/p&gt;
&lt;p&gt;
What happened? Well, the file is missing a directive that overrides the override of
the default. The fix is to go&amp;nbsp;edit the DefaultWsdlHelpGenerator.aspx file and
add the&amp;nbsp;line:
&lt;/p&gt;
&lt;p&gt;
&amp;lt;%@ Page AutoEventWireup="true" %&amp;gt;
&lt;/p&gt;
&lt;p&gt;
That will fix the problem. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Now, the big question is: "Will you put that into a service pack?".&amp;nbsp;While there's
obviously a bug here, the answer is, in this particular case, "don't know yet". Replacing
or editing that particular file is a&amp;nbsp;potentially very&amp;nbsp;impactful surgery
done on the patched system given that the file is there in source code and in the
config directory because you are supposed to be able to change it.&amp;nbsp;Could we touch
changed files? Probably not. Could we touch unchanged files? Probably? So how would
you surface the difference and make sure that the systems we couldn't patch would
not suffer from the particular bug? What's the test impact for the code and for the
service pack or patch installer? How many people are actually using that ASP.NET config
directive AND are hosting ASMX services in the same application and/or scope? Is it
actually worth doing that?&amp;nbsp;Making changes in code that has already shipped and
is part of the Framework is serious business, since you are potentially altering the
behavior of millions of machines all at once. So that part is definitely not done
in an "agile" way, but takes quite a bit of consideration, while it takes&amp;nbsp;just
10 seconds and notepad.exe for you.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=4248ded3-821b-4a37-bbf2-12849f8f2a16" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,4248ded3-821b-4a37-bbf2-12849f8f2a16.aspx</comments>
      <category>Technology/ASP.NET</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=9a674bcb-17fd-4f08-a888-d6fd93d0cbed</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,9a674bcb-17fd-4f08-a888-d6fd93d0cbed.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,9a674bcb-17fd-4f08-a888-d6fd93d0cbed.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=9a674bcb-17fd-4f08-a888-d6fd93d0cbed</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It's been <a href="http://developers.slashdot.org/article.pl?sid=06/12/20/0155238">slashdotted</a> and
also otherwise widely discussed that Google has deprecated their SOAP
API. A deadly blow for SOAP as people are speculating? Guess not.
</p>
        <p>
What I find striking are the differences in the licenses between the AJAX API and
the SOAP API. That's where the beef is. While the results obtained through the SOAP
API can be used (for non-commercial purposes) practically in any way except
that "you may not use the search results provided by the Google SOAP Search API service
with an existing product or service that competes with products or services offered
by Google.", the AJAX API is constrained to use with web sites with the terms of use
stating that "The API is limited to allowing You to host and display Google Search
Results on your site, and does not provide You with the ability to access other underlying
Google Services or data."
</p>
        <p>
The AJAX API is a Web service that works for Google because its terms of use are very
prescriptive for how to build a service that ensures Google's advertising machine
gets exposure and clicks. That's certainly a reasonable business decision, but has
nothing to do with SOAP vs. REST or anything else technical. There's just no money
in application-to-application messaging for Google (unless they'd actually set up
an infrastructure to charge for software as a service and provide support and proper
SLAs for it that is saying more than "we don't make any guarantees whatsoever") while
there's a lot of money for them in being able to get lots and lots of people
to give them a free spot on their own site onto which they can place their advertising.
That's what their business is about, not software.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=9a674bcb-17fd-4f08-a888-d6fd93d0cbed" />
      </body>
      <title>"Google kills SOAP!"</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,9a674bcb-17fd-4f08-a888-d6fd93d0cbed.aspx</guid>
      <link>http://vasters.com/clemensv/2006/12/20/Google+Kills+SOAP.aspx</link>
      <pubDate>Wed, 20 Dec 2006 23:07:04 GMT</pubDate>
      <description>&lt;p&gt;
It's been &lt;a href="http://developers.slashdot.org/article.pl?sid=06/12/20/0155238"&gt;slashdotted&lt;/a&gt; and
also otherwise widely discussed&amp;nbsp;that Google&amp;nbsp;has deprecated&amp;nbsp;their SOAP
API. A deadly blow for SOAP as people are speculating? Guess not.
&lt;/p&gt;
&lt;p&gt;
What I find striking are the differences in the licenses between the AJAX API and
the SOAP API. That's where the beef is. While the results obtained through the SOAP
API can be used (for non-commercial purposes)&amp;nbsp;practically in any way&amp;nbsp;except
that "you may not use the search results provided by the Google SOAP Search API service
with an existing product or service that competes with products or services offered
by Google.", the AJAX API is constrained to use with web sites with the terms of use
stating that "The API is limited to allowing You to host and display Google Search
Results on your site, and does not provide You with the ability to access other underlying
Google Services or data."
&lt;/p&gt;
&lt;p&gt;
The AJAX API is a Web service that works for Google because its terms of use are&amp;nbsp;very
prescriptive for how to build a service that ensures Google's advertising&amp;nbsp;machine
gets exposure and clicks. That's certainly a reasonable business decision, but has
nothing to do with SOAP vs. REST or anything else technical. There's just no money
in application-to-application messaging for Google (unless they'd actually set up
an infrastructure to charge for software as a service and provide support and proper
SLAs for it that is saying more than&amp;nbsp;"we don't make any guarantees whatsoever")&amp;nbsp;while
there's a lot of money for them in being able to&amp;nbsp;get lots and lots of people
to give them a free spot on their own site onto which they can place their advertising.
That's what their business is about, not software.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=9a674bcb-17fd-4f08-a888-d6fd93d0cbed" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,9a674bcb-17fd-4f08-a888-d6fd93d0cbed.aspx</comments>
      <category>IT Strategy</category>
      <category>Technology</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=6a2590f3-f735-4b29-8241-45d94acad149</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,6a2590f3-f735-4b29-8241-45d94acad149.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,6a2590f3-f735-4b29-8241-45d94acad149.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=6a2590f3-f735-4b29-8241-45d94acad149</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strike>Indigo</strike> The Windows Communication Foundation's RC1 bits are now live.
RC means "Release Candidate" and our team is really, really serious about this
release being as close to what we intend to ship as we can ever get. Our database
view with unresolved code-defects is essentially empty (there is a not more of a handful
of small fixes for very esoteric scenarios that we're still doing for RTM). The time
of breaking changes is absolutely and finally over for "WCF Version 1".
</p>
        <p>
The team is very excited about this. There's lots of joy in the hallways. We're getting
close to being done. Remember when you saw the first WS-* specs popping up out there
some 6 years ago? That's when this thing was started. You can just imagine how pumped
the testers, developers and program managers are around here. And even though I
am new to the family, I get to celebrate a little too. Greatness.
</p>
        <p>
Get the RC1 for the .NET Framework 3.0 with the WCF bits from here:<br /><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=19E21845-F5E3-4387-95FF-66788825C1AF&amp;displaylang=en"><font color="#0000ff">http://www.microsoft.com/downloads/details.aspx?FamilyId=19E21845-F5E3-4387-95FF-66788825C1AF&amp;displaylang=en</font></a></span> 
</p>
        <p>
There's one little issue with the Visual Studio Tools aligned with that version, so
it will take another day or so until those get uploaded.
</p>
        <p>
As always, if you find problems, tell us: <a href="http://connect.microsoft.com/wcf">http://connect.microsoft.com/wcf</a></p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6a2590f3-f735-4b29-8241-45d94acad149" />
      </body>
      <title>"Indigo is live."</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,6a2590f3-f735-4b29-8241-45d94acad149.aspx</guid>
      <link>http://vasters.com/clemensv/2006/09/01/Indigo+Is+Live.aspx</link>
      <pubDate>Fri, 01 Sep 2006 21:00:38 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strike&gt;Indigo&lt;/strike&gt; The Windows Communication Foundation's RC1 bits are now live.
RC means "Release Candidate" and&amp;nbsp;our team is really, really serious about this
release being as close to what we intend to ship as we can ever get. Our database
view with unresolved code-defects is essentially empty (there is a not more of a handful
of small fixes for very esoteric scenarios that we're still doing for RTM). The time
of breaking changes is absolutely and finally over for "WCF Version 1".
&lt;/p&gt;
&lt;p&gt;
The team is very excited about this. There's lots of joy in the hallways. We're getting
close to being done. Remember when you saw the first WS-* specs popping up out there
some 6 years ago? That's when this thing was started. You can just imagine how pumped
the testers, developers and program managers are around here. And even though&amp;nbsp;I
am new to the family, I get to celebrate a little too. Greatness.
&lt;/p&gt;
&lt;p&gt;
Get the RC1 for the .NET Framework 3.0 with the WCF bits from here:&lt;br&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=19E21845-F5E3-4387-95FF-66788825C1AF&amp;amp;displaylang=en"&gt;&lt;font color=#0000ff&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=19E21845-F5E3-4387-95FF-66788825C1AF&amp;amp;displaylang=en&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
There's one little issue with the Visual Studio Tools aligned with that version, so
it will take another day or so until those get uploaded.
&lt;/p&gt;
&lt;p&gt;
As always, if you find problems, tell us: &lt;a href="http://connect.microsoft.com/wcf"&gt;http://connect.microsoft.com/wcf&lt;/a&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6a2590f3-f735-4b29-8241-45d94acad149" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,6a2590f3-f735-4b29-8241-45d94acad149.aspx</comments>
      <category>Technology/Indigo</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=1e863a78-33d6-4a85-b5e2-f7d241b423d9</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,1e863a78-33d6-4a85-b5e2-f7d241b423d9.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,1e863a78-33d6-4a85-b5e2-f7d241b423d9.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=1e863a78-33d6-4a85-b5e2-f7d241b423d9</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.mcateer-roarty.info/blogs/the_roarty_blog/archive/2006/06/16/290.aspx">I've
been quoted</a> as to have said so at TechEd and I'll happily repeat it: "XML is the
assembly language of Web 2.0", even though some (and likely some more) disagree. <a href="http://www.codenameindigo.net/PermaLink.aspx?guid=a806afa2-2415-4e86-8ea4-88a312b1823b">James
Speer</a> writes <em>"<font face="MS Reference Sans Serif">Besides, Assembly
Language is hard, XML isn’t."</font></em> , which I have to disagree with. 
</p>
        <p>
True, throwing together some angle brackets isn't the hardest thing in the world,
but beating things into the right shape is hard and probably even harder than
in assembly. Yes, one can totally, after immersing oneself in the intricacies of Schema,
write complex types and ponder for days and months about the right use of attributes
and elements. It's absolutely within reach for a WSDL zealot to code up messages,
portTypes and operations by hand. But please, if you think that's the right way to
do things, I also demand that you write and apply your <a href="http://msdn.microsoft.com/ws/2005/07/ws-security-policy/">security
policy</a> in angle bracket notation from the top of your head and generate WCF config
from that using svcutil instead of just throwing a binding together, because
XML is so easy. Oh? Too hard? Well, it turns out that except for our developers
and testers who are focusing on getting these mappings right, nobody on our product
team would probably ever even want to try writing such a beast by hand for any code
that sits above the deep-down guts of our stack. This isn't the fault of the specifications
(or people here being ignorant), but it's a function of security being hard and the
related metadata being complex. Similar things, even though the complexity isn't
quite as extreme there, can be said about the other extensions to the policy
framework such as <a href="http://msdn.microsoft.com/library/en-us/dnglobspec/html/WS-RMPolicy.pdf">WS-RM
Policy</a> or those for <a href="http://msdn.microsoft.com/ws/2005/08/ws-atomictransaction/">WS-AT</a>. 
</p>
        <p>
As we're getting to the point where full range of functionality covered by WS-* specifications
is due to hit the mainstream by us releasing WCF and our valued competitors releasing
their respective implementations, hand-crafted contracts will become increasingly
meaningless, because it's beyond the capacity of anyone whose job it is to build solutions
for their customers to write complete set of contracts that not only ensures simple
data interop but also protocol interop. Just as there were days that all you
needed was assembly and INT21h to write a DOS program (yikes) or knowledge
of "C" alongside stdio.h and fellows to write anything for everthing, things
are changing now in the same way in Web Services land. Command of XSD and WSDL is
no longer sufficient, all the other stuff is just as important to make things work. 
</p>
        <p>
Our WCF [DataContract] doesn't support attributes. That's a deliberate choice because
we want to enforce simplicity and enhance interoperability of schemas. We put
an abstraction over XSD and limit the control over it, because we want to simplify
the stuff that goes across the wire. We certainly allow everyone to use the XmlSerializer
with all of it's attribute based fine-grained control over schema, even though there
are quite a few Schema constructs that even that doesn't support when building schema
from such metadata. If you choose to, you can just ignore all of our serialization
magic and fiddle with the XML Infoset outright and supply your own schema. However,
XML and Schema are specifications that everyone and their dog wanted to get features
into and Schema is hopelessly overengineered. Ever since we all (the industry, not
only MS) boarded the SOAP/WS train, we're debating how to constrain the features
of that monster to a reasonable subset that makes sense and the debate doesn't want
to end.
</p>
        <p>
James writes that he <em>"</em><font face="MS Reference Sans Serif"><em>take</em>[s]<em> a
lot of care in terms of elements vs. attributes and mak</em>[es]<em> sure the structure
of the XML is business-document-like", </em>which only really makes sense if XML documents
used in WS scenarios were meant for immediate human consumption, which they're not. </font></p>
        <p>
          <font face="Verdana">We want to promote a model that is simple and consistent to serialize
to and from on any platform and that things like the differentiation between
attributes and elements doesn't stand in the way of allowing a 1:1 mapping into alternate,
non-XML serialization formats such as JSON or what-have-you (most of which
don't care about that sort of differentiation).  </font>
          <font face="MS Reference Sans Serif">James'
statement about "business-document-like" structures is also interesting considering
EDIFACT, X.12 or SWIFT, all of which only know records, fields and values,
and don't care about that sort of subtle element/attribute differentation, either.
(Yes, no of those might be "hip" any more, but they are implemented and power a considerable
chunk of the world economy's data exchange).</font>
        </p>
        <p>
          <font face="MS Reference Sans Serif">By now, XML is the foundation for everything
that happens on the web, and I surely don't want to have it go away. But have arrived at
the point where matters have gotten so complicated that a layer of abstraction over
pretty much all things XML has become a necessity for everyone who makes their money
building customer solutions and not by teaching or writing about XML. In
my last session at TechEd, I asked a room of about 200 people "Who of you hand-writes
XSLT transforms?" 4 hands. "Who of you <em>used to</em> hand-write XSLT transforms?"
40+ hands. I think it's safe to assume that a bunch of those folks who have sworn
off masochism and no longer hand-code XSLT are now using tools like the BizTalk Mapper
or Altova's MapForce, which means that XSL/T is alive and kicking, but only downstairs
in the basement. However, the abstractions that these tools provide also allow
bypassing XSLT altogether and generate the transformation logic straight into compiled
C++, Java, or C# code, which is what MapForce offers. </font>
          <font face="MS Reference Sans Serif">WSDL
is already walking down that path.</font>
        </p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=1e863a78-33d6-4a85-b5e2-f7d241b423d9" />
      </body>
      <title>XML is the assembly language of Web 2.0</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,1e863a78-33d6-4a85-b5e2-f7d241b423d9.aspx</guid>
      <link>http://vasters.com/clemensv/2006/06/18/XML+Is+The+Assembly+Language+Of+Web+20.aspx</link>
      <pubDate>Sun, 18 Jun 2006 10:24:01 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.mcateer-roarty.info/blogs/the_roarty_blog/archive/2006/06/16/290.aspx"&gt;I've
been quoted&lt;/a&gt; as to have said so at TechEd and I'll happily repeat it: "XML is the
assembly language of Web 2.0", even though some (and likely some more) disagree. &lt;a href="http://www.codenameindigo.net/PermaLink.aspx?guid=a806afa2-2415-4e86-8ea4-88a312b1823b"&gt;James
Speer&lt;/a&gt;&amp;nbsp;writes&amp;nbsp;&lt;em&gt;"&lt;font face="MS Reference Sans Serif"&gt;Besides, Assembly
Language is hard, XML isn’t."&lt;/font&gt;&lt;/em&gt; ,&amp;nbsp;which I have to disagree with. 
&lt;/p&gt;
&lt;p&gt;
True, throwing together some angle brackets isn't the hardest thing in the world,
but beating things into the right&amp;nbsp;shape is hard and probably even harder than
in assembly. Yes, one can totally, after immersing oneself in the intricacies of Schema,
write complex types and ponder for days and months about the right use of attributes
and elements. It's absolutely within reach for a WSDL zealot to code up messages,
portTypes and operations by hand. But please, if you think that's the right way to
do things, I also demand that you write and apply your &lt;a href="http://msdn.microsoft.com/ws/2005/07/ws-security-policy/"&gt;security
policy&lt;/a&gt; in angle bracket notation from the top of your head and generate WCF config
from that using&amp;nbsp;svcutil instead of just throwing a binding together, because
XML is so easy.&amp;nbsp;Oh? Too hard? Well, it turns out that except for our developers
and testers who are focusing on getting these mappings right, nobody on our product
team would probably ever even want to try writing such a beast by hand for any code
that sits above the deep-down guts of our stack. This isn't the fault of the specifications
(or people here being ignorant), but it's a function of security being hard and the
related metadata being complex.&amp;nbsp;Similar things, even though the complexity isn't
quite as extreme there,&amp;nbsp;can be said about the&amp;nbsp;other extensions to the policy
framework such as &lt;a href="http://msdn.microsoft.com/library/en-us/dnglobspec/html/WS-RMPolicy.pdf"&gt;WS-RM
Policy&lt;/a&gt;&amp;nbsp;or those for&amp;nbsp;&lt;a href="http://msdn.microsoft.com/ws/2005/08/ws-atomictransaction/"&gt;WS-AT&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
As we're getting to the point where full range of functionality covered by WS-* specifications
is due to hit the mainstream by us releasing WCF and our valued competitors releasing
their respective implementations, hand-crafted contracts will become increasingly
meaningless, because it's beyond the capacity of anyone whose job it is to build solutions
for their customers to write complete set of contracts that not only ensures simple
data interop but also protocol interop.&amp;nbsp;Just as there were days that all you
needed was assembly and INT21h&amp;nbsp;to write a DOS program (yikes) or&amp;nbsp;knowledge
of "C"&amp;nbsp;alongside stdio.h and fellows to write anything for everthing, things
are changing now in the same way in Web Services land. Command of XSD and WSDL&amp;nbsp;is
no longer sufficient, all the other stuff is just as important to make things work. 
&lt;/p&gt;
&lt;p&gt;
Our WCF [DataContract] doesn't support attributes. That's a deliberate choice because
we want to enforce simplicity and enhance interoperability&amp;nbsp;of schemas. We put
an abstraction over XSD and limit the control over it, because we want to simplify
the stuff that goes across the wire. We certainly allow&amp;nbsp;everyone to use the XmlSerializer
with all of it's attribute based fine-grained control over schema, even though there
are quite a few Schema constructs that even that doesn't support when building schema
from such metadata. If you choose to, you can just ignore all of our serialization
magic and fiddle with the XML Infoset outright and supply your own schema. However,
XML and Schema are specifications that everyone and their dog wanted to get features
into and Schema is hopelessly overengineered. Ever since we all (the industry, not
only MS)&amp;nbsp;boarded the SOAP/WS train, we're debating how to constrain the features
of that monster to a reasonable subset that makes sense and the debate doesn't want
to end.
&lt;/p&gt;
&lt;p&gt;
James writes that he &lt;em&gt;"&lt;/em&gt;&lt;font face="MS Reference Sans Serif"&gt;&lt;em&gt;take&lt;/em&gt;[s]&lt;em&gt; a
lot of care in terms of elements vs. attributes and mak&lt;/em&gt;[es]&lt;em&gt; sure the structure
of the XML is business-document-like", &lt;/em&gt;which only really makes sense if XML documents
used in WS scenarios were meant for immediate human consumption, which they're not. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Verdana&gt;We want to promote a model that is simple and consistent to serialize
to and from on any platform and that&amp;nbsp;things like&amp;nbsp;the differentiation between
attributes and elements doesn't stand in the way of allowing a 1:1 mapping into&amp;nbsp;alternate,
non-XML&amp;nbsp;serialization formats such as JSON or what-have-you&amp;nbsp;(most of which
don't&amp;nbsp;care about that sort of differentiation).&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font face="MS Reference Sans Serif"&gt;James'
statement about "business-document-like" structures is also interesting&amp;nbsp;considering
EDIFACT, X.12&amp;nbsp;or SWIFT, all of which&amp;nbsp;only know records, fields and values,
and don't care about that sort of subtle element/attribute differentation, either.
(Yes, no of those might be "hip" any more, but they are implemented and power a considerable
chunk of the world economy's data exchange).&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="MS Reference Sans Serif"&gt;By now, XML is the foundation for everything
that happens on the web, and I surely don't want to have it go away. But have arrived&amp;nbsp;at
the point where matters have gotten so complicated that a layer of abstraction over
pretty much all things XML has become a necessity for everyone who makes their money
building customer solutions and not by&amp;nbsp;teaching or writing about XML.&amp;nbsp;In
my last session at TechEd, I asked a room of about 200 people "Who of you&amp;nbsp;hand-writes
XSLT transforms?" 4 hands. "Who of you &lt;em&gt;used to&lt;/em&gt;&amp;nbsp;hand-write XSLT transforms?"
40+ hands. I think it's safe to assume that a bunch of those folks who&amp;nbsp;have sworn
off masochism and no longer hand-code XSLT are now using tools like the BizTalk Mapper
or Altova's MapForce, which means that XSL/T is alive and kicking, but&amp;nbsp;only downstairs
in the basement.&amp;nbsp;However, the abstractions that these tools provide also allow
bypassing XSLT altogether and generate the transformation logic straight into compiled
C++, Java, or C# code, which is what MapForce offers.&amp;nbsp;&lt;/font&gt;&lt;font face="MS Reference Sans Serif"&gt;WSDL
is already walking down that path.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=1e863a78-33d6-4a85-b5e2-f7d241b423d9" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,1e863a78-33d6-4a85-b5e2-f7d241b423d9.aspx</comments>
      <category>Talks/TechEd US</category>
      <category>Technology/Indigo</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=74664ef9-3eb3-408b-8fa3-69d36adf4fd7</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,74664ef9-3eb3-408b-8fa3-69d36adf4fd7.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,74664ef9-3eb3-408b-8fa3-69d36adf4fd7.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=74664ef9-3eb3-408b-8fa3-69d36adf4fd7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.markbaker.ca/2002/09/Blog/2006/04/02#2006-04-wish">Mark</a>, I
care deeply about the hobbyist who writes some code on the side, the programmer
who works from 9-5 and has a life and just as deeply about those who work 24/7 and
about everybody in between ;-) 
</p>
        <p>
That said: now that we're getting close to being done with the "this vs.
that" debate, we can most certainly figure out the "how can we optimize the programming
experience" story. For very many people I've talked to in the past 4 years or so,
reducing complexity is an important thing. I firmly believe that we can do enterprise
messaging and Web-Style/Lo-REST/POX with a single technology stack that
scales up and down in terms of its capabilities.  
</p>
        <p align="left">
Since I take that you are worried about code-bloat on the app-level, how would
you think about the following client-side one-liners?
</p>
        <ul>
          <li>
            <div align="left">T data = Pox.Get&lt;T&gt;("myCfg")
</div>
          </li>
          <li>
            <div align="left">T data = Pox.Get&lt;T&gt;("myCfg", new Uri("/customer/8929", UriKind.Relative));
</div>
          </li>
          <li>
            <div align="left">T data = Pox.Get&lt;T&gt;("myCfg", new Uri("http: //example.com/customer/8929"));
</div>
          </li>
          <li>
            <div align="left">T data = Pox.Get&lt;T&gt;(new Uri("http: //example.com/customer/8929")); 
</div>
          </li>
          <li>
            <div align="left">
              <div align="left">U reply = Pox.Put&lt;T,U&gt;( new Uri("http: //example.com/customer/8929"),
data, ref location));
</div>
            </div>
          </li>
          <li>
            <div align="left">
              <div align="left">U reply = Pox.Post&lt;T,U&gt;( new Uri("http: //example.com/customer/"),
data, out location));
</div>
            </div>
          </li>
          <li>
            <div align="left">
              <div align="left">Pox.Delete(settings, new Uri("http: //example.com/customer/8929"));
</div>
            </div>
          </li>
        </ul>
        <p>
Whereby <em>"myCfg"</em> refers to a set of config to specify security, proxies, and
so forth; <em>settings</em> would refer to an in-memory object with the same reusable
info. Our stack lets me code that sort of developer experience in a quite straightforward
fashion and I can throw SOAPish WS-Transfer under it and make the call flow
on a reliable, routed TCP session with binary encoding without changing the least
bit.
</p>
        <p>
If I am still missing your point in terms of ease of use and line count, make a wish,
Mark. :-)
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=74664ef9-3eb3-408b-8fa3-69d36adf4fd7" />
      </body>
      <title>POVs</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,74664ef9-3eb3-408b-8fa3-69d36adf4fd7.aspx</guid>
      <link>http://vasters.com/clemensv/2006/04/03/POVs.aspx</link>
      <pubDate>Mon, 03 Apr 2006 15:39:16 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.markbaker.ca/2002/09/Blog/2006/04/02#2006-04-wish"&gt;Mark&lt;/a&gt;, I
care deeply&amp;nbsp;about the hobbyist who writes some code on the side, the programmer
who works from 9-5 and has a life and just as deeply about those who work 24/7 and
about everybody in between ;-) 
&lt;/p&gt;
&lt;p&gt;
That said: now that we're getting close to&amp;nbsp;being done with&amp;nbsp;the "this vs.
that" debate, we can most certainly figure out the "how can we optimize the programming
experience" story. For very many people I've talked to in the past 4 years or so,
reducing complexity is an important thing. I firmly believe that we can do enterprise
messaging and Web-Style/Lo-REST/POX with a single&amp;nbsp;technology stack&amp;nbsp;that
scales&amp;nbsp;up and down in terms of its capabilities. &amp;nbsp;
&lt;/p&gt;
&lt;p align=left&gt;
Since&amp;nbsp;I take that&amp;nbsp;you are worried about code-bloat on the app-level, how&amp;nbsp;would
you think about the following client-side one-liners?
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align=left&gt;T data&amp;nbsp;= Pox.Get&amp;lt;T&amp;gt;("myCfg")
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align=left&gt;T data = Pox.Get&amp;lt;T&amp;gt;("myCfg", new Uri("/customer/8929", UriKind.Relative));
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align=left&gt;T data&amp;nbsp;= Pox.Get&amp;lt;T&amp;gt;("myCfg", new Uri("http: //example.com/customer/8929"));
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align=left&gt;T data&amp;nbsp;= Pox.Get&amp;lt;T&amp;gt;(new Uri("http: //example.com/customer/8929")); 
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align=left&gt;
&lt;div align=left&gt;U reply = Pox.Put&amp;lt;T,U&amp;gt;( new Uri("http: //example.com/customer/8929"),
data, ref location));
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align=left&gt;
&lt;div align=left&gt;U reply = Pox.Post&amp;lt;T,U&amp;gt;( new Uri("http: //example.com/customer/"),
data, out location));
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align=left&gt;
&lt;div align=left&gt;Pox.Delete(settings, new Uri("http: //example.com/customer/8929"));
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Whereby &lt;em&gt;"myCfg"&lt;/em&gt; refers to a set of config to specify security, proxies, and
so forth; &lt;em&gt;settings&lt;/em&gt; would refer to an in-memory object with the same reusable
info. Our stack lets me code that sort of developer experience&amp;nbsp;in a quite straightforward
fashion&amp;nbsp;and I can&amp;nbsp;throw SOAPish WS-Transfer under it and make the call flow
on a reliable, routed TCP session with binary encoding without changing the least
bit.
&lt;/p&gt;
&lt;p&gt;
If I am still missing your point in terms of ease of use and line count, make a wish,
Mark.&amp;nbsp;:-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=74664ef9-3eb3-408b-8fa3-69d36adf4fd7" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,74664ef9-3eb3-408b-8fa3-69d36adf4fd7.aspx</comments>
      <category>Technology/Indigo</category>
      <category>Technology/Web Services</category>
      <category>Technology/XML</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=33c5fdc9-bb07-4c7b-bab7-9726a15c5b2c</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,33c5fdc9-bb07-4c7b-bab7-9726a15c5b2c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,33c5fdc9-bb07-4c7b-bab7-9726a15c5b2c.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=33c5fdc9-bb07-4c7b-bab7-9726a15c5b2c</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p class="Section1">
          <b>Inside the big house....</b>
        </p>
        <p class="Section1">
Back in December of last year and about two weeks before I publicly announced
that I will be working from Microsoft, <a href="http://friends.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx">I
started</a> a nine-part series on REST/POX* programming with <strike>Indigo</strike> WCF. (<span lang="DE"><a title="http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx" href="http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx"><span lang="EN-US"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx">1</span></span></span></span></a></span>, <span lang="DE"><a title="http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx" href="http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx"><span lang="EN-US"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx">2</span></span></span></span></a></span>, <span lang="DE"><a title="http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx" href="http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx"><span lang="EN-US"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx">3</span></span></span></span></a></span>, <span lang="DE"><a title="http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx" href="http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx"><span lang="EN-US"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx"><span title="http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx">4</span></span></span></span></a></span>, <a title="http://staff.newtelligence.net/clemensv/PermaLink,guid,3712ee6b-cd80-4db3-a96c-c740491f588e.aspx" href="http://staff.newtelligence.net/clemensv/PermaLink,guid,3712ee6b-cd80-4db3-a96c-c740491f588e.aspx">5</a>, <a title="http://staff.newtelligence.net/clemensv/PermaLink,guid,51327201-07c7-4a30-b79c-53842cda1e77.aspx" href="http://staff.newtelligence.net/clemensv/PermaLink,guid,51327201-07c7-4a30-b79c-53842cda1e77.aspx">6</a>, <a title="http://staff.newtelligence.net/clemensv/PermaLink,guid,e82c8423-f106-4105-81e4-14410a83315a.aspx" href="http://staff.newtelligence.net/clemensv/PermaLink,guid,e82c8423-f106-4105-81e4-14410a83315a.aspx">7</a>, <a href="http://staff.newtelligence.net/clemensv/PermaLink,guid,7465c74e-6001-4d08-93ae-ad7110dee188.aspx">8</a>, <a href="http://friends.newtelligence.net/clemensv/PermaLink,guid,8fc367b2-a4be-4588-8264-5455c268b94a.aspx">9</a>).
Since then, the WCF object model has seen quite a few feature and usability improvements
across the board and those are significant enough to justify that I rewrite the entire
series to get it up to the February CTP level and I will keep updating it through
Vista/WinFX Beta2 and as we are marching towards our RTM. We've got a few changes/extensions
in our production pipeline to make the REST/POX story for WCF v1 stronger and
I will track those changes with yet another re-release of this series. 
</p>
        <p class="Section1">
Except in one or two occasions, I haven't re-posted a reworked story on my blog. This
here is quite a bit different, because of it sheer size and the things I learned in
the process of writing it and developing the code along the way. So even though it
is relatively new, it's already due for an end-to-end overhaul to represent my current
thinking. It's also different, because I am starting to cross-post content to <a href="http://blogs.msdn.com/clemensv">http://blogs.msdn.com/clemensv</a> with
this post; however <a href="http://friends.newtelligence.net/clemensv">http://friends.newtelligence.net/clemensv</a> remains my
primary blog since that runs my engine ;-)
</p>
        <p class="Section1">
          <strong>Listening</strong>
        </p>
        <p class="Section1">
The "current thinking" is of course very much influenced by now working for the team
that builds WCF instead of being a customer looking at things from the outside. That
changes the perspective quite a bit. One great insight I gained is how non-dogmatic
and customer-oriented our team is. When I started the concrete REST/POX work with
WCF back in last September (on the customer side still working with newtelligence),
the extensions to the HTTP transport that enabled this work were just showing
up in the public builds and they were sometimes referred to as the "<a href="http://pluralsight.com/blogs/tewald">Tim</a>/<a href="http://www.pluralsight.com/blogs/aaron/">Aaaron</a> feature".
Tim Ewald and Aaron Skonnard had beat the drums for having simple XML (non-SOAP) support
in WCF so loudly that the team investigated the options and figured that some minimal
changes to the HTTP transport would enable most of these scenarios**. Based on
that feature, I wrote the set of dispatcher extensions that I've been presenting in the
V1 of this series and <a href="http://newtellivision.tv">newtellivision</a> as
the applied example did not only turn out to be a big hit as a demo,
it also was one of many motivations to give the REST/POX scenario even deeper
consideration within the team. 
</p>
        <p class="Section1">
REST/POX is a scenario we think about as a first-class scenario alongside SOAP-based
messaging - we are working with the ASP.NET Atlas team to integrate WCF with their
AJAX story and we continue to tweak the core WCF product to enable those scenarios
in a more straightforward fashion. Proof for that is that my talk (<a href="http://216.55.183.13/mix06/BTB021_Vasters.ppt">PPT
here</a>) at the <a href="http://www.mix06.com/">MIX06 conference</a> in Las
Vegas two weeks ago was entirely dedicated to the non-SOAP scenarios.
</p>
        <p class="Section1">
What does that say about SOAP? Nothing. There are two parallel worlds of application-level
network communication that live in peaceful co-existence:
</p>
        <div class="Section1">
          <ul>
            <li>
Simple point-to-point, request/response scenarios with limited security requirements
and no need for "enterprise features" along the lines of reliable messaging and transaction
integration. 
</li>
            <li>
Rich messaging scenarios with support for message routing, reliable delivery, discoverable
metadata, out-of-band data, transactions, one-way and duplex, etcetc.</li>
          </ul>
        </div>
        <p>
          <strong>The Faceless Web</strong>
        </p>
        <p>
The first scenario is the web as we know it. Almost. HTTP is an incredibly rich
application protocol once you dig into RFC2616 and look at the methods in detail
and consider response codes beyond 200 and 404. HTTP is strong because it
is well-defined, widely supported and designed to scale, HTTP is weak because it is
effectively constrained to request/response, there is no story for server-to-client
notifications and it abstracts away the inherent reliability of the transmission-control
protocol (TCP). These pros and cons lists are not exhaustive.
</p>
        <p>
What REST/POX does is to elevate the web model above the "you give me <em>text/html</em> or <em>*/*</em> and
I give you <em>application/x-www-form-urlencoded</em>" interaction model. Whether
the server punts up markup in the form of text/html or text/xml or some other angle-bracket
dialect or some raw binary isn't too interesting. What's changing the way applications
are built and what is really creating the foundation for, say, AJAX is that the path
back to the server is increasingly XML'ised. PUT and POST with a content-type
of text/xml is significantly different from <em>application/x-www-form-urlencoded</em>.
What we are observing is the emancipation of HTTP from HTML to a degree that
the "HT" in HTTP is becoming a misnomer. Something like IXTP ("Interlinked XML Transport
Protocol" - I just made that up) would be a better fit by now.
</p>
        <p>
The astonishing bit in this is that there has been been no fundamental technology
change that has been driving this. The only thing I can identify is that browsers
other than IE are now supporting XMLHTTP and therefore created the critical mass
for broad adoption. REST/POX rips the face off the web and enables a separation
of data and presentation in a way that mashups become easily possible and we're driving
towards a point where the browser cache becomes more of an application repository
than merely a place that holds cacheable collateral. When developing the
newtellivision application I have spent quite a bit of time on tuning the caching
behavior in a way that HTML and script are pulled from the server only when necessary
and as static resources and all actual interaction with the backend services happens
through XMLHTTP and in REST/POX style. newtellivision is not really a hypertext website,
it's more like a smart client application that is delivered through the web technology
stack.
</p>
        <p>
          <strong>Distributed Enterprise Computing</strong>
        </p>
        <p>
All that said, the significant investments in SOAP and WS-* that were made my Microsoft
and industry partners such as Sun, IBM, Tibco and BEA have their primary justification
in the parallel universe of highly interoperable, feature-rich intra and inter-application
communication as well as in enterprise messaging. Even though there was a two-way
split right through through the industry in the 1990s with one side adopting the Distributed
Computing Environment (DCE) and the other side driving the Common Object Request Broker
Architecture (CORBA), both of these camps made great advances towards rich, interoperable
(within their boundaries) enterprise communication infrastructures. All of that got
effectively killed by the web gold-rush starting in 1994/1995 as the focus (and investment) in
the industry turned to HTML/HTTP and to building infrastructures that supported the
web in the first place and everything else as a secondary consideration. The direct
consequence of the resulting (even if big) technology islands hat sit underneath the
web and the neglect of inter-application communication needs was that inter-application
communication has slowly grown to become one of the greatest industry problems and
cost factors. Contributing to that is that the average yearly number of corporate
mergers and acquisitions has tripled compared to 10-15 years ago (even though the
trend has slowed in recent years) and the information technology dependency of
today's corporations has grown to become one of the deciding if not the deciding competitive
factor for an ever increasing number of industries.
</p>
        <p>
What we (the industry as a whole) are doing now and for the last few years is that
we're working towards getting to a point where we're both writing the next chapter
of the story of the web and we're fixing the distributed computing story at the same
time by bringing them both onto a commonly agreed platform. The underpinning of that
is XML; REST/POX is the simplest implementation. SOAP and the WS-* standards
elevate that model up to the distributed enterprise computing realm. 
</p>
        <p>
If you compare the core properties of <a href="http://www.w3.org/TR/2003/REC-soap12-part1-20030624/">SOAP</a>+<a href="http://www.w3.org/TR/ws-addr-core/">WS-Adressing</a> and
the <a href="http://www.ietf.org/rfc/rfc2460.txt">Internet Protocol</a> (IP) in an
interpretative fashion side-by-side and then also compare the <a href="http://www.ietf.org/rfc/rfc793.txt">Transmission
Control Protocol</a> (TCP) to <a href="http://msdn.microsoft.com/ws/2005/02/ws-reliablemessaging/">WS-ReliableMessaging</a> it
may become quite clear to you what a fundamental abstraction above the networking
stacks and concrete technology coupling the WS-* specification family has become.
Every specification in the <a href="http://msdn.microsoft.com/webservices/webservices/understanding/specs/default.aspx">long
list</a> of WS-* specs is about converging and unifying formerly proprietary approaches
to messaging, security, transactions, metadata, management, business process management
and other aspects of distributed computing into this common platform.
</p>
        <p>
          <strong>Convergence</strong>
        </p>
        <p>
The beauty of that model is that it is an implementation superset of the
web. SOAP is the out-of-band metadata container for these abstractions. The
key feature of SOAP is SOAP:Header, which provides a standardized facility to
relay the required metadata alongside payloads. If you are willing to constrain out-of-band
metadata to one transport or application protocol, you don't need SOAP. 
</p>
        <p>
There is really very little difference between SOAP and REST/POX in terms of the information
model. SOAP carries headers and HTTP carries headers. In HTTP they are bolted to the
protocol layer and in SOAP they are tunneled through whatever carries the envelope. [In
that sense, SOAP is calculated abuse of HTTP as a transport protocol for the purpose
of abstraction.] You can map WS-Addressing headers from and to HTTP headers. 
</p>
        <p>
The SOAP/WS-* model is richer, more flexible and more complex. The SOAP/WS-* set of
specifications is about infrastructure protocols. HTTP is an application protocol
and therefore it is naturally more constrained - but has inherently defined qualities
and features that require an explicit protocol implementation in the SOAP/WS-* world;
one example is the inherent CRUD (create, read, update, delete) support in HTTP that
is matched by the explicitly composed-on-top WS-Transfer protocol in SOAP/WS-*
</p>
        <p>
The common platform is XML. You can scale down from SOAP/WS-* to REST/POX by putting
the naked payload on the wire and rely on HTTP for your metadata, error and status
information if that suits your needs. You can scale up from REST/POX to SOAP/WS-*
by encapsulating payloads and leverage the WS-* infrastructure for all the
flexibility and features it brings to the table. [It is fairly straightforward to
go from HTTP to SOAP/WS-*, and it is harder to go the other way. That's why I say
"superset".]
</p>
        <p>
Doing the right thing for a given scenario is precisely what are enabling in
WCF. There is a place for REST/POX for building the surface of the mashed and
faceless web and there is a place for SOAP for building the backbone of it - and some
may choose to mix and match these worlds. There are many scenarios and architectural
models that suit them. What we want is 
</p>
        <p align="center">
          <strong>One Way To Program</strong>. 
</p>
        <p>
          <font size="1">* REST=REpresentational State Transfer; POX="Plain-Old XML" or "simple
XML"</font>
        </p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=33c5fdc9-bb07-4c7b-bab7-9726a15c5b2c" />
      </body>
      <title>REST/POX with WCF: Version 2, Part 1: Foreword</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,33c5fdc9-bb07-4c7b-bab7-9726a15c5b2c.aspx</guid>
      <link>http://vasters.com/clemensv/2006/04/01/RESTPOX+With+WCF+Version+2+Part+1+Foreword.aspx</link>
      <pubDate>Sat, 01 Apr 2006 12:25:42 GMT</pubDate>
      <description>&lt;p class=Section1&gt;
&lt;b&gt;Inside the big house....&lt;/b&gt;
&lt;/p&gt;
&lt;p class=Section1&gt;
Back in&amp;nbsp;December of last year and about two weeks before I publicly announced
that I will be working from Microsoft, &lt;a href="http://friends.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx"&gt;I
started&lt;/a&gt; a&amp;nbsp;nine-part series on REST/POX* programming with&amp;nbsp;&lt;strike&gt;Indigo&lt;/strike&gt; WCF.&amp;nbsp;(&lt;span lang=DE&gt;&lt;a title=http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx href="http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx"&gt;&lt;span lang=EN-US&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,2d61b97b-3a6e-46bd-89db-b1b20499ba18.aspx&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;, &lt;span lang=DE&gt;&lt;a title=http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx href="http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx"&gt;&lt;span lang=EN-US&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,4e2a7d26-342c-4402-8000-a0d15860c5fc.aspx&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;, &lt;span lang=DE&gt;&lt;a title=http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx href="http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx"&gt;&lt;span lang=EN-US&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,3f40268c-dee2-44eb-829a-f621a4d40fbc.aspx&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;, &lt;span lang=DE&gt;&lt;a title=http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx href="http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx"&gt;&lt;span lang=EN-US&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx&gt;&lt;span title=http://staff.newtelligence.net/clemensv/PermaLink,guid,c45eb508-2269-4d0e-a730-dbd9c7d5f882.aspx&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;, &lt;a title=http://staff.newtelligence.net/clemensv/PermaLink,guid,3712ee6b-cd80-4db3-a96c-c740491f588e.aspx href="http://staff.newtelligence.net/clemensv/PermaLink,guid,3712ee6b-cd80-4db3-a96c-c740491f588e.aspx"&gt;5&lt;/a&gt;, &lt;a title=http://staff.newtelligence.net/clemensv/PermaLink,guid,51327201-07c7-4a30-b79c-53842cda1e77.aspx href="http://staff.newtelligence.net/clemensv/PermaLink,guid,51327201-07c7-4a30-b79c-53842cda1e77.aspx"&gt;6&lt;/a&gt;, &lt;a title=http://staff.newtelligence.net/clemensv/PermaLink,guid,e82c8423-f106-4105-81e4-14410a83315a.aspx href="http://staff.newtelligence.net/clemensv/PermaLink,guid,e82c8423-f106-4105-81e4-14410a83315a.aspx"&gt;7&lt;/a&gt;, &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink,guid,7465c74e-6001-4d08-93ae-ad7110dee188.aspx"&gt;8&lt;/a&gt;, &lt;a href="http://friends.newtelligence.net/clemensv/PermaLink,guid,8fc367b2-a4be-4588-8264-5455c268b94a.aspx"&gt;9&lt;/a&gt;).
Since then, the WCF object model has seen quite a few feature and usability improvements
across the board and those are significant enough to justify that I rewrite the entire
series to get it up to the February CTP level and I will keep updating it through
Vista/WinFX Beta2 and as we are marching towards our RTM. We've got a few changes/extensions
in&amp;nbsp;our production pipeline to make the REST/POX story for WCF v1 stronger and
I will track those changes with yet another re-release of this series. 
&lt;/p&gt;
&lt;p class=Section1&gt;
Except in one or two occasions, I haven't re-posted a reworked story on my blog. This
here is quite a bit different, because of it sheer size and the things I learned in
the process of writing it and developing the code along the way. So even though it
is relatively new, it's already due for an end-to-end overhaul to represent my current
thinking. It's also different, because I am starting to cross-post content to &lt;a href="http://blogs.msdn.com/clemensv"&gt;http://blogs.msdn.com/clemensv&lt;/a&gt;&amp;nbsp;with
this post;&amp;nbsp;however &lt;a href="http://friends.newtelligence.net/clemensv"&gt;http://friends.newtelligence.net/clemensv&lt;/a&gt; remains&amp;nbsp;my
primary blog since that runs my engine ;-)
&lt;/p&gt;
&lt;p class=Section1&gt;
&lt;strong&gt;Listening&lt;/strong&gt;
&lt;/p&gt;
&lt;p class=Section1&gt;
The "current thinking" is of course very much influenced by now working for the team
that builds WCF instead of being a customer looking at things from the outside. That
changes the perspective quite a bit. One&amp;nbsp;great insight I gained is how non-dogmatic
and customer-oriented our team is. When I started the concrete REST/POX work with
WCF back in last September (on the customer side still working with newtelligence),
the extensions to the HTTP transport that&amp;nbsp;enabled this work were just showing
up in the public builds and they were&amp;nbsp;sometimes referred to as the&amp;nbsp;"&lt;a href="http://pluralsight.com/blogs/tewald"&gt;Tim&lt;/a&gt;/&lt;a href="http://www.pluralsight.com/blogs/aaron/"&gt;Aaaron&lt;/a&gt; feature".
Tim Ewald and Aaron Skonnard had beat the drums for having simple XML (non-SOAP) support
in WCF so loudly that the team investigated the options and figured that some minimal
changes to the HTTP transport would enable most of these scenarios**.&amp;nbsp;Based on
that feature, I wrote the set of dispatcher extensions that I've been presenting in&amp;nbsp;the
V1 of this&amp;nbsp;series and &lt;a href="http://newtellivision.tv"&gt;newtellivision&lt;/a&gt; as
the applied example did not only&amp;nbsp;turn out to be a big hit&amp;nbsp;as a&amp;nbsp;demo,
it also was&amp;nbsp;one of many&amp;nbsp;motivations to give the REST/POX scenario even deeper
consideration within the team. 
&lt;/p&gt;
&lt;p class=Section1&gt;
REST/POX is a scenario we&amp;nbsp;think about as a first-class scenario alongside SOAP-based
messaging - we are working with the ASP.NET Atlas team to integrate WCF with their
AJAX story and&amp;nbsp;we continue to tweak the core WCF product to enable those scenarios
in a more straightforward fashion. Proof for that is that my talk (&lt;a href="http://216.55.183.13/mix06/BTB021_Vasters.ppt"&gt;PPT
here&lt;/a&gt;)&amp;nbsp;at the &lt;a href="http://www.mix06.com/"&gt;MIX06 conference&lt;/a&gt; in Las
Vegas two weeks ago was entirely dedicated&amp;nbsp;to the non-SOAP&amp;nbsp;scenarios.
&lt;/p&gt;
&lt;p class=Section1&gt;
What does that say about SOAP? Nothing. There are two parallel worlds of application-level
network communication that live in peaceful co-existence:
&lt;/p&gt;
&lt;div class=Section1&gt;
&lt;ul&gt;
&lt;li&gt;
Simple point-to-point, request/response&amp;nbsp;scenarios with limited security requirements
and no need for "enterprise features" along the lines of reliable messaging and transaction
integration. 
&lt;/li&gt;
&lt;li&gt;
Rich messaging scenarios with support for&amp;nbsp;message routing, reliable delivery,&amp;nbsp;discoverable
metadata, out-of-band data,&amp;nbsp;transactions, one-way and duplex, etcetc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;The Faceless Web&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The first scenario is the web as we know it. Almost.&amp;nbsp;HTTP is an incredibly rich
application protocol once you&amp;nbsp;dig into RFC2616 and look at the methods in detail
and consider response codes beyond 200 and 404.&amp;nbsp;HTTP is&amp;nbsp;strong because it
is well-defined, widely supported and designed to scale, HTTP is weak because it is
effectively constrained to request/response, there is no story for server-to-client
notifications and it abstracts away the inherent reliability of the transmission-control
protocol (TCP).&amp;nbsp;These pros and cons&amp;nbsp;lists are not exhaustive.
&lt;/p&gt;
&lt;p&gt;
What REST/POX does is to elevate the web model above the "you give me &lt;em&gt;text/html&lt;/em&gt; or &lt;em&gt;*/*&lt;/em&gt; and
I give you &lt;em&gt;application/x-www-form-urlencoded&lt;/em&gt;" interaction model. Whether
the server punts up markup in the form of text/html or text/xml or some other angle-bracket
dialect or some raw binary isn't too interesting. What's changing the way applications
are built and what is really creating the foundation for, say, AJAX is that the path
back to the server is increasingly XML'ised.&amp;nbsp;PUT and POST&amp;nbsp;with a content-type
of text/xml is significantly different from &lt;em&gt;application/x-www-form-urlencoded&lt;/em&gt;.
What we are&amp;nbsp;observing is the emancipation of HTTP from HTML to a degree that
the "HT" in HTTP is becoming a misnomer. Something like IXTP ("Interlinked XML Transport
Protocol" - I just made that up) would be a better fit by now.
&lt;/p&gt;
&lt;p&gt;
The astonishing bit in this is that there has been&amp;nbsp;been no&amp;nbsp;fundamental technology
change that has been driving this. The only thing I can identify is that browsers
other than IE are now supporting XMLHTTP and&amp;nbsp;therefore created the critical mass
for&amp;nbsp;broad adoption. REST/POX rips the face off the web and enables a separation
of data and presentation in a way that mashups become easily possible and we're driving
towards a point where the browser cache becomes more of an application repository
than merely a place that holds cacheable collateral.&amp;nbsp;When developing&amp;nbsp;the
newtellivision application I have spent quite a bit of time on tuning the caching
behavior in a way that HTML and script are pulled from the server only when necessary
and as static resources and all actual interaction with the backend services happens
through XMLHTTP and in REST/POX style. newtellivision is not really a hypertext website,
it's more like a smart client application that is delivered through the web technology
stack.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Distributed Enterprise Computing&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
All that said, the significant investments in SOAP and WS-* that were made my Microsoft
and industry partners such as Sun, IBM, Tibco and BEA&amp;nbsp;have their primary justification
in the parallel universe of highly interoperable, feature-rich&amp;nbsp;intra and inter-application
communication as well as in enterprise messaging. Even though there was a two-way
split right through through the industry in the 1990s with one side adopting the Distributed
Computing Environment (DCE) and the other side driving the Common Object Request Broker
Architecture (CORBA), both of these camps made great advances towards rich, interoperable
(within their boundaries) enterprise communication infrastructures. All of that got
effectively killed by the web gold-rush starting in 1994/1995 as the focus (and investment)&amp;nbsp;in
the industry turned to HTML/HTTP and to building infrastructures that supported the
web in the first place and everything else as a secondary consideration. The direct
consequence of the resulting (even if big) technology islands hat sit underneath the
web and the neglect of inter-application communication needs was that inter-application
communication has slowly grown to become&amp;nbsp;one of the greatest industry problems&amp;nbsp;and
cost factors. Contributing to that is that the average yearly number of corporate
mergers and acquisitions has tripled compared to 10-15 years ago (even though the
trend has slowed in recent years) and the information technology&amp;nbsp;dependency of
today's corporations has grown to become one of the deciding if not the deciding competitive
factor for&amp;nbsp;an ever increasing number of industries.
&lt;/p&gt;
&lt;p&gt;
What we (the industry as a whole) are doing now and for the last few years is that
we're working towards getting to a point where we're both writing the next chapter
of the story of the web and we're fixing the distributed computing story at the same
time by bringing them both onto a commonly agreed platform. The underpinning of that
is XML; REST/POX is&amp;nbsp;the simplest implementation. SOAP and the WS-* standards
elevate that model up to the distributed enterprise computing realm. 
&lt;/p&gt;
&lt;p&gt;
If you&amp;nbsp;compare the core properties of &lt;a href="http://www.w3.org/TR/2003/REC-soap12-part1-20030624/"&gt;SOAP&lt;/a&gt;+&lt;a href="http://www.w3.org/TR/ws-addr-core/"&gt;WS-Adressing&lt;/a&gt; and
the &lt;a href="http://www.ietf.org/rfc/rfc2460.txt"&gt;Internet Protocol&lt;/a&gt; (IP) in an
interpretative fashion side-by-side and then also compare the &lt;a href="http://www.ietf.org/rfc/rfc793.txt"&gt;Transmission
Control Protocol&lt;/a&gt; (TCP)&amp;nbsp;to&amp;nbsp;&lt;a href="http://msdn.microsoft.com/ws/2005/02/ws-reliablemessaging/"&gt;WS-ReliableMessaging&lt;/a&gt;&amp;nbsp;it
may become quite clear to you what a fundamental abstraction above the networking
stacks and concrete technology coupling the WS-* specification family has become.
Every specification in the &lt;a href="http://msdn.microsoft.com/webservices/webservices/understanding/specs/default.aspx"&gt;long
list&lt;/a&gt; of WS-* specs is about converging and unifying formerly proprietary approaches
to messaging, security, transactions, metadata, management, business process management
and other aspects of distributed computing into this common platform.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Convergence&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The beauty of that model is that it&amp;nbsp;is an implementation&amp;nbsp;superset of the
web. SOAP is the out-of-band metadata&amp;nbsp;container for&amp;nbsp;these abstractions.&amp;nbsp;The
key&amp;nbsp;feature of SOAP is SOAP:Header, which provides a standardized facility to
relay the required metadata alongside payloads. If you are willing to constrain out-of-band
metadata to one transport or application protocol, you don't need SOAP. 
&lt;/p&gt;
&lt;p&gt;
There is really very little difference between SOAP and REST/POX in terms of the information
model. SOAP carries headers and HTTP carries headers. In HTTP they are bolted to the
protocol layer and in SOAP they are tunneled through whatever carries the envelope.&amp;nbsp;[In
that sense, SOAP is calculated abuse of HTTP as a transport protocol for the purpose
of abstraction.] You can map WS-Addressing headers from and to HTTP headers. 
&lt;/p&gt;
&lt;p&gt;
The SOAP/WS-* model is richer, more flexible and more complex. The SOAP/WS-* set of
specifications is about infrastructure protocols. HTTP is an application protocol
and&amp;nbsp;therefore it is naturally more constrained - but has inherently defined qualities
and features that require an explicit protocol implementation in the SOAP/WS-* world;
one example is the inherent CRUD (create, read, update, delete) support in HTTP that
is matched by the explicitly composed-on-top WS-Transfer protocol in SOAP/WS-*
&lt;/p&gt;
&lt;p&gt;
The common platform is XML. You can scale down from SOAP/WS-* to REST/POX by putting
the naked payload on the wire and rely on HTTP for your metadata, error and status
information if that suits your needs. You can scale up from REST/POX to SOAP/WS-*
by encapsulating payloads and&amp;nbsp;leverage the WS-* infrastructure for&amp;nbsp;all the
flexibility and features it brings to the table. [It is fairly straightforward to
go from HTTP to SOAP/WS-*, and it is harder to go the other way. That's why I say
"superset".]
&lt;/p&gt;
&lt;p&gt;
Doing the right thing for a given scenario&amp;nbsp;is precisely what are enabling in
WCF.&amp;nbsp;There is a place for REST/POX for building the surface of the mashed and
faceless web and there is a place for SOAP for building the backbone of it - and some
may choose to mix and match these worlds. There are many scenarios and&amp;nbsp;architectural
models that suit them. What we want is 
&lt;/p&gt;
&lt;p align=center&gt;
&lt;strong&gt;One Way To Program&lt;/strong&gt;.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=1&gt;* REST=REpresentational State Transfer; POX="Plain-Old XML" or "simple
XML"&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=33c5fdc9-bb07-4c7b-bab7-9726a15c5b2c" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,33c5fdc9-bb07-4c7b-bab7-9726a15c5b2c.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Talks/MIX06</category>
      <category>Technology</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=84227eea-d685-4f0b-bc7b-1b0e3637666d</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,84227eea-d685-4f0b-bc7b-1b0e3637666d.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,84227eea-d685-4f0b-bc7b-1b0e3637666d.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=84227eea-d685-4f0b-bc7b-1b0e3637666d</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The stack trace below (snapshot taken at a breakpoint in [WebMethod] "HelloWorld") shows
that I am having quite a bit of programming fun these days. Server-side ASP.NET hooked
up to a MSMQ listener.  
</p>
        <p>
          <font size="1">
            <em>
              <strong>simpleservicerequestinweb.dll!SimpleServiceRequestInWeb.Hello.HelloWorld()
Line 53 C#<br /></strong>
            </em>system.web.services.dll!System.Web.Services.Protocols.LogicalMethodInfo.Invoke(System.Object
target, System.Object[] values) + 0x92 bytes <br />
system.web.services.dll!System.Web.Services.Protocols.WebServiceHandler.Invoke() +
0x9e bytes <br />
system.web.services.dll!System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
+ 0x142 bytes <br />
system.web.services.dll!System.Web.Services.Protocols.SyncSessionlessHandler.ProcessRequest(System.Web.HttpContext
context) + 0x6 bytes <br />
system.web.dll!CallHandlerExecutionStep.System.Web.HttpApplication+IExecutionStep.Execute()
+ 0xb4 bytes <br />
system.web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep
step, bool completedSynchronously) + 0x58 bytes <br />
system.web.dll!System.Web.HttpApplication.ResumeSteps(System.Exception error) + 0xfa
bytes <br />
system.web.dll!System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext
context, System.AsyncCallback cb, System.Object extraData) + 0xe3 bytes <br />
system.web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest
wr) + 0x1e7 bytes <br />
system.web.dll!System.Web.HttpRuntime.ProcessRequest(System.Web.HttpWorkerRequest
wr) + 0xb0 bytes <br /></font>
          <em>
            <font size="1">
              <strong>newtelligence.enterprisetools.dll!newtelligence.EnterpriseTools.Msmq.MessageQueueAsmxDispatcher.MessageReceived(System.Object
sender = {newtelligence.EnterpriseTools.Msmq.MessageQueueListener}, newtelligence.EnterpriseTools.Msmq.MessageReceivedEventArgs
ea = {newtelligence.EnterpriseTools.Msmq.MessageReceivedEventArgs}) Line 33 C#<br />
newtelligence.enterprisetools.dll!newtelligence.EnterpriseTools.Msmq.MessageQueueListener.ReceiveLoop()
Line 305 + 0x2b bytes C#<br /></strong>
            </font>
          </em>
        </p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=84227eea-d685-4f0b-bc7b-1b0e3637666d" />
      </body>
      <title>A Fun Stack Trace</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,84227eea-d685-4f0b-bc7b-1b0e3637666d.aspx</guid>
      <link>http://vasters.com/clemensv/2004/12/11/A+Fun+Stack+Trace.aspx</link>
      <pubDate>Sat, 11 Dec 2004 14:35:43 GMT</pubDate>
      <description>&lt;p&gt;
The stack trace below (snapshot taken at a breakpoint in [WebMethod] "HelloWorld")&amp;nbsp;shows
that I am having quite a bit of programming fun these days. Server-side ASP.NET hooked
up to a MSMQ listener.&amp;nbsp;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=1&gt;&lt;em&gt;&lt;strong&gt;simpleservicerequestinweb.dll!SimpleServiceRequestInWeb.Hello.HelloWorld()
Line 53&amp;nbsp;C#&lt;br&gt;
&lt;/strong&gt;&lt;/em&gt;system.web.services.dll!System.Web.Services.Protocols.LogicalMethodInfo.Invoke(System.Object
target, System.Object[] values) + 0x92 bytes&amp;nbsp;&lt;br&gt;
system.web.services.dll!System.Web.Services.Protocols.WebServiceHandler.Invoke() +
0x9e bytes&amp;nbsp;&lt;br&gt;
system.web.services.dll!System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
+ 0x142 bytes&amp;nbsp;&lt;br&gt;
system.web.services.dll!System.Web.Services.Protocols.SyncSessionlessHandler.ProcessRequest(System.Web.HttpContext
context) + 0x6 bytes&amp;nbsp;&lt;br&gt;
system.web.dll!CallHandlerExecutionStep.System.Web.HttpApplication+IExecutionStep.Execute()
+ 0xb4 bytes&amp;nbsp;&lt;br&gt;
system.web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep
step, bool completedSynchronously) + 0x58 bytes&amp;nbsp;&lt;br&gt;
system.web.dll!System.Web.HttpApplication.ResumeSteps(System.Exception error) + 0xfa
bytes&amp;nbsp;&lt;br&gt;
system.web.dll!System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext
context, System.AsyncCallback cb, System.Object extraData) + 0xe3 bytes&amp;nbsp;&lt;br&gt;
system.web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest
wr) + 0x1e7 bytes&amp;nbsp;&lt;br&gt;
system.web.dll!System.Web.HttpRuntime.ProcessRequest(System.Web.HttpWorkerRequest
wr) + 0xb0 bytes&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;em&gt;&lt;font size=1&gt;&lt;strong&gt;newtelligence.enterprisetools.dll!newtelligence.EnterpriseTools.Msmq.MessageQueueAsmxDispatcher.MessageReceived(System.Object
sender = {newtelligence.EnterpriseTools.Msmq.MessageQueueListener}, newtelligence.EnterpriseTools.Msmq.MessageReceivedEventArgs
ea = {newtelligence.EnterpriseTools.Msmq.MessageReceivedEventArgs}) Line 33&amp;nbsp;C#&lt;br&gt;
newtelligence.enterprisetools.dll!newtelligence.EnterpriseTools.Msmq.MessageQueueListener.ReceiveLoop()
Line 305 + 0x2b bytes&amp;nbsp;C#&lt;br&gt;
&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&gt;&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=84227eea-d685-4f0b-bc7b-1b0e3637666d" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,84227eea-d685-4f0b-bc7b-1b0e3637666d.aspx</comments>
      <category>Technology/ASP.NET</category>
      <category>Technology/MSMQ</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=c48dd120-cf19-42b8-ad14-39ad3ec1c3e4</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,c48dd120-cf19-42b8-ad14-39ad3ec1c3e4.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,c48dd120-cf19-42b8-ad14-39ad3ec1c3e4.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=c48dd120-cf19-42b8-ad14-39ad3ec1c3e4</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The little series I am currently <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=3a83d7c0-cded-46f7-a6a6-b6450d66fb56">writing
here</a> on my blog has inspired me to write way too more code than actually necessary
to get my point across ;-) So by now I've got my own MSMQ transport for WSE 2.0
(yes, I know that others have written that already, but I am shooting for
a "enterprise strength" implementation), a WebRequest/WebResponse pair to smuggle
under arbitrary ASMX proxies and I am more than halfway done with a server-side host
for MSMQ-to-ASMX (spelled out: ASP.NET Web Services). 
</p>
        <p>
What bugs me is that WSE 2.0's messaging model is "asynchronous only" and that it <em>always</em> performs
a push/pull translation and that there is no way to push a message through to a service
on the receiving thread. Whenever I grab a message from the queue and put it into
my SoapTransport's "Dispatch()" method, the message gets queued up in an in-memory
queue and that is then, on a concurrent thread, pulled (OnReceiveComplete) by the
SoapReceivers collection and submitted into ProcessMessage() of the SoapReceiver (like
any SoapService derived implementation) matching the target endpoint. So while
I can dequeue from MSMQ within a transaction scope (ServiceDomain), that transaction
scope doesn't make it across onto the thread that will actually execute the action
inside the SoapReceiver/SoapService.
</p>
        <p>
So now I am sitting here, contemplating and trying to figure out a workaround that doesn't
require me to rewrite a big chunk of WSE 2.0 (which I am totally not shy
of if that is what it takes). Transaction marshaling, thread synchronization,
ah, I love puzzles. Once I am know how to solve this and have made the adjustments,
I'll post the queue listener I promised to wrap up the series. The other code I've
written in the process will likely surface in some other way.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=c48dd120-cf19-42b8-ad14-39ad3ec1c3e4" />
      </body>
      <title>Push/Pull Translation and Transactions</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,c48dd120-cf19-42b8-ad14-39ad3ec1c3e4.aspx</guid>
      <link>http://vasters.com/clemensv/2004/12/05/PushPull+Translation+And+Transactions.aspx</link>
      <pubDate>Sun, 05 Dec 2004 15:41:21 GMT</pubDate>
      <description>&lt;p&gt;
The little series I am currently &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=3a83d7c0-cded-46f7-a6a6-b6450d66fb56"&gt;writing
here&lt;/a&gt; on my blog has inspired me to write way too more code than actually necessary
to get my point across&amp;nbsp;;-) So by now I've got my own MSMQ transport for WSE 2.0
(yes, I know&amp;nbsp;that others have&amp;nbsp;written that already, but I am shooting for
a "enterprise strength" implementation), a WebRequest/WebResponse pair to smuggle
under arbitrary ASMX proxies and I am more than halfway done with&amp;nbsp;a server-side&amp;nbsp;host
for MSMQ-to-ASMX&amp;nbsp;(spelled out: ASP.NET Web Services). 
&lt;/p&gt;
&lt;p&gt;
What bugs me is that WSE 2.0's messaging model is "asynchronous only" and that&amp;nbsp;it &lt;em&gt;always&lt;/em&gt; performs
a push/pull translation and that there is no way to push a message through to a service
on the receiving thread. Whenever I grab a message from the queue and put it into
my SoapTransport's "Dispatch()" method, the message gets queued up in an in-memory
queue and that is then, on a concurrent thread, pulled (OnReceiveComplete) by the
SoapReceivers collection and submitted into&amp;nbsp;ProcessMessage() of the SoapReceiver&amp;nbsp;(like
any SoapService derived implementation) matching the target endpoint.&amp;nbsp;So while
I can dequeue from MSMQ within a transaction scope (ServiceDomain), that transaction
scope doesn't make it across onto the thread that will actually execute the action
inside the SoapReceiver/SoapService.
&lt;/p&gt;
&lt;p&gt;
So now I am sitting here, contemplating and trying to figure out a workaround that&amp;nbsp;doesn't
require me to&amp;nbsp;rewrite a big chunk of WSE 2.0 (which I am&amp;nbsp;totally not shy
of if that is what it takes).&amp;nbsp;Transaction marshaling, thread synchronization,
ah, I love puzzles. Once I am know how to solve this and have made the adjustments,
I'll post the queue listener I promised to wrap up the series. The other code I've
written in the process will likely surface in some other way.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=c48dd120-cf19-42b8-ad14-39ad3ec1c3e4" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,c48dd120-cf19-42b8-ad14-39ad3ec1c3e4.aspx</comments>
      <category>Technology</category>
      <category>Technology/Enterprise Services</category>
      <category>Technology/MSMQ</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=e643292d-b16a-470b-8b2b-64f69c471e46</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,e643292d-b16a-470b-8b2b-64f69c471e46.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,e643292d-b16a-470b-8b2b-64f69c471e46.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=e643292d-b16a-470b-8b2b-64f69c471e46</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
"My Lists", "My Photos", "My Profile" .... sounds all very familiar over there
in <a href="http://spaces.msn.com">MSN Spaces</a>. So ... roll in the Web service
interfaces, please.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=e643292d-b16a-470b-8b2b-64f69c471e46" />
      </body>
      <title>.NET My Services goes live.</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,e643292d-b16a-470b-8b2b-64f69c471e46.aspx</guid>
      <link>http://vasters.com/clemensv/2004/12/05/NET+My+Services+Goes+Live.aspx</link>
      <pubDate>Sun, 05 Dec 2004 14:33:39 GMT</pubDate>
      <description>&lt;p&gt;
"My Lists", "My Photos", "My Profile"&amp;nbsp;.... sounds all very familiar over there
in &lt;a href="http://spaces.msn.com"&gt;MSN Spaces&lt;/a&gt;. So ...&amp;nbsp;roll in the Web service
interfaces, please.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=e643292d-b16a-470b-8b2b-64f69c471e46" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,e643292d-b16a-470b-8b2b-64f69c471e46.aspx</comments>
      <category>Technology/Web Services</category>
      <category>Technology/Weblogs</category>
      <category>Technology/XML</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=b90c9c1c-131f-4806-bf29-8540b40cd8ec</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,b90c9c1c-131f-4806-bf29-8540b40cd8ec.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,b90c9c1c-131f-4806-bf29-8540b40cd8ec.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=b90c9c1c-131f-4806-bf29-8540b40cd8ec</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I get emails like that very frequently. I have some news.
</p>
        <p>
Short story: Microsoft is still willing and working to publish the application
that I presented at TechEd Europe (see <a href="http://benjaminm.net/PermaLink.aspx?guid=87ce6b8b-0fbf-4f0d-86c9-d9e780a1cb6a">Benjamin's
report</a>) and they keep telling me that it will come out. Apparently there
is a lot of consensus building to be done to get a big sample application out
of the door. So there's nothing to be found on msdn, yet.
</p>
        <p>
Little known secret: There are 15 lucky indivduals who have already received
(hand-delivered) the Proseware code as a technical preview under a non-disclosure
agreement. Because we (newtelligence) designed and wrote the sample application,
we have permission to distribute the complete sample to participants of our <a href="http://www.newtelligence.net/PermaLink.aspx?guid=c9fd0897-8702-4e1b-8aa9-2dbcf66051b4">SOA
workshops</a> and seminars. 
</p>
        <p>
So if you want to get yours hands on it, all you need to do is to send mail to <a href="mailto:training@newtelligence.com">training@newtelligence.com</a> to
sign up for one of the public events [Next published date is Dec 1-3, and
the event is held in German, unless we get swamped with international inquiries] or
you send email to the same address asking for an on-site workshop delivery. At
this time, we (and MS) bind the code sample to workshop attendance so that you really
understand why the application was built like it's built and that you fully understand
the guidance that the application implicitly and explicitly carries (and doesn't carry).
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=b90c9c1c-131f-4806-bf29-8540b40cd8ec" />
      </body>
      <title>"Clemens, what happened to Proseware?"</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,b90c9c1c-131f-4806-bf29-8540b40cd8ec.aspx</guid>
      <link>http://vasters.com/clemensv/2004/10/28/Clemens+What+Happened+To+Proseware.aspx</link>
      <pubDate>Thu, 28 Oct 2004 11:33:24 GMT</pubDate>
      <description>&lt;p&gt;
I get emails like that very frequently. I have some news.
&lt;/p&gt;
&lt;p&gt;
Short story: Microsoft is still willing and working to publish&amp;nbsp;the application
that I presented at TechEd Europe&amp;nbsp;(see &lt;a href="http://benjaminm.net/PermaLink.aspx?guid=87ce6b8b-0fbf-4f0d-86c9-d9e780a1cb6a"&gt;Benjamin's
report&lt;/a&gt;) and&amp;nbsp;they&amp;nbsp;keep&amp;nbsp;telling me that it&amp;nbsp;will come out. Apparently&amp;nbsp;there
is a lot of consensus building to be done&amp;nbsp;to get a big sample application out
of the door. So there's nothing to be found on msdn, yet.
&lt;/p&gt;
&lt;p&gt;
Little known secret: There are 15 lucky indivduals&amp;nbsp;who have already received
(hand-delivered) the Proseware&amp;nbsp;code as a technical preview under a non-disclosure
agreement.&amp;nbsp;Because we (newtelligence) designed and wrote the sample application,
we have permission to distribute the&amp;nbsp;complete sample to participants of our &lt;a href="http://www.newtelligence.net/PermaLink.aspx?guid=c9fd0897-8702-4e1b-8aa9-2dbcf66051b4"&gt;SOA
workshops&lt;/a&gt; and seminars. 
&lt;/p&gt;
&lt;p&gt;
So if you want to get yours hands on it, all you need to do is to send mail to &lt;a href="mailto:training@newtelligence.com"&gt;training@newtelligence.com&lt;/a&gt; to
sign up&amp;nbsp;for one of the public events [Next published date is&amp;nbsp;Dec 1-3, and
the event is held in German, unless we get swamped with international inquiries] or
you send email to the same address asking&amp;nbsp;for an on-site workshop delivery. At
this time, we (and MS) bind the code sample to workshop attendance so that you really
understand why the application&amp;nbsp;was built like it's built and that you fully understand
the guidance that the application implicitly and explicitly carries (and doesn't carry).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=b90c9c1c-131f-4806-bf29-8540b40cd8ec" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,b90c9c1c-131f-4806-bf29-8540b40cd8ec.aspx</comments>
      <category>Architecture/SOA</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=aa772379-ab9d-4940-9423-ece6821bbe4b</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,aa772379-ab9d-4940-9423-ece6821bbe4b.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,aa772379-ab9d-4940-9423-ece6821bbe4b.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=aa772379-ab9d-4940-9423-ece6821bbe4b</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:Tahoma">Below are two SOAP messages that
are only subtly different when you look at the XML text, but the way how they “want
to be treated” at the endpoint differs quite dramatically. The first targets
a data-item/record/object and triggers a method, while the second targets an interface/endpoint/API
and triggers a function/procedure. </span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:Tahoma">The first message carries an out-of-band
reference that is in the header, the second has that same reference inside the body.
The first is a bit like how the implicit “this pointer” argument is passed
“invisibly” to a C++ or C# method, the second is like passing an explicit
context argument in C or (classic) Pascal or any other procedural language. The first
binds to logic belonging to a specific object, the second binds to some object-neutral
handling logic. </span>
          </p>
          <div style="border:none;border-bottom:solid windowtext 1.0pt;padding:0in 0in 1.0pt 0in">
            <p class="MsoNormal" style="border:none;padding:0in">
 
</p>
          </div>
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:&quot;Courier New&quot;"> </span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:8.0pt;font-family:&quot;Courier New&quot;">[1]<br />
&lt;soap:Envelope xmlns:soap=”http://www.w3.org/2003/05/soap-envelope” 
<br />
              
xmlns:wsa=”http://schemas.xmlsoap.org/ws/2004/08/addressing”&gt;<br />
     &lt;soap:Header&gt;<br />
           &lt;wsa:To&gt;http://www.example.org/Giro/Transfer&lt;/wsa:To&gt;<br />
           &lt;my:Account xmlns:my=”http://schemas.newtelligence.com/2004/10/MyBank”&gt;262616161&lt;/my:Account&gt;<br />
           &lt;wsa:Action&gt;http://schemas.newtelligence.com/2004/10/MyBank/Giro/Transfer&lt;/wsa:Action&gt;<br />
            … 
<br />
     &lt;/soap:Header&gt;<br />
     &lt;soap:Body&gt;<br />
            &lt;my:Transfer
xmlns:my=”http://schemas.newtelligence.com/2004/10/MyBank”&gt;<br />
              
&lt;my:TransferDestination&gt;<br />
                  
&lt;my:AccountNo&gt;99999999999&lt;/my:AccountNo&gt;<br />
                
  &lt;my:Recipient&gt;Peter Sample&lt;/my:Recipient&gt;<br />
                  
&lt;my:RoutingCode codeType=”DE-BLZ”&gt;00000000&lt;/my:RoutingCode&gt;<br />
                  
&lt;my:Destination&gt;Sample Bank&lt;/my:Destination&gt;   <br />
               &lt;/my:TransferDestination&gt; 
<br />
              
&lt;my:Amount&gt;100.78&lt;/my:Amount&gt; 
<br />
              
&lt;my:Currency&gt;EUR&lt;/my:Currency&gt;<br />
              
&lt;my:TransferDate&gt;2004-10-27&lt;/my:TransferDate&gt;<br />
              
&lt;my:ValueDate&gt;2004-10-27&lt;/my:ValueDate&gt;<br />
            &lt;my:Transfer&gt; 
<br />
     &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt;<br /><br /></span>
          </p>
          <div style="border-top:solid windowtext 1.0pt;border-left:none;border-bottom:&#xD;&#xA;solid windowtext 1.0pt;border-right:none;padding:1.0pt 0in 1.0pt 0in">
            <p class="MsoNormal" style="border:none;padding:0in">
              <span style="font-size:10.0pt;&#xD;&#xA;font-family:&quot;Courier New&quot;">
                <br />
              </span>
              <span style="font-size:8.0pt;font-family:&quot;Courier New&quot;">[2]<br />
&lt;soap:Envelope xmlns:soap=”http://www.w3.org/2003/05/soap-envelope” 
<br />
              
xmlns:wsa=”http://schemas.xmlsoap.org/ws/2004/08/addressing” &gt;<br />
     &lt;soap:Header&gt;<br />
            &lt;wsa:To&gt;http://www.example.org/Giro/Transfer&lt;/wsa:To&gt;<br />
            &lt;wsa:Action&gt;http://schemas.newtelligence.com/2004/10/MyBank/Giro/Transfer&lt;/wsa:Action&gt;<br />
            … 
<br />
     &lt;/soap:Header&gt;<br />
     &lt;soap:Body&gt;<br />
            &lt;my:Transfer
xmlns:my=”http://schemas.newtelligence.com/2004/10/MyBank”&gt;<br />
              
&lt;my:Account&gt;262616161&lt;/my:Account&gt;<br />
              
&lt;my:TransferDestination&gt;<br />
                  
&lt;my:AccountNo&gt;99999999999&lt;/my:AccountNo&gt;<br />
                
  &lt;my:Recipient&gt;Peter Sample&lt;/my:Recipient&gt;<br />
                  
&lt;my:RoutingCode codeType=”DE-BLZ”&gt;00000000&lt;/my:RoutingCode&gt;<br />
                  
&lt;my:Destination&gt;Sample Bank&lt;/my:Destination&gt;   <br />
               &lt;/my:TransferDestination&gt; 
<br />
              
&lt;my:Amount&gt;100.78&lt;/my:Amount&gt; 
<br />
              
&lt;my:Currency&gt;EUR&lt;/my:Currency&gt;<br />
              
&lt;my:TransferDate&gt;2004-10-27&lt;/my:TransferDate&gt;<br />
              
&lt;my:ValueDate&gt;2004-10-27&lt;/my:ValueDate&gt;<br />
            &lt;my:Transfer&gt; 
<br />
     &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt;</span>
            </p>
            <p class="MsoNormal" style="border:none;padding:0in">
              <span style="font-size:10.0pt;&#xD;&#xA;font-family:&quot;Courier New&quot;"> </span>
            </p>
          </div>
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:&quot;Courier New&quot;"> </span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:Tahoma">A possible endpoint reference (“object
pointer” in OOldspeak) for the message target for [1] is</span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:Tahoma"> </span>
          </p>
          <p class="MsoNormal">
            <span lang="DA" style="font-size:8.0pt;font-family:&quot;Courier New&quot;">&lt;wsa:EndpointReference
xmlns:wsa=”http://schemas.xmlsoap.org/ws/2004/08/addressing” &gt;<br />
    &lt;wsa:Address&gt;http://www.example.org/Giro/Transfer&lt;/wsa:Address&gt;</span>
          </p>
          <p class="MsoNormal">
            <span lang="DA" style="font-size:8.0pt;font-family:&quot;Courier New&quot;">    </span>
            <span style="font-size:8.0pt;font-family:&quot;Courier New&quot;">&lt;wsa:ReferenceParameters&gt;<br />
         &lt;my:Account xmlns:my=”http://schemas.newtelligence.com/2004/10/MyBank”&gt;262616161&lt;/my:Account&gt;<br />
    &lt;wsa:ReferenceParameters&gt;  </span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:8.0pt;font-family:&quot;Courier New&quot;">    ...<br />
&lt;wsa:EndpointReference&gt;</span>
            <span style="font-size:10.0pt;font-family:&#xD;&#xA;&quot;Courier New&quot;">
              <br />
              <br />
            </span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:Tahoma">A possible endpoint reference for
[2] is</span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:Tahoma"> </span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:8.0pt;font-family:&quot;Courier New&quot;">&lt;wsa:EndpointReference
xmlns:wsa=”http://schemas.xmlsoap.org/ws/2004/08/addressing” &gt;<br />
    </span>
            <span lang="DA" style="font-size:8.0pt;font-family:&#xD;&#xA;&quot;Courier New&quot;">&lt;wsa:Address&gt;http://www.example.org/Giro/Transfer&lt;/wsa:Address&gt;</span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:8.0pt;font-family:&quot;Courier New&quot;">&lt;wsa:EndpointReference&gt;</span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:Tahoma"> </span>
          </p>
          <p class="MsoNormal">
            <span style="font-size:10.0pt;font-family:Tahoma">I am sure it’s boring to everybody
else, but I find it quite funny how WS-Addressing turns out to be the “Object
Access Protocol” for SOAP ;-)</span>
          </p>
        </div>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=aa772379-ab9d-4940-9423-ece6821bbe4b" />
      </body>
      <title>Spot the difference</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,aa772379-ab9d-4940-9423-ece6821bbe4b.aspx</guid>
      <link>http://vasters.com/clemensv/2004/10/26/Spot+The+Difference.aspx</link>
      <pubDate>Tue, 26 Oct 2004 12:50:33 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:Tahoma'&gt;Below are two SOAP messages that
are only subtly different when you look at the XML text, but the way how they &amp;#8220;want
to be treated&amp;#8221; at the endpoint differs quite dramatically. The first targets
a data-item/record/object and triggers a method, while the second targets an interface/endpoint/API
and triggers a function/procedure. &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:Tahoma'&gt;The first message carries an out-of-band
reference that is in the header, the second has that same reference inside the body.
The first is a bit like how the implicit &amp;#8220;this pointer&amp;#8221; argument is passed
&amp;#8220;invisibly&amp;#8221; to a C++ or C# method, the second is like passing an explicit
context argument in C or (classic) Pascal or any other procedural language. The first
binds to logic belonging to a specific object, the second binds to some object-neutral
handling logic. &lt;/span&gt;
&lt;/p&gt;
&lt;div style='border:none;border-bottom:solid windowtext 1.0pt;padding:0in 0in 1.0pt 0in'&gt;
&lt;p class=MsoNormal style='border:none;padding:0in'&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;[1]&lt;br&gt;
&amp;lt;soap:Envelope xmlns:soap=&amp;#8221;http://www.w3.org/2003/05/soap-envelope&amp;#8221; 
&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;
xmlns:wsa=&amp;#8221;http://schemas.xmlsoap.org/ws/2004/08/addressing&amp;#8221;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Header&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;lt;wsa:To&amp;gt;http://www.example.org/Giro/Transfer&amp;lt;/wsa:To&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;lt;my:Account xmlns:my=&amp;#8221;http://schemas.newtelligence.com/2004/10/MyBank&amp;#8221;&amp;gt;262616161&amp;lt;/my:Account&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;lt;wsa:Action&amp;gt;http://schemas.newtelligence.com/2004/10/MyBank/Giro/Transfer&amp;lt;/wsa:Action&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;#8230; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Body&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;my:Transfer
xmlns:my=&amp;#8221;http://schemas.newtelligence.com/2004/10/MyBank&amp;#8221;&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;lt;my:TransferDestination&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;lt;my:AccountNo&amp;gt;99999999999&amp;lt;/my:AccountNo&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;lt;my:Recipient&amp;gt;Peter Sample&amp;lt;/my:Recipient&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;lt;my:RoutingCode codeType=&amp;#8221;DE-BLZ&amp;#8221;&amp;gt;00000000&amp;lt;/my:RoutingCode&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;lt;my:Destination&amp;gt;Sample Bank&amp;lt;/my:Destination&amp;gt; &amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/my:TransferDestination&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;lt;my:Amount&amp;gt;100.78&amp;lt;/my:Amount&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;lt;my:Currency&amp;gt;EUR&amp;lt;/my:Currency&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;lt;my:TransferDate&amp;gt;2004-10-27&amp;lt;/my:TransferDate&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;lt;my:ValueDate&amp;gt;2004-10-27&amp;lt;/my:ValueDate&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;my:Transfer&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div style='border-top:solid windowtext 1.0pt;border-left:none;border-bottom:
solid windowtext 1.0pt;border-right:none;padding:1.0pt 0in 1.0pt 0in'&gt;
&lt;p class=MsoNormal style='border:none;padding:0in'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New"'&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;[2]&lt;br&gt;
&amp;lt;soap:Envelope xmlns:soap=&amp;#8221;http://www.w3.org/2003/05/soap-envelope&amp;#8221; 
&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;
xmlns:wsa=&amp;#8221;http://schemas.xmlsoap.org/ws/2004/08/addressing&amp;#8221; &amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Header&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;wsa:To&amp;gt;http://www.example.org/Giro/Transfer&amp;lt;/wsa:To&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;wsa:Action&amp;gt;http://schemas.newtelligence.com/2004/10/MyBank/Giro/Transfer&amp;lt;/wsa:Action&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;#8230; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Body&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;my:Transfer
xmlns:my=&amp;#8221;http://schemas.newtelligence.com/2004/10/MyBank&amp;#8221;&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;lt;my:Account&amp;gt;262616161&amp;lt;/my:Account&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;lt;my:TransferDestination&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;lt;my:AccountNo&amp;gt;99999999999&amp;lt;/my:AccountNo&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;lt;my:Recipient&amp;gt;Peter Sample&amp;lt;/my:Recipient&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;lt;my:RoutingCode codeType=&amp;#8221;DE-BLZ&amp;#8221;&amp;gt;00000000&amp;lt;/my:RoutingCode&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;lt;my:Destination&amp;gt;Sample Bank&amp;lt;/my:Destination&amp;gt; &amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/my:TransferDestination&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;lt;my:Amount&amp;gt;100.78&amp;lt;/my:Amount&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;lt;my:Currency&amp;gt;EUR&amp;lt;/my:Currency&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;lt;my:TransferDate&amp;gt;2004-10-27&amp;lt;/my:TransferDate&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;lt;my:ValueDate&amp;gt;2004-10-27&amp;lt;/my:ValueDate&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;my:Transfer&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Body&amp;gt;&lt;br&gt;
&amp;lt;/soap:Envelope&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='border:none;padding:0in'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:Tahoma'&gt;A possible endpoint reference (&amp;#8220;object
pointer&amp;#8221; in OOldspeak) for the message target for [1] is&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:Tahoma'&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=DA style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;lt;wsa:EndpointReference
xmlns:wsa=&amp;#8221;http://schemas.xmlsoap.org/ws/2004/08/addressing&amp;#8221; &amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Address&amp;gt;http://www.example.org/Giro/Transfer&amp;lt;/wsa:Address&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=DA style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;lt;wsa:ReferenceParameters&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;my:Account xmlns:my=&amp;#8221;http://schemas.newtelligence.com/2004/10/MyBank&amp;#8221;&amp;gt;262616161&amp;lt;/my:Account&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsa:ReferenceParameters&amp;gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;
&amp;lt;wsa:EndpointReference&amp;gt;&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:
"Courier New"'&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:Tahoma'&gt;A possible endpoint reference for
[2] is&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:Tahoma'&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;lt;wsa:EndpointReference
xmlns:wsa=&amp;#8221;http://schemas.xmlsoap.org/ws/2004/08/addressing&amp;#8221; &amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=DA style='font-size:8.0pt;font-family:
"Courier New"'&gt;&amp;lt;wsa:Address&amp;gt;http://www.example.org/Giro/Transfer&amp;lt;/wsa:Address&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;lt;wsa:EndpointReference&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:Tahoma'&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:Tahoma'&gt;I am sure it&amp;#8217;s boring to everybody
else, but I find it quite funny how WS-Addressing turns out to be the &amp;#8220;Object
Access Protocol&amp;#8221; for SOAP ;-)&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=aa772379-ab9d-4940-9423-ece6821bbe4b" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,aa772379-ab9d-4940-9423-ece6821bbe4b.aspx</comments>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=8ebd839c-f781-4091-8c1d-10daa71f426f</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,8ebd839c-f781-4091-8c1d-10daa71f426f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,8ebd839c-f781-4091-8c1d-10daa71f426f.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=8ebd839c-f781-4091-8c1d-10daa71f426f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Perspective 1: 
</p>
        <p>
I am not a fan of the way WS-Eventing is relying on WS-Addressing's EPR binding rules
to correlate subscription responses (containing a parameterized "wse:SubscriptionManager"
EPR holding the subscription identifier in wsa:ReferenceParameters, see table 5, line
24-26 in <a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp">WS-Eventing</a>) with
subsequent renewals, unsubscribe and status inquiry operations and forces the most
central information bit for the respective operation ("Which subscription do you wish
to renew?") into the header of the respective message (wse:Identifier) instead of
having it in the body. 
</p>
        <p>
So for the "GetStatus" operation, you end up with a single body element "GetStatus"
that doesn't carry any content [see table 8, lines 19-21 and line 24 in <a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp">WS-Eventing</a>].
I know that XML lost everything intuitive about it a long time back, but the way this
works is really counterintuitive and just doesn't look right. I would
expect &lt;GetStatus&gt;uri:Subscription-Identifier&lt;/GetStatus&gt;. 
</p>
        <p>
Perspective 2:
</p>
        <p>
Now <em>on the other hand!</em> this is actually a sound approach if I were
looking at the said SubscriptionManager EPR as a <em>resource</em>. What the wsa:ReferenceParameter
does to the EPR is that it binds it uniquely to the respective subscription
(section 1.3 of the spec mandates this).
</p>
        <p>
What's confusing here (and not really a good name choice in my view) is
that the <em>wse:SubscriptionManager </em>EPR does NOT only point to the subscription
manager endpoint, but rather <em><strong>binds</strong></em><em>all the way <strong>through</strong></em> to
a specific subscription. Once the binding process to that subscription is done, the
requsted action is then executed on the bound resource.
</p>
        <p>
Ok ... I am sorry ... too abstract? I'll rephrase.
</p>
        <p>
What I am saying is that WS-Eventing is an example showing how messages aren't
necessarily targeted at the thing with [WebMethod] on top of it, but they may indeed
be targeted at something more specific like a database record. So the binding of the
endpoint reference is not a matter of the client stopping at <em><a href="http://somewhere/blahblah.asmx">http://somewhere/blahblah.asmx</a></em> but
is only complete when the wse:Identifier header is evaluated on the service-side and <strong>inside</strong><em>blahblah.asmx,</em> resolved
against the subscription database and the actual message target, the respective subscription
record, is found. Once the EPR is fully resolved to yield the message target (the
record), &lt;GetStatus/&gt; indeed becomes a parameterless operation and the body
does not have to carry further content.
</p>
        <p>
EPR = Moniker ;-)
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=8ebd839c-f781-4091-8c1d-10daa71f426f" />
      </body>
      <title>WS-Eventing design seen from two perspectives ... and another interesting insight about WS-Addressing</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,8ebd839c-f781-4091-8c1d-10daa71f426f.aspx</guid>
      <link>http://vasters.com/clemensv/2004/10/22/WSEventing+Design+Seen+From+Two+Perspectives+And+Another+Interesting+Insight+About+WSAddressing.aspx</link>
      <pubDate>Fri, 22 Oct 2004 15:27:12 GMT</pubDate>
      <description>&lt;p&gt;
Perspective 1: 
&lt;/p&gt;
&lt;p&gt;
I am not a fan of the way WS-Eventing is relying on WS-Addressing's EPR binding rules
to correlate subscription responses (containing a parameterized "wse:SubscriptionManager"
EPR holding the subscription identifier in wsa:ReferenceParameters, see table 5, line
24-26 in &lt;a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp"&gt;WS-Eventing&lt;/a&gt;)&amp;nbsp;with
subsequent renewals, unsubscribe and status inquiry operations and forces the most
central information bit for the respective operation ("Which subscription do you wish
to renew?") into the header of the respective message (wse:Identifier) instead of
having it in the body. 
&lt;/p&gt;
&lt;p&gt;
So for the "GetStatus" operation, you end up with a single body element "GetStatus"
that doesn't carry any content [see table 8, lines 19-21 and line 24&amp;nbsp;in &lt;a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp"&gt;WS-Eventing&lt;/a&gt;].
I know that XML lost everything intuitive about it a long time back, but the way this
works&amp;nbsp;is really counterintuitive and just doesn't&amp;nbsp;look right.&amp;nbsp;I would
expect &amp;lt;GetStatus&amp;gt;uri:Subscription-Identifier&amp;lt;/GetStatus&amp;gt;. 
&lt;/p&gt;
&lt;p&gt;
Perspective 2:
&lt;/p&gt;
&lt;p&gt;
Now &lt;em&gt;on the other hand!&lt;/em&gt;&amp;nbsp;this is actually&amp;nbsp;a sound approach if I were
looking at the said SubscriptionManager EPR as a &lt;em&gt;resource&lt;/em&gt;. What the wsa:ReferenceParameter
does to the EPR is that it&amp;nbsp;binds it&amp;nbsp;uniquely to the respective subscription
(section 1.3 of the spec mandates this).
&lt;/p&gt;
&lt;p&gt;
What's confusing here&amp;nbsp;(and&amp;nbsp;not really a good name choice in my view) is
that the &lt;em&gt;wse:SubscriptionManager &lt;/em&gt;EPR does NOT only point to the subscription
manager endpoint, but rather &lt;em&gt;&lt;strong&gt;binds&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;all the way &lt;strong&gt;through&lt;/strong&gt;&lt;/em&gt; to
a specific subscription. Once the binding process to that subscription is done, the
requsted action is then executed on the bound resource.
&lt;/p&gt;
&lt;p&gt;
Ok ... I am sorry ... too abstract? I'll rephrase.
&lt;/p&gt;
&lt;p&gt;
What I am saying is that WS-Eventing is an example showing how&amp;nbsp;messages aren't
necessarily targeted at the thing with [WebMethod] on top of it, but they may indeed
be targeted at something more specific like a database record. So the binding of the
endpoint reference is not a matter of the client stopping at &lt;em&gt;&lt;a href="http://somewhere/blahblah.asmx"&gt;http://somewhere/blahblah.asmx&lt;/a&gt;&lt;/em&gt; but
is only complete when the wse:Identifier header is evaluated on the service-side and &lt;strong&gt;inside&lt;/strong&gt; &lt;em&gt;blahblah.asmx,&lt;/em&gt;&amp;nbsp;resolved
against the subscription database and the actual message target, the respective subscription
record, is found. Once the EPR is&amp;nbsp;fully resolved to yield the message target&amp;nbsp;(the
record), &amp;lt;GetStatus/&amp;gt; indeed becomes a parameterless operation and the body
does not have to carry further content.
&lt;/p&gt;
&lt;p&gt;
EPR = Moniker ;-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=8ebd839c-f781-4091-8c1d-10daa71f426f" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,8ebd839c-f781-4091-8c1d-10daa71f426f.aspx</comments>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=e666969b-c32c-45e3-b2bb-feb198e7eefa</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,e666969b-c32c-45e3-b2bb-feb198e7eefa.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,e666969b-c32c-45e3-b2bb-feb198e7eefa.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=e666969b-c32c-45e3-b2bb-feb198e7eefa</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Whenever you start thinking stuff is stable, it turns out that it is not the case.
I am trying to implement a <a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp">WS-Eventing</a> compliant
service and of course I ran into the issue that that specification sits on the
August 2004 edition (and W3C submission) of <a href="http://www.w3.org/Submission/2004/SUBM-ws-addressing-20040810/">WS-Addressing</a> while
WSE 2.0 sits on the March 2004 edition of WS-Addressing. To implement WS-Eventing
correctly, I would now have to write a WS-Adressing implementation parallel to the
one existing in WSE 2.0, because - of course - the August 2004 edition sports a new
namespace and has a subtly different schema. Unfortunately, the March 2004 edition
of WS-Addressing  is so fundamental for WSE 2.0 that routing and security
and everything would sit on the March version while my own eventing functionality
and nothing else would ride on the August version at the same time and in
the same message. Of course that seems just totally wrong.  WSE 2.1, please!
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=e666969b-c32c-45e3-b2bb-feb198e7eefa" />
      </body>
      <title>Whenever you start thinking stuff is stable ...</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,e666969b-c32c-45e3-b2bb-feb198e7eefa.aspx</guid>
      <link>http://vasters.com/clemensv/2004/10/22/Whenever+You+Start+Thinking+Stuff+Is+Stable.aspx</link>
      <pubDate>Fri, 22 Oct 2004 14:34:58 GMT</pubDate>
      <description>&lt;p&gt;
Whenever you start thinking stuff is stable, it turns out that it is not the case.
I am trying to implement a &lt;a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp"&gt;WS-Eventing&lt;/a&gt; compliant
service and of course I ran into the issue that that specification sits&amp;nbsp;on the
August 2004 edition (and W3C submission) of &lt;a href="http://www.w3.org/Submission/2004/SUBM-ws-addressing-20040810/"&gt;WS-Addressing&lt;/a&gt; while
WSE 2.0 sits on the March 2004 edition of WS-Addressing. To implement WS-Eventing
correctly, I would now have to write a WS-Adressing implementation parallel to the
one existing in WSE 2.0, because - of course - the August 2004 edition sports a new
namespace and has a subtly different schema.&amp;nbsp;Unfortunately, the March 2004 edition
of WS-Addressing&amp;nbsp; is so fundamental for WSE 2.0 that&amp;nbsp;routing and security
and everything would sit on the March version while my own eventing functionality
and nothing else would ride on the&amp;nbsp;August version&amp;nbsp;at the same time and in
the same message. Of course that seems just totally wrong. &amp;nbsp;WSE 2.1, please!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=e666969b-c32c-45e3-b2bb-feb198e7eefa" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,e666969b-c32c-45e3-b2bb-feb198e7eefa.aspx</comments>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=7ba96e03-1ec5-4a22-9042-57b96b6fa725</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,7ba96e03-1ec5-4a22-9042-57b96b6fa725.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,7ba96e03-1ec5-4a22-9042-57b96b6fa725.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=7ba96e03-1ec5-4a22-9042-57b96b6fa725</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p>
Unless you enable the config setting below, WSE injects intentionally invalid “Via”
routing information into ReplyTo and FaultTo addresses for security reasons and therefore
you can’t just turn around and create, for instance, a <i>new SoapSender(SoapRequestContext.Address.ReplyTo)</i> at
the receiving endpoint or set the reply envelope’s context like <i>envelope.Context.Addressing.Destination
= SoapRequestContext.Address.ReplyTo.</i> Because “Via” trumps any other
address in an endpoint reference for delivery, a reply to such an invalidated EPR
will usually yield a 404. I fell into that hole for the second or third time now and
it somehow never stuck in long-term memory, so this is the persisted “note to
self”  ;-)
</p>
          <p>
            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;</span>
            <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">microsoft.web.services2</span>
            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;<br /></span>
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'">   <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">messaging</span><span style="COLOR: blue">&gt;<br /></span></span>
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'">      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">allowRedirectedResponses</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">enabled</span><span style="COLOR: blue">="true"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span></span>
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'">   <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">messaging</span><span style="COLOR: blue">&gt;<br /></span></span>
            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;/</span>
            <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">microsoft.web.services2</span>
            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;</span>
          </p>
        </div>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=7ba96e03-1ec5-4a22-9042-57b96b6fa725" />
      </body>
      <title>Ah... THAT'S how to make WS-Addressing work in WSE 2.0</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,7ba96e03-1ec5-4a22-9042-57b96b6fa725.aspx</guid>
      <link>http://vasters.com/clemensv/2004/07/22/Ah+THATS+How+To+Make+WSAddressing+Work+In+WSE+20.aspx</link>
      <pubDate>Thu, 22 Jul 2004 09:50:21 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
&lt;p&gt;
Unless you enable the config setting below, WSE injects intentionally invalid &amp;#8220;Via&amp;#8221;
routing information into ReplyTo and FaultTo addresses for security reasons and therefore
you can&amp;#8217;t just turn around and create, for instance, a &lt;i&gt;new SoapSender(SoapRequestContext.Address.ReplyTo)&lt;/i&gt; at
the receiving endpoint or set the reply envelope&amp;#8217;s context like &lt;i&gt;envelope.Context.Addressing.Destination
= SoapRequestContext.Address.ReplyTo.&lt;/i&gt; Because &amp;#8220;Via&amp;#8221; trumps any other
address in an endpoint reference for delivery, a reply to such an invalidated EPR
will usually yield a 404. I fell into that hole for the second or third time now and
it somehow never stuck in long-term memory, so this is the persisted &amp;#8220;note to
self&amp;#8221;&amp;nbsp; ;-)
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;microsoft.web.services2&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;messaging&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;allowRedirectedResponses&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;enabled&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="true"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;messaging&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;microsoft.web.services2&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=7ba96e03-1ec5-4a22-9042-57b96b6fa725" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,7ba96e03-1ec5-4a22-9042-57b96b6fa725.aspx</comments>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=f24c4e77-c717-4dca-9d75-495688048ff5</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,f24c4e77-c717-4dca-9d75-495688048ff5.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,f24c4e77-c717-4dca-9d75-495688048ff5.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=f24c4e77-c717-4dca-9d75-495688048ff5</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I might be blind to not have seen that before, but this here hit me over the
third Guinness at an Irish Pub while answering a sudden technical question from
my buddy Bart:
</p>
        <p>
&lt;wsa:ReplyTo xmlns:wsa="<a href="http://schemas.xmlsoap.org/ws/2004/03/addressing">http://schemas.xmlsoap.org/ws/2004/03/addressing</a>"&gt;<br />
 &lt;wsa:Address&gt;http://server/service_second_intermediary&lt;/wsa:Address&gt;<br />
 &lt;wsa:ReferenceProperties&gt;<br />
  &lt;wsa:ReplyTo&gt;<br />
   &lt;wsa:Address&gt;http://server/service_first_intermediary&lt;/wsa:Address&gt;<br />
   &lt;wsa:ReferenceProperties&gt;<br />
    &lt;wsa:ReplyTo&gt;<br />
     &lt;wsa:Address&gt;http://server/service_outer_caller&lt;/wsa:Address&gt;<br />
    &lt;/wsa:ReplyTo&gt;<br />
   &lt;/wsa:ReferenceProperties&gt;<br />
  &lt;/wsa:ReplyTo&gt;<br />
 &lt;/wsa:ReferenceProperties&gt;<br />
&lt;/wsa:ReplyTo&gt;
</p>
        <p>
Read the EPR binding rules section 2.3 in the <a href="http://msdn.microsoft.com/library/en-us/dnglobspec/html/ws-addressing.asp?frame=true">WS-Addressing</a> spec
and you'll find out just like me how distributed "call-stacks" work with WS-Addressing,
if your choice of communication pattern is the far more flexible <a href="http://hyperthink.net/blog/PermaLink,guid,97b52cfb-2863-4e8f-a604-706eb07d63b8.aspx">duplex</a> (or <a href="http://msdn.microsoft.com/longhorn/archive/default.aspx?pull=/library/en-us/dnlingo/html/indigolingo_03102004.asp">here</a>)
pattern for datagram-based message conversations instead of the rather
simplistic request/response model. Of course, any endpoint-reference can
be stacked in the same way. I always wondered where the (deprecated) <a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-routing.asp">WS-Routing</a> "path"
went, which allowed specifying source routes. I think I ran into it.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=f24c4e77-c717-4dca-9d75-495688048ff5" />
      </body>
      <title>Addressing insight over beer</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,f24c4e77-c717-4dca-9d75-495688048ff5.aspx</guid>
      <link>http://vasters.com/clemensv/2004/07/12/Addressing+Insight+Over+Beer.aspx</link>
      <pubDate>Mon, 12 Jul 2004 13:46:49 GMT</pubDate>
      <description>&lt;p&gt;
I might be blind to not have seen that before, but this here hit me over&amp;nbsp;the
third&amp;nbsp;Guinness at an Irish Pub while answering a sudden technical question from
my buddy Bart:
&lt;/p&gt;
&lt;p&gt;
&amp;lt;wsa:ReplyTo xmlns:wsa="&lt;a href="http://schemas.xmlsoap.org/ws/2004/03/addressing"&gt;http://schemas.xmlsoap.org/ws/2004/03/addressing&lt;/a&gt;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;wsa:Address&amp;gt;http://server/service_second_intermediary&amp;lt;/wsa:Address&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;wsa:ReferenceProperties&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;wsa:ReplyTo&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Address&amp;gt;http://server/service_first_intermediary&amp;lt;/wsa:Address&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:ReferenceProperties&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:ReplyTo&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Address&amp;gt;http://server/service_outer_caller&amp;lt;/wsa:Address&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/wsa:ReplyTo&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/wsa:ReferenceProperties&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/wsa:ReplyTo&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;/wsa:ReferenceProperties&amp;gt;&lt;br&gt;
&amp;lt;/wsa:ReplyTo&amp;gt;
&lt;/p&gt;
&lt;p&gt;
Read the EPR binding rules section 2.3 in the &lt;a href="http://msdn.microsoft.com/library/en-us/dnglobspec/html/ws-addressing.asp?frame=true"&gt;WS-Addressing&lt;/a&gt; spec
and you'll find out just like me&amp;nbsp;how distributed "call-stacks" work with WS-Addressing,
if your choice of communication pattern&amp;nbsp;is the far more flexible&amp;nbsp;&lt;a href="http://hyperthink.net/blog/PermaLink,guid,97b52cfb-2863-4e8f-a604-706eb07d63b8.aspx"&gt;duplex&lt;/a&gt; (or &lt;a href="http://msdn.microsoft.com/longhorn/archive/default.aspx?pull=/library/en-us/dnlingo/html/indigolingo_03102004.asp"&gt;here&lt;/a&gt;)
pattern for&amp;nbsp;datagram-based&amp;nbsp;message conversations&amp;nbsp;instead of the rather
simplistic request/response model.&amp;nbsp;Of course, any&amp;nbsp;endpoint-reference can
be stacked in the same way. I always wondered where the (deprecated) &lt;a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-routing.asp"&gt;WS-Routing&lt;/a&gt; "path"
went, which allowed specifying source routes. I think I ran into it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=f24c4e77-c717-4dca-9d75-495688048ff5" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,f24c4e77-c717-4dca-9d75-495688048ff5.aspx</comments>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=f9d907bd-2c2f-4dc1-8b87-5b7549366bbf</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,f9d907bd-2c2f-4dc1-8b87-5b7549366bbf.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,f9d907bd-2c2f-4dc1-8b87-5b7549366bbf.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=f9d907bd-2c2f-4dc1-8b87-5b7549366bbf</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We've built FABRIQ, we've built Proseware. We have written seminar series about Web
Services Best Practices and Service Orientation for Microsoft Europe. I speak about
services and aspects of services at conferences around the world. And at all events
where I talk about Services, I keep hearing the same question: "Enough of the theory,
how do I do it?"
</p>
        <p>
Therefore we have <a href="http://www.newtelligence.net/PermaLink.aspx?guid=c9fd0897-8702-4e1b-8aa9-2dbcf66051b4">announced</a> a
seminar/workshop around designing and building service oriented systems that puts
together all the things we've found out in the past years about how services can be
built today and on today's Microsoft technology stack and how your systems can
be designed for with migration to the next generation Microsoft technlogy stack in
mind. Together with our <em>newtelligence Associates</em>, we are offering this workshop
for in-house delivery at client sites world-wide and are planning to announce dates
and locations for central, "open for all" events soon. 
</p>
        <p>
If you are interested in inviting us for an event at your site, contact <a href="mailto:bartd@newtelligence.com">Bart
DePetrillo</a>, or write to <a href="mailto:sales@newtelligence.com">sales@newtelligence.com</a>.
If you are interested in participating at a central seminar, <a href="mailto:bartd@newtelligence.com">Bart</a> would
like to hear about it (no obligations) so that we can select reasonable location(s)
and date(s) that fit your needs.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=f9d907bd-2c2f-4dc1-8b87-5b7549366bbf" />
      </body>
      <title>newtelligence Seminar Series: Service Oriented Architecture and Systems</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,f9d907bd-2c2f-4dc1-8b87-5b7549366bbf.aspx</guid>
      <link>http://vasters.com/clemensv/2004/07/05/newtelligence+Seminar+Series+Service+Oriented+Architecture+And+Systems.aspx</link>
      <pubDate>Mon, 05 Jul 2004 07:06:41 GMT</pubDate>
      <description>&lt;p&gt;
We've built FABRIQ, we've built Proseware. We have written seminar series about Web
Services Best Practices and Service Orientation for Microsoft Europe. I speak about
services and aspects of services at conferences around the world. And at all events
where I talk about Services, I keep hearing the same question: "Enough of the theory,
how do I do it?"
&lt;/p&gt;
&lt;p&gt;
Therefore we have &lt;a href="http://www.newtelligence.net/PermaLink.aspx?guid=c9fd0897-8702-4e1b-8aa9-2dbcf66051b4"&gt;announced&lt;/a&gt; a
seminar/workshop around designing and building service oriented systems that puts
together all the things we've found out in the past years about how services can be
built today and on today's Microsoft technology stack and how your&amp;nbsp;systems can
be designed for with migration to the next generation Microsoft technlogy stack in
mind. Together with our &lt;em&gt;newtelligence Associates&lt;/em&gt;, we are offering this workshop
for in-house delivery at client sites world-wide and are planning to announce&amp;nbsp;dates
and locations for central, "open for all"&amp;nbsp;events soon. 
&lt;/p&gt;
&lt;p&gt;
If you are interested in inviting us for an event at your site, contact &lt;a href="mailto:bartd@newtelligence.com"&gt;Bart
DePetrillo&lt;/a&gt;, or write to &lt;a href="mailto:sales@newtelligence.com"&gt;sales@newtelligence.com&lt;/a&gt;.
If you are interested in participating at&amp;nbsp;a central seminar,&amp;nbsp;&lt;a href="mailto:bartd@newtelligence.com"&gt;Bart&lt;/a&gt; would
like to hear about it (no obligations) so that we can&amp;nbsp;select reasonable location(s)
and date(s) that fit your needs.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=f9d907bd-2c2f-4dc1-8b87-5b7549366bbf" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,f9d907bd-2c2f-4dc1-8b87-5b7549366bbf.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Technology/FABRIQ</category>
      <category>Technology/Indigo</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=64000a9a-567f-46e3-8c34-54f8414464a2</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,64000a9a-567f-46e3-8c34-54f8414464a2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,64000a9a-567f-46e3-8c34-54f8414464a2.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=64000a9a-567f-46e3-8c34-54f8414464a2</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am writing a very, very, very big application at the moment and I am totally swamped
in a 24/7 coding frenzy that’s going to continue for the next week or so, but
here’s one little bit to think about and for which I came up with a solution.
It’s actually a pretty scary problem.
</p>
        <p>
Let’s say you have a transactional serviced component (or make that a transactional
EJB) and you call an HTTP web service from it that forwards any information to another
service. What happens if the transaction fails for any reason? You’ve just produced
a phantom record. The web service on the other end should never have seen that information.
In fact, that information doesn’t exist from the viewpoint of your rolled back
local transaction. And of course, as of yet, there is no infrastructure in place that
gives you interoperable transaction flow. And if that were the case, the other web
service may not support it. What should you do? Panic?
</p>
        <p>
There is help right in the platform (Enterprise Services that is). Your best friend
for that sort of circumstance is System.EnterpriseServices.CompensatingResourceManager.
</p>
        <p>
The use case here is to call another service to allocate some items from an inventory
service. The call is strictly asynchronous and I the remote service will eventually
turn around and call an action on my service (they have a “duplex” conversation
using asynchronous calls going back and forth). Instead of calling the service form
within my transactional method, I am deferring the call until the transaction is being
resolved. Only when DTC is sure that the local transaction will go through, the web
service call will be made. There is no way to guarantee that the remote call succeeds,
but it does at least eliminate the very horrible side effects on overall system consistency
caused by phantom calls. It is in fact quite impossible to implement “Prepare”
correctly here, since the remote service may fail processing the (one-way) call on
a different thread and hence I might never get a SOAP fault indicating failure. Because
that’s so and because I really don’t know what the other service does,
I am not writing any specific recovery code in the “Commit” phase. Instead,
my local state for the conversation indicates the current progress of the interaction
between the two services and logs an expiration time. Once that expiration time has
passed without a response from the remote service, a watchdog will pick up the state
record, create a new message for the remote service and replay the call. 
</p>
        <p>
For synchronous call scenarios, you could implement (not shown here) a two-step call
sequence to the remote service, which the remote service needs to support, of course.
In “Prepare” (or in the “normal code”) you would pass the
data to the remote service and hold a session state cookie. If that call succeeds,
you vote “true”. In “Commit” you would issue a call to commit
that data on the remote service for this session, on “Abort” (remember
that the transaction may fail for any reason outside the scope of the web service
call), you will call the remote service to cancel the action and discard the data
of the session. What if the network connection fails between the “Prepare”
phase call and the “Commit” phase call? That’s the tricky bit. You
could log the call data and retry the “Commit” call at a later time or
keep retrying for a while in the “Commit” phase (which will cause the
transaction to hang). There’s no really good solution for that case, unless
you have transaction flow. In any event, the remote service will have to default to
an “Abort” once the session times out, which is easy to do if the data
is kept in a volatile session store over there. It just “forgets” it.
</p>
        <p>
However, all of this is much, much better than making naïve, simple web service
calls that fan out intermediate data from within transactions. Fight the phantoms.
</p>
        <p class="MsoNormal">
At the call location, write the call data to the CRM transaction log using the Clerk:
</p>
        <p class="MsoNormal" style="MARGIN-BOTTOM: 12pt">
          <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'">AllocatedItemsMessage
aim = <span style="COLOR: blue">new</span> AllocatedItemsMessage();<br />
aim.allocatedAllocation = &lt;&lt;&lt; copy that data from elsewhere&gt;&gt;&gt;<br />
Clerk clerk = <span style="COLOR: blue">new</span> Clerk(<span style="COLOR: blue">typeof</span>(SiteInventoryConfirmAllocationRM),"SiteInventoryConfirmAllocationRM",CompensatorOptions.AllPhases);<br />
SiteInventoryConfirmAllocationRM.ConfirmAllocationLogRecord rec = <span style="COLOR: blue">new</span> RhineBooks.ClusterInventoryService.SiteInventoryConfirmAllocationRM.ConfirmAllocationLogRecord();<br />
rec.allocatedItemsMessage = aim;<br />
clerk.WriteLogRecord( rec.XmlSerialize() );<br />
clerk.ForceLog();</span>
        </p>
        <p>
Write a compensator that picks up the call data from the log and forwards it to the
remote service. In the “Prepare” phase, the minimum work that can be done
is to check whether the proxy can be constructed. You could also make sure that the
call URL is valid, the server name resolves and you could even try a GET on the service’s
documentation page or call a “Ping” method the remote service may provide.
That all serves to verify as good as you can that the “Commit” call has
a good chance of succeeding: 
</p>
        <p class="MsoNormal">
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">
            <br />
using System.EnterpriseServices.CompensatingResourceManager;<br /></span>
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">using
…</span>
        </p>
        <p class="MsoNormal">
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">
          </span> 
</p>
        <p class="MsoNormal" style="MARGIN-BOTTOM: 12pt">
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">///</span>
          <span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'">
          </span>
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">
            <SUMMARY>
              <br />
///
</SUMMARY>
          </span>
          <span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"> This
class is a CRM compensator that will invoke the allocation confirmation 
<br /></span>
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">///</span>
          <span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"> activity
on the site inventory service if, and only if, the local transaction<br /></span>
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">///</span>
          <span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"> enlisting
it is succeeding. Using the technique is a workaround for the lack<br /></span>
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">///</span>
          <span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"> of
transactional I/O with HTTP web services. While the compensator cannot make<br /></span>
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">///</span>
          <span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"> sure
that the call will succeed, it can at least guarantee that we do not produce 
<br /></span>
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">///</span>
          <span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"> phantom
calls to external services.<br /></span>
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">///</span>
          <span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'">
          </span>
          <span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'">
            <br />
          </span>
          <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">public</span>
          <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'">
            <span style="COLOR: blue">class</span> SiteInventoryConfirmAllocationRM
: Compensator<br />
{<br />
  <span style="COLOR: blue">private</span><span style="COLOR: blue">bool</span> vote
= <span style="COLOR: blue">true</span>;<br /><br />
  [Serializable]<br />
  <span style="COLOR: blue">public</span><span style="COLOR: blue">class</span> ConfirmAllocationLogRecord<br />
  {<br />
    <span style="COLOR: blue">public</span> SiteInventoryInquiries.AllocatedItemsMessage
allocatedItemsMessage;            
<br /><br />
    <span style="COLOR: blue">internal</span><span style="COLOR: blue">string</span> XmlSerialize() 
<br />
    {<br />
      StringWriter sw = <span style="COLOR: blue">new</span> StringWriter();<br />
      XmlSerializer xs = <span style="COLOR: blue">new</span> XmlSerializer(<span style="COLOR: blue">typeof</span>(ConfirmAllocationLogRecord));<br />
      xs.Serialize(sw,<span style="COLOR: blue">this</span>);<br />
      sw.Flush();<br />
      <span style="COLOR: blue">return</span> sw.ToString();<br />
    }<br /><br />
    <span style="COLOR: blue">internal</span><span style="COLOR: blue">static</span> ConfirmAllocationLogRecord
XmlDeserialize(<span style="COLOR: blue">string</span> s) 
<br />
    {<br />
      StringReader sr = <span style="COLOR: blue">new</span> StringReader(s);<br />
      XmlSerializer xs = <span style="COLOR: blue">new</span> XmlSerializer(<span style="COLOR: blue">typeof</span>(ConfirmAllocationLogRecord));<br />
      <span style="COLOR: blue">return</span> xs.Deserialize(sr) <span style="COLOR: blue">as</span> ConfirmAllocationLogRecord;<br />
    }<br />
  }<br /><br /><b>  <span style="COLOR: blue">public</span><span style="COLOR: blue">override</span><span style="COLOR: blue">bool</span> PrepareRecord(LogRecord
rec)<br /></b>  {<br />
    <span style="COLOR: blue">try<br /></span>    {<br />
      SiteInventoryInquiriesWse sii;<br />
      ConfirmAllocationLogRecord calr  = ConfirmAllocationLogRecord.XmlDeserialize((<span style="COLOR: blue">string</span>)rec.Record); 
<br />
      sii = InventoryInquiriesInternal.GetSiteInventoryInquiries(
calr.allocatedItemsMessage.allocatedAllocation.warehouseName );<br />
      vote = sii != <span style="COLOR: blue">null</span>; 
  <br />
      <span style="COLOR: blue">return</span><span style="COLOR: blue">false</span>;<br />
    }<br />
    <span style="COLOR: blue">catch</span>( Exception ex )<br />
    {<br />
      ExceptionManager.Publish( ex );<br />
      vote = <span style="COLOR: blue">false</span>;<br />
      <span style="COLOR: blue">return</span><span style="COLOR: blue">true</span>;<br />
    }<br />
  }<br /><br />
  <span style="COLOR: blue">public</span><span style="COLOR: blue">override</span><span style="COLOR: blue">bool</span> EndPrepare()<br />
  {<br />
    <span style="COLOR: blue">return</span> vote;<br />
  }<br /><br /><br /><b>  <span style="COLOR: blue">public</span><span style="COLOR: blue">override</span><span style="COLOR: blue">bool</span> CommitRecord(LogRecord
rec)</b><br />
  {<br />
    SiteInventoryInquiriesWse sii;<br />
    ConfirmAllocationLogRecord calr  = ConfirmAllocationLogRecord.XmlDeserialize((<span style="COLOR: blue">string</span>)rec.Record); 
<br />
    sii = InventoryInquiriesInternal.GetSiteInventoryInquiries( calr.allocatedItemsMessage.allocatedAllocation.warehouseName
);<br />
  
<br />
    <span style="COLOR: blue">try<br /></span>    {<br />
      sii.ConfirmAllocation( calr.allocatedItemsMessage );<br />
    }<br />
    <span style="COLOR: blue">catch</span>( Exception ex )<br />
    {<br />
      ExceptionManager.Publish( ex );<br />
    }<br />
    <span style="COLOR: blue">return</span><span style="COLOR: blue">true</span>;<br />
  }<br />
}</span>
        </p>
        <p class="MsoNormal">
          <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">
          </span> 
</p>
        <p class="MsoNormal">
          <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">
          </span> 
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=64000a9a-567f-46e3-8c34-54f8414464a2" />
      </body>
      <title>Dealing with distributed transaction anomalies caused by web service calls from within transactions</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,64000a9a-567f-46e3-8c34-54f8414464a2.aspx</guid>
      <link>http://vasters.com/clemensv/2004/04/23/Dealing+With+Distributed+Transaction+Anomalies+Caused+By+Web+Service+Calls+From+Within+Transactions.aspx</link>
      <pubDate>Fri, 23 Apr 2004 08:27:54 GMT</pubDate>
      <description>&lt;p&gt;
I am writing a very, very, very big application at the moment and I am totally swamped
in a 24/7 coding frenzy that&amp;#8217;s going to continue for the next week or so, but
here&amp;#8217;s one little bit to think about and for which I came up with a solution.
It&amp;#8217;s actually a pretty scary problem.
&lt;/p&gt;
&lt;p&gt;
Let&amp;#8217;s say you have a transactional serviced component (or make that a transactional
EJB) and you call an HTTP web service from it that forwards any information to another
service. What happens if the transaction fails for any reason? You&amp;#8217;ve just produced
a phantom record. The web service on the other end should never have seen that information.
In fact, that information doesn&amp;#8217;t exist from the viewpoint of your rolled back
local transaction. And of course, as of yet, there is no infrastructure in place that
gives you interoperable transaction flow. And if that were the case, the other web
service may not support it. What should you do? Panic?
&lt;/p&gt;
&lt;p&gt;
There is help right in the platform (Enterprise Services that is). Your best friend
for that sort of circumstance is System.EnterpriseServices.CompensatingResourceManager.
&lt;/p&gt;
&lt;p&gt;
The use case here is to call another service to allocate some items from an inventory
service. The call is strictly asynchronous and I the remote service will eventually
turn around and call an action on my service (they have a &amp;#8220;duplex&amp;#8221; conversation
using asynchronous calls going back and forth). Instead of calling the service form
within my transactional method, I am deferring the call until the transaction is being
resolved. Only when DTC is sure that the local transaction will go through, the web
service call will be made. There is no way to guarantee that the remote call succeeds,
but it does at least eliminate the very horrible side effects on overall system consistency
caused by phantom calls. It is in fact quite impossible to implement &amp;#8220;Prepare&amp;#8221;
correctly here, since the remote service may fail processing the (one-way) call on
a different thread and hence I might never get a SOAP fault indicating failure. Because
that&amp;#8217;s so and because I really don&amp;#8217;t know what the other service does,
I am not writing any specific recovery code in the &amp;#8220;Commit&amp;#8221; phase. Instead,
my local state for the conversation indicates the current progress of the interaction
between the two services and logs an expiration time. Once that expiration time has
passed without a response from the remote service, a watchdog will pick up the state
record, create a new message for the remote service and replay the call. 
&lt;/p&gt;
&lt;p&gt;
For synchronous call scenarios, you could implement (not shown here) a two-step call
sequence to the remote service, which the remote service needs to support, of course.
In &amp;#8220;Prepare&amp;#8221; (or in the &amp;#8220;normal code&amp;#8221;) you would pass the
data to the remote service and hold a session state cookie. If that call succeeds,
you vote &amp;#8220;true&amp;#8221;. In &amp;#8220;Commit&amp;#8221; you would issue a call to commit
that data on the remote service for this session, on &amp;#8220;Abort&amp;#8221; (remember
that the transaction may fail for any reason outside the scope of the web service
call), you will call the remote service to cancel the action and discard the data
of the session. What if the network connection fails between the &amp;#8220;Prepare&amp;#8221;
phase call and the &amp;#8220;Commit&amp;#8221; phase call? That&amp;#8217;s the tricky bit. You
could log the call data and retry the &amp;#8220;Commit&amp;#8221; call at a later time or
keep retrying for a while in the &amp;#8220;Commit&amp;#8221; phase (which will cause the
transaction to hang). There&amp;#8217;s no really good solution for that case, unless
you have transaction flow. In any event, the remote service will have to default to
an &amp;#8220;Abort&amp;#8221; once the session times out, which is easy to do if the data
is kept in a volatile session store over there. It just &amp;#8220;forgets&amp;#8221; it.
&lt;/p&gt;
&lt;p&gt;
However, all of this is much, much better than making na&amp;#239;ve, simple web service
calls that fan out intermediate data from within transactions. Fight the phantoms.
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
At the call location, write the call data to the CRM transaction log using the Clerk:
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'"&gt;AllocatedItemsMessage
aim = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; AllocatedItemsMessage();&lt;br&gt;
aim.allocatedAllocation = &amp;lt;&amp;lt;&amp;lt; copy that data from elsewhere&amp;gt;&amp;gt;&amp;gt;&lt;br&gt;
Clerk clerk = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; Clerk(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(SiteInventoryConfirmAllocationRM),"SiteInventoryConfirmAllocationRM",CompensatorOptions.AllPhases);&lt;br&gt;
SiteInventoryConfirmAllocationRM.ConfirmAllocationLogRecord rec = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; RhineBooks.ClusterInventoryService.SiteInventoryConfirmAllocationRM.ConfirmAllocationLogRecord();&lt;br&gt;
rec.allocatedItemsMessage = aim;&lt;br&gt;
clerk.WriteLogRecord( rec.XmlSerialize() );&lt;br&gt;
clerk.ForceLog();&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Write a compensator that picks up the call data from the log and forwards it to the
remote service. In the &amp;#8220;Prepare&amp;#8221; phase, the minimum work that can be done
is to check whether the proxy can be constructed. You could also make sure that the
call URL is valid, the server name resolves and you could even try a GET on the service&amp;#8217;s
documentation page or call a &amp;#8220;Ping&amp;#8221; method the remote service may provide.
That all serves to verify as good as you can that the &amp;#8220;Commit&amp;#8221; call has
a good chance of succeeding: 
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;
&lt;br&gt;
using System.EnterpriseServices.CompensatingResourceManager;&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;using
&amp;#8230;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;
&lt;SUMMARY&gt;
&lt;br&gt;
///
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt; This
class is a CRM compensator that will invoke the allocation confirmation 
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt; activity
on the site inventory service if, and only if, the local transaction&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt; enlisting
it is succeeding. Using the technique is a workaround for the lack&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt; of
transactional I/O with HTTP web services. While the compensator cannot make&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt; sure
that the call will succeed, it can at least guarantee that we do not produce 
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt; phantom
calls to external services.&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Lucida Console'"&gt;&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; SiteInventoryConfirmAllocationRM
: Compensator&lt;br&gt;
{&lt;br&gt;
&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; vote
= &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;br&gt;
&lt;br&gt;
&amp;nbsp; [Serializable]&lt;br&gt;
&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; ConfirmAllocationLogRecord&lt;br&gt;
&amp;nbsp; {&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; SiteInventoryInquiries.AllocatedItemsMessage
allocatedItemsMessage;&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;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;internal&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; XmlSerialize() 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringWriter sw = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; StringWriter();&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlSerializer xs = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; XmlSerializer(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(ConfirmAllocationLogRecord));&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xs.Serialize(sw,&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;);&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.Flush();&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; sw.ToString();&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;internal&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; ConfirmAllocationLogRecord
XmlDeserialize(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; s) 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringReader sr = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; StringReader(s);&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlSerializer xs = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; XmlSerializer(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(ConfirmAllocationLogRecord));&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; xs.Deserialize(sr) &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; ConfirmAllocationLogRecord;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; PrepareRecord(LogRecord
rec)&lt;br&gt;
&lt;/b&gt;&amp;nbsp; {&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;try&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SiteInventoryInquiriesWse sii;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ConfirmAllocationLogRecord calr&amp;nbsp; = ConfirmAllocationLogRecord.XmlDeserialize((&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)rec.Record); 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sii = InventoryInquiriesInternal.GetSiteInventoryInquiries(
calr.allocatedItemsMessage.allocatedAllocation.warehouseName );&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vote = sii != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;catch&lt;/span&gt;( Exception ex )&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExceptionManager.Publish( ex );&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vote = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; EndPrepare()&lt;br&gt;
&amp;nbsp; {&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; vote;&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; CommitRecord(LogRecord
rec)&lt;/b&gt;
&lt;br&gt;
&amp;nbsp; {&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;SiteInventoryInquiriesWse sii;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;ConfirmAllocationLogRecord calr&amp;nbsp; = ConfirmAllocationLogRecord.XmlDeserialize((&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)rec.Record); 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;sii = InventoryInquiriesInternal.GetSiteInventoryInquiries( calr.allocatedItemsMessage.allocatedAllocation.warehouseName
);&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;try&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sii.ConfirmAllocation( calr.allocatedItemsMessage );&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;catch&lt;/span&gt;( Exception ex )&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExceptionManager.Publish( ex );&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=64000a9a-567f-46e3-8c34-54f8414464a2" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,64000a9a-567f-46e3-8c34-54f8414464a2.aspx</comments>
      <category>Architecture</category>
      <category>Technology/Enterprise Services</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=10a29b2a-e63e-4ffd-8449-57ee40b1aecc</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,10a29b2a-e63e-4ffd-8449-57ee40b1aecc.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,10a29b2a-e63e-4ffd-8449-57ee40b1aecc.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=10a29b2a-e63e-4ffd-8449-57ee40b1aecc</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One year ago (plus 5 days), I posted <a href="/clemensv/PermaLink.aspx?guid=124">this
here</a> on my blog. I just found it again through my referral stats. Of course, that
post isn't about Juliet, at all. Fun.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=10a29b2a-e63e-4ffd-8449-57ee40b1aecc" />
      </body>
      <title>Duplex, Request/Response and One-Way</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,10a29b2a-e63e-4ffd-8449-57ee40b1aecc.aspx</guid>
      <link>http://vasters.com/clemensv/2004/03/12/Duplex+RequestResponse+And+OneWay.aspx</link>
      <pubDate>Fri, 12 Mar 2004 16:27:25 GMT</pubDate>
      <description>&lt;p&gt;
One year ago (plus 5 days), I posted &lt;a href="/clemensv/PermaLink.aspx?guid=124"&gt;this
here&lt;/a&gt; on my blog. I just found it again through my referral stats. Of course,&amp;nbsp;that
post isn't about Juliet, at all. Fun.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=10a29b2a-e63e-4ffd-8449-57ee40b1aecc" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,10a29b2a-e63e-4ffd-8449-57ee40b1aecc.aspx</comments>
      <category>Technology/Indigo</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=4eda9fe7-e36e-4e64-b170-2f29a88621dd</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,4eda9fe7-e36e-4e64-b170-2f29a88621dd.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,4eda9fe7-e36e-4e64-b170-2f29a88621dd.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=4eda9fe7-e36e-4e64-b170-2f29a88621dd</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The evolution of in-memory concept of messages in the managed Microsoft Web Services
stack(s) is quite interesting to look at. When you compare the concepts of System.Web.Services
(ASMX), Microsoft.Web.Services (WSE) and System.MessageBus (Indigo M4), you'll find
that this most fundamental element has undergone some interesting changes and that
the Indigo M4 incarnation of "Message" is actually a bit surprising in its design. 
</p>
        <p>
          <strong>ASMX</strong>
        </p>
        <p>
In the core ASP.NET Web Services model (nicknamed ASMX), the concept of an in-memory
message doesn't really surface anywhere in the programming model unless you use the
ASMX <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebservicesprotocolssoapextensionclasstopic.asp">extensibility
mechanism</a>. The abstract <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebServicesProtocolsSoapMessageClassTopic.asp">SoapMessage</a> class,
which comes in concrete SoapClientMessage and SoapServerMessage flavors has two fundamental
states that depend on the message stage that the message is inspected in: The message
is either unparsed or parsed (some say "cracked"). 
</p>
        <p>
If it's parsed you can get at the parameters that are being passed to the server or
are about to be returned to the client, but the original XML data stream of the message
is no longer available and all headers have likewise either been mapped onto objects
or lumped into a "unknown headers" array. if the message is unparsed, all you get
is an text stream that you'll have to parse yourself. If you want to add, remove or
modify headers while processing a message in an extension, you will have to read and
parse your copy of the input stream (the message text) and write the resulting mesage
to an output stream that's handed onwards to the next extension or to the infrastructure.
In essence that means that if you had two or three ASMX-style SOAP extensions that
implement security, addressing and routing functionality, you'd be parsing the message
three times and serializing it three times just so that the infrastructure would parse
it yet again. Not so good.
</p>
        <p>
          <strong>WSE</strong>
        </p>
        <p>
          <a href="http://msdn.microsoft.com/webservices/building/wse/default.aspx">The Web
Services Enhancements</a> (WSE) have a simple, but very effective fix for that problem.
The WSE team needed to use the ASMX extensibility point but found that if they'd build
all their required extensions using the ASMX model, they'd run into that obvious performance
problem. Therefore, WSE has its <a href="http://msdn.microsoft.com/library/en-us/dnwebsrv/html/insidewsepipe.asp">own
pipeline</a> and its own extensibility mechanism that plugs as one big extension into
ASMX and when you write extensions (handlers) for WSE, you don't get a stream but
an in-memory info-set in form of a SoapEnvelope (that is derived from System.Xml.XmlDocument
and therefore a DOM). Parsing the XML text just once and have all processing steps
work on a shared in-memory object-model seems optimal. Can it really get any better
than "parse once" as WSE does it? 
</p>
        <p>
          <strong>Indigo</strong>
        </p>
        <p>
When you look at the Indigo concept of <a href="http://longhorn.msdn.microsoft.com/lhsdk/ref/ns/system.messagebus/c/message/message.aspx">Message</a> (the
Message class in the next milestone will be the same in spirit, similar in concept
and different in detail and simpler as a result), you'll find that it doesn't contain
a reference to an XmlDocument or some other DOM-like structure. The Indigo message
contains a collection of headers (which in the M4 milestone also come in an "in-memory
only" flavor) and a content object, which has, as its most important member, an XmlReader-typed <a href="http://longhorn.msdn.microsoft.com/lhsdk/ref/ns/system.messagebus/c/messagecontent/p/reader.aspx">Reader</a> property.
</p>
        <p>
When I learned about this design decision a while ago, I was a bit puzzled why that's
so. It appeared clear to me that if you kept the message parsed in a DOM, you'd have
a good solution if you want to hand the message down a chain of extensibility points,
because you don't need to reparse. The magic sentence that woke me up was "We need
to support streaming". And then it clicked.
</p>
        <p>
Assume you want to receive a 1GB video stream over an Indigo TCP multicast or UDP
connection (even if you think that's a silly idea - work with me here). Because Indigo
will represent the message containing that video as an XML Infoset (mind that this
doesn't imply that we're talking about base64-encoded content in an UTF-8 angle bracket
document and therefore 2GB on the wire), we've got some problems if there was a DOM
based solution. A DOM like XmlDocument is only ready for business when it has seen
the end tag of its source stream. This is not so good for streams of that size, because
you surely would want to see the video stream as it downloads and, if the video stream
is a live broadcast, there may simply be no defined end: The message may have a virtually
infinite size with the "end-tag" being expected just shortly before judgment day. 
</p>
        <p>
There's something philosophically interesting about a message relaying a 24*7*365
video stream where the binary content inside the message body starts with the current
video broadcast bits as of the time the message is generated and then never ends.
The message can indeed be treated as being well-formed XML because there is always
a theoretical end to it. The end-tag just happens to be a couple of "bit-years" away.
</p>
        <p>
Back to the message design: When Indigo gets its hands on a transport stream it layers
a Message object over the raw bits available on the message using an XmlReader. Then
it peeks into the message and parses soap:Envelope and everything inside soap:Header.
The headers it finds go into the in-memory header collection. Once it sees soap:Body,
Indigo stops and backs off. The result of this is a partially parsed in-memory message
for which all headers are available in memory and the body of the message is left
sitting in an XmlReader. When the XmlReader sits on top of a NetworkStream, we now
have a construct where Indigo can already work on the message and its control information
(headers) while the network socket is still open and the rest of the message is still
arriving (or portions haven't even been sent by the other party).
</p>
        <p>
Unless an infrastructure extension must touch the body (in-message body encryption
or signature do indeed spoil the party here), Indigo can process the message, just
ignore the body portion and hand it to the application endpoint for processing as-is.
When the application endpoint reads the message through the XmlReader it therefore
pulls the bits directly off the wire. Another variant of this, and the case where
it really gets interesting, is that using this technique, arbitrary large data streams
can be routed over multiple Indigo hops using virtualized WS-Addressing addressing
where every intermediary server just forwards the bits to the next hop as they arrive.
Combine this with publish and subscribe services and Indigo's broadcasting abilities
and this is getting really sexy for all sorts of applications that need to traverse
transport-level obstacles such as firewalls or where you simply can't use IP.      
</p>
        <p>
For business applications, this support for very large messages is not only very interesting
but actually vital for a lot of applications. In our BizTalk workshops we've had quite
a few customers who exchange catalogs for engineering parts with other parties. These
catalogs easily exceed 1GB in size on the wire. If you want to expand those messages
up into a DOM you've got a problem. Consequently, neither WSE nor ASMX nor BizTalk
Server nor any other DOM based solution that isn't running on a well equipped 64-bit
box can successfully handle such real-customer-scenario messages. Once messages support
streaming, you have that sort of flexibility.
</p>
        <p>
The problem that remains with XmlReader is that once you touch the body, things get
a bit more complex than with a DOM representation. The XmlReader is a "read once"
construct that usually can't be reset to its initial state. That is specifically true
if the reader sits on top of a network stream and returns the translated bits as they
arrive. Once you touch the message content is the infrastructure, the message is therefore
"consumed" and can't be used for further processing. The good news is, though, that if
you buffer the message content into a DOM, you can layer an XmlNodeReader over the
DOM's document element and forward the message with that reader. If you
only need to read parts of the message or if you don't want to use the DOM, you can
layer a custom XML reader over a combination of your buffer data and the original
XmlReader.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=4eda9fe7-e36e-4e64-b170-2f29a88621dd" />
      </body>
      <title>Indigo: The evolution of the in-memory message</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,4eda9fe7-e36e-4e64-b170-2f29a88621dd.aspx</guid>
      <link>http://vasters.com/clemensv/2004/01/24/Indigo+The+Evolution+Of+The+Inmemory+Message.aspx</link>
      <pubDate>Sat, 24 Jan 2004 19:37:53 GMT</pubDate>
      <description>&lt;p&gt;
The evolution of in-memory concept of messages in the managed Microsoft Web Services
stack(s) is quite interesting to look at. When you compare the concepts of System.Web.Services
(ASMX), Microsoft.Web.Services (WSE) and System.MessageBus (Indigo M4), you'll find
that this most fundamental element has undergone some interesting changes and that
the Indigo M4 incarnation of "Message" is actually a bit surprising in its design. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;ASMX&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
In the core ASP.NET Web Services model (nicknamed ASMX), the concept of an in-memory
message doesn't really surface anywhere in the programming model unless you use the
ASMX &lt;a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebservicesprotocolssoapextensionclasstopic.asp"&gt;extensibility
mechanism&lt;/a&gt;. The abstract &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebServicesProtocolsSoapMessageClassTopic.asp"&gt;SoapMessage&lt;/a&gt; class,
which comes in concrete SoapClientMessage and SoapServerMessage flavors has two fundamental
states that depend on the message stage that the message is inspected in: The message
is either unparsed or parsed (some say "cracked"). 
&lt;/p&gt;
&lt;p&gt;
If it's parsed you can get at the parameters that are being passed to the server or
are about to be returned to the client, but the original XML data stream of the message
is no longer available and all headers have likewise either been mapped onto objects
or lumped into a "unknown headers" array. if the message is unparsed, all you get
is an text stream that you'll have to parse yourself. If you want to add, remove or
modify headers while processing a message in an extension, you will have to read and
parse your copy of the input stream (the message text) and write the resulting mesage
to an output stream that's handed onwards to the next extension or to the infrastructure.
In essence that means that if you had two or three ASMX-style SOAP extensions that
implement security, addressing and routing functionality, you'd be parsing the message
three times and serializing it three times just so that the infrastructure would parse
it yet again. Not so good.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;WSE&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/webservices/building/wse/default.aspx"&gt;The Web
Services Enhancements&lt;/a&gt; (WSE) have a simple, but very effective fix for that problem.
The WSE team needed to use the ASMX extensibility point but found that if they'd build
all their required extensions using the ASMX model, they'd run into that obvious performance
problem. Therefore, WSE has its &lt;a href="http://msdn.microsoft.com/library/en-us/dnwebsrv/html/insidewsepipe.asp"&gt;own
pipeline&lt;/a&gt; and its own extensibility mechanism that plugs as one big extension into
ASMX and when you write extensions (handlers) for WSE, you don't get a stream but
an in-memory info-set in form of a SoapEnvelope (that is derived from System.Xml.XmlDocument
and therefore a DOM). Parsing the XML text just once and have all processing steps
work on a shared in-memory object-model seems optimal. Can it really get any better
than "parse once" as WSE does it? 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Indigo&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
When you look at the Indigo concept of &lt;a href="http://longhorn.msdn.microsoft.com/lhsdk/ref/ns/system.messagebus/c/message/message.aspx"&gt;Message&lt;/a&gt; (the
Message class in the next milestone will be the same in spirit, similar in concept
and different in detail and simpler as a result), you'll find that it doesn't contain
a reference to an XmlDocument or some other DOM-like structure. The Indigo message
contains a collection of headers (which in the M4 milestone also come in an "in-memory
only" flavor) and a content object, which has, as its most important member, an XmlReader-typed &lt;a href="http://longhorn.msdn.microsoft.com/lhsdk/ref/ns/system.messagebus/c/messagecontent/p/reader.aspx"&gt;Reader&lt;/a&gt; property.
&lt;/p&gt;
&lt;p&gt;
When I learned about this design decision a while ago, I was a bit puzzled why that's
so. It appeared clear to me that if you kept the message parsed in a DOM, you'd have
a good solution if you want to hand the message down a chain of extensibility points,
because you don't need to reparse. The magic sentence that woke me up was "We need
to support streaming". And then it clicked.
&lt;/p&gt;
&lt;p&gt;
Assume you want to receive a 1GB video stream over an Indigo TCP multicast or UDP
connection (even if you think that's a silly idea - work with me here). Because Indigo
will represent the message containing that video as an XML Infoset (mind that this
doesn't imply that we're talking about base64-encoded content in an UTF-8 angle bracket
document and therefore 2GB on the wire), we've got some problems if there was a DOM
based solution. A DOM like XmlDocument is only ready for business when it has seen
the end tag of its source stream. This is not so good for streams of that size, because
you surely would want to see the video stream as it downloads and, if the video stream
is a live broadcast, there may simply be no defined end: The message may have a virtually
infinite size with the "end-tag" being expected just shortly before judgment day. 
&lt;/p&gt;
&lt;p&gt;
There's something philosophically interesting about a message relaying a 24*7*365
video stream where the binary content inside the message body starts with the current
video broadcast bits as of the time the message is generated and then never ends.
The message can indeed be treated as being well-formed XML because there is always
a theoretical end to it. The end-tag just happens to be a couple of "bit-years" away.
&lt;/p&gt;
&lt;p&gt;
Back to the message design: When Indigo gets its hands on a transport stream it layers
a Message object over the raw bits available on the message using an XmlReader. Then
it peeks into the message and parses soap:Envelope and everything inside soap:Header.
The headers it finds go into the in-memory header collection. Once it sees soap:Body,
Indigo stops and backs off. The result of this is a partially parsed in-memory message
for which all headers are available in memory and the body of the message is left
sitting in an XmlReader. When the XmlReader sits on top of a NetworkStream, we now
have a construct where Indigo can already work on the message and its control information
(headers) while the network socket is still open and the rest of the message is still
arriving (or portions haven't even been sent by the other party).
&lt;/p&gt;
&lt;p&gt;
Unless an infrastructure extension must touch the body (in-message body encryption
or signature do indeed spoil the party here), Indigo can process the message, just
ignore the body portion and hand it to the application endpoint for processing as-is.
When the application endpoint reads the message through the XmlReader it therefore
pulls the bits directly off the wire. Another variant of this, and the case where
it really gets interesting, is that using this technique, arbitrary large data streams
can be routed over multiple Indigo hops using virtualized WS-Addressing addressing
where every intermediary server just forwards the bits to the next hop as they arrive.
Combine this with publish and subscribe services and Indigo's broadcasting abilities
and this is getting really sexy for all sorts of applications that need to traverse
transport-level obstacles such as firewalls or where you simply can't use IP.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
For business applications, this support for very large messages is not only very interesting
but actually vital for a lot of applications. In our BizTalk workshops we've had quite
a few customers who exchange catalogs for engineering parts with other parties. These
catalogs easily exceed 1GB in size on the wire. If you want to expand those messages
up into a DOM you've got a problem. Consequently, neither WSE nor ASMX nor BizTalk
Server nor any other DOM based solution that isn't running on a well equipped 64-bit
box can successfully handle such real-customer-scenario messages. Once messages support
streaming, you have that sort of flexibility.
&lt;/p&gt;
&lt;p&gt;
The problem that remains with XmlReader is that once you touch the body, things get
a bit more complex than with a DOM representation. The XmlReader is a "read once"
construct that usually can't be reset to its initial state. That is specifically true
if the reader sits on top of a network stream and returns the translated bits as they
arrive. Once you touch the message content is the infrastructure, the message is therefore
"consumed" and can't be used for further processing. The good news is, though, that&amp;nbsp;if
you&amp;nbsp;buffer the message content into a DOM, you can layer an XmlNodeReader over&amp;nbsp;the
DOM's document element and&amp;nbsp;forward the&amp;nbsp;message with that reader. If you
only need to read parts of the message or if you don't want to use the DOM, you can
layer a custom XML reader over a combination of your buffer data and the original
XmlReader.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=4eda9fe7-e36e-4e64-b170-2f29a88621dd" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,4eda9fe7-e36e-4e64-b170-2f29a88621dd.aspx</comments>
      <category>Technology</category>
      <category>Technology/Indigo</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=48307a84-ea05-4ba0-9d05-05ecc9854a70</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,48307a84-ea05-4ba0-9d05-05ecc9854a70.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,48307a84-ea05-4ba0-9d05-05ecc9854a70.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=48307a84-ea05-4ba0-9d05-05ecc9854a70</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'll put together the v1.5 build version of dasBlog next week. The v1.4 "PDC build"
proved to be "true to the spirit of PDC bits" and turned out to have a couple
of problems with the new "dasBlog" theme and some other inconveniences that v1.5
will fix. The true heroes of v1.5 are <a href="http://www.shahine.com/omar/">Omar</a> and
the many other frequent contributors to the workspace; I just didn't have enough time
to add features recently. 
</p>
        <p>
As I blogged last week, I am very busily involved in a exciting (mind that I use the
word not as carelessly as some marketing types) infrastructure project on service-oriented
architectures, automnomous computing an agile machines. I wrote some 50 pages of very
dense technical specification and a lot of "proof of concept" code in the past two
weeks and we're in the process of handing this off to the development team. I am having
a great time and a lot of fun, but because the schedule is insanely tight for
a variety of reasons (I am not complaining, I signed it knowingly), I've
been on 16 hour days for most of the past two weeks.  In some ways,
this is also an Indigo project, because I am loosely aligning some of my
core architecture with a few <a href="http://longhorn.msdn.microsoft.com/lhsdk/ref/ns/system.messagebus/c/message/message.aspx">fundamentals</a> from
the Indigo connector architecture published at PDC to that we can take full advantage
of Indigo once it's ready. The Indigo idea of <a href="http://longhorn.msdn.microsoft.com/lhsdk/ref/ns/system.messagebus/c/messagecontent/p/reader.aspx">keeping </a>the
Message body in an <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlXmlReaderClassTopic.asp">XmlReader</a> is
an ingenious idea for what I am doing here. In essence, if you only need to look
at the headers inside an intermediary in a one-way messaging infrastructure like
the one I am building right now, you may never even need to look anything
from the body until you push the resulting message out again. So why suck it into
a DOM? Just map the input stream to the output stream and hand the body through as
you get it. That way and under certain circumstances, my bits may already be forwarding a
message to the next hop when it hasn't even fully arrived yet.
</p>
        <p>
One of the "innovative approaches" (for me, at least) is that within this infrastructure,
which has a freely composable, nestable pipeline of "aspects", I am using my <a href="/clemensv/PermaLink.aspx?guid=b598b91f-bb97-4aad-9404-bceb3aff08c9">lightweight
transaction manager</a> to coordinate the failure management of such independently
developed components. The difficulty of that and the absence of an "atomic"
property of a composite pipeline activity are two things that bugged
me most about aspects. There's a lot more potential in this approach, for instance
enforcement of composition rules. It works great in theory and in the prototype code
and I am curious how that turns out once it hits a real life use-case. We're getting
there soon. (My first loud thinking about something like this is was at the very bottom
of <a href="/clemensv/CommentView.aspx?guid=206">this rant</a> here.) I'll keep
you posted.
</p>
        <p>
In unrelated news: Because I know that I'll be doing a lot of Longhorn work and demos
in the upcoming months (my Jan/Feb/Mar schedule looks like I am going to visit every
EMEA software developer personally), I've meanwhile figured that my loyal and
reliable digital comrade (a Dell Inspiron 8100) will be retired. Its successor will
have a <a href="http://www.alienware.com/Configurator_Pages/area-51m.aspx?SysCode=PC-LT-AREA51-M&amp;SubCode=SKU-EXTREME">green</a> chassis.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=48307a84-ea05-4ba0-9d05-05ecc9854a70" />
      </body>
      <title>This, that and next week.</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,48307a84-ea05-4ba0-9d05-05ecc9854a70.aspx</guid>
      <link>http://vasters.com/clemensv/2003/11/30/This+That+And+Next+Week.aspx</link>
      <pubDate>Sun, 30 Nov 2003 18:14:03 GMT</pubDate>
      <description>&lt;p&gt;
I'll put together the v1.5 build version of dasBlog next week. The v1.4 "PDC build"
proved to be "true to&amp;nbsp;the spirit of PDC bits" and turned out to have a couple
of&amp;nbsp;problems with the new "dasBlog" theme and some other inconveniences that v1.5
will fix. The true heroes of v1.5&amp;nbsp;are &lt;a href="http://www.shahine.com/omar/"&gt;Omar&lt;/a&gt; and
the many other frequent contributors to the workspace; I just didn't have enough time
to add features recently. 
&lt;/p&gt;
&lt;p&gt;
As I blogged last week, I am very busily involved in a exciting (mind that I use the
word not as carelessly as some marketing types) infrastructure project on service-oriented
architectures, automnomous computing an agile machines. I wrote some 50 pages of very
dense technical specification and a lot of "proof of concept" code in the past two
weeks and we're in the process of handing this off to the development team. I am having
a great time and a lot of fun, but&amp;nbsp;because the schedule is insanely tight for
a variety of reasons&amp;nbsp;(I&amp;nbsp;am not complaining, I signed it knowingly), I've
been on 16 hour days for most of the past two weeks.&amp;nbsp;&amp;nbsp;In&amp;nbsp;some ways,
this is also&amp;nbsp;an Indigo project, because I am loosely aligning some of&amp;nbsp;my
core architecture with a few &lt;a href="http://longhorn.msdn.microsoft.com/lhsdk/ref/ns/system.messagebus/c/message/message.aspx"&gt;fundamentals&lt;/a&gt; from
the Indigo connector architecture published at PDC to that we can take full advantage
of Indigo once it's ready. The Indigo idea of &lt;a href="http://longhorn.msdn.microsoft.com/lhsdk/ref/ns/system.messagebus/c/messagecontent/p/reader.aspx"&gt;keeping &lt;/a&gt;the
Message body in an &lt;a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlXmlReaderClassTopic.asp"&gt;XmlReader&lt;/a&gt; is
an ingenious idea for what I am doing here.&amp;nbsp;In essence, if you only need to look
at the headers inside an intermediary in a one-way messaging&amp;nbsp;infrastructure like
the one&amp;nbsp;I am&amp;nbsp;building right now, you may never even need to look anything
from the body until you push the resulting message out again. So why suck it into
a DOM? Just map the input stream to the output stream and hand the body through as
you get it. That way and under certain circumstances, my bits may already be forwarding&amp;nbsp;a
message to the next hop when it hasn't even fully arrived yet.
&lt;/p&gt;
&lt;p&gt;
One of the "innovative approaches" (for me, at least) is that within this infrastructure,
which has a freely composable, nestable&amp;nbsp;pipeline of "aspects", I am using&amp;nbsp;my &lt;a href="/clemensv/PermaLink.aspx?guid=b598b91f-bb97-4aad-9404-bceb3aff08c9"&gt;lightweight
transaction manager&lt;/a&gt;&amp;nbsp;to coordinate the failure management of such independently
developed components.&amp;nbsp;The difficulty of that and the absence of&amp;nbsp;an "atomic"
property of&amp;nbsp;a composite pipeline&amp;nbsp;activity&amp;nbsp;are two things that bugged
me most about aspects. There's a lot more potential in this approach, for instance
enforcement of composition rules. It works great in theory and in the prototype code
and I am curious how that turns out once it hits a real life use-case. We're getting
there soon. (My first loud thinking about something like this is was at the very bottom
of &lt;a href="/clemensv/CommentView.aspx?guid=206"&gt;this&amp;nbsp;rant&lt;/a&gt; here.) I'll keep
you posted.
&lt;/p&gt;
&lt;p&gt;
In unrelated news: Because I know that I'll be doing a lot of Longhorn work and demos
in the upcoming months (my Jan/Feb/Mar schedule looks like I am going to visit every
EMEA software developer personally), I've meanwhile figured that my&amp;nbsp;loyal and
reliable digital comrade (a Dell Inspiron 8100) will be retired. Its successor will
have a &lt;a href="http://www.alienware.com/Configurator_Pages/area-51m.aspx?SysCode=PC-LT-AREA51-M&amp;amp;SubCode=SKU-EXTREME"&gt;green&lt;/a&gt;&amp;nbsp;chassis.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=48307a84-ea05-4ba0-9d05-05ecc9854a70" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,48307a84-ea05-4ba0-9d05-05ecc9854a70.aspx</comments>
      <category>newtelligence/dasBlog</category>
      <category>Technology/Indigo</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=47c865b9-48d4-473d-9c0e-a90a35f2bf52</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,47c865b9-48d4-473d-9c0e-a90a35f2bf52.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,47c865b9-48d4-473d-9c0e-a90a35f2bf52.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=47c865b9-48d4-473d-9c0e-a90a35f2bf52</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.infoworld.com/article/03/08/08/31OPstrategic_1.html">Jon Udell
writes</a> in his most recent column that some think that there is a "controversy"
about the use of XML namespaces. This seems to stem from the sad fact that RSS never
got a proper namespace assigned to it and is one of the hottest <s>schemas</s> specs
in the XML space right now. Sorry, there may people in disbelief, but the <a href="http://www.w3.org/TR/REC-xml-names/">XML
Namespaces</a> spec is normative and referenced in the current <a href="http://www.w3.org/TR/2000/REC-xml-20001006">XML
1.0 (Second Edition)</a> spec. The empty namespace is a namespace. 
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>Some notable experts — including Sean McGrath, CTO of Propylon in Dublin, Ireland
— argue that namespaces should be avoided for that reason. </em>
          </p>
        </blockquote>
        <p>
You can't avoid namespaces, they are automatic if you use XML today. If you don't
declare one for your vocabulary/schema, you are contributing to a large cloud of "stuff"
sitting in the "not part of any" namespace. The "empty" namespace (which essentially
says "not part of any namespace") is the XML equivalent of a the "these are just some
tags" garbage dump. 
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=47c865b9-48d4-473d-9c0e-a90a35f2bf52" />
      </body>
      <title>XML namespaces are a discussion topic ?!?!</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,47c865b9-48d4-473d-9c0e-a90a35f2bf52.aspx</guid>
      <link>http://vasters.com/clemensv/2003/08/09/XML+Namespaces+Are+A+Discussion+Topic.aspx</link>
      <pubDate>Sat, 09 Aug 2003 18:39:25 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.infoworld.com/article/03/08/08/31OPstrategic_1.html"&gt;Jon Udell
writes&lt;/a&gt;&amp;nbsp;in his most recent column that some think that there is&amp;nbsp;a "controversy"
about the use of XML namespaces. This seems to stem from the sad fact that RSS never
got a proper namespace assigned to it and is one of the hottest &lt;s&gt;schemas&lt;/s&gt; specs
in the XML space right now. Sorry, there may people in disbelief, but the &lt;a href="http://www.w3.org/TR/REC-xml-names/"&gt;XML
Namespaces&lt;/a&gt; spec is normative and referenced in the current &lt;a href="http://www.w3.org/TR/2000/REC-xml-20001006"&gt;XML
1.0 (Second Edition)&lt;/a&gt;&amp;nbsp;spec.&amp;nbsp;The empty namespace is a namespace. 
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;em&gt;Some notable experts — including Sean McGrath, CTO of Propylon in Dublin, Ireland
— argue that namespaces should be avoided for that reason. &lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
You can't avoid namespaces, they are automatic&amp;nbsp;if you use XML today. If you don't
declare one for your vocabulary/schema, you are contributing to a large cloud of "stuff"
sitting in the "not part of any" namespace. The "empty" namespace (which essentially
says "not part of any namespace") is the XML equivalent of a the "these are just some
tags" garbage dump. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=47c865b9-48d4-473d-9c0e-a90a35f2bf52" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,47c865b9-48d4-473d-9c0e-a90a35f2bf52.aspx</comments>
      <category>Technology/Web Services</category>
      <category>Technology</category>
      <category>Technology/XML</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=219</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,219.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,219.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=219</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I couldn't find one, so I made a <a href="http://radio.weblogs.com/0108971/WS-PolicyAttachment_bootstrap.xml">WS-PolicyAttachment
UDDI bootstrap file</a> for import into Windows UDDI Services. 
</p>
        <p>
When I put that together, I ran into a bug in the spec. Point 5.1 shows the tModel
for the remote policy reference. The tModelKey shown there is 
</p>
        <p>
          <font face="Courier, Monospace">&lt;tModel tModelKey="uuid:0b1b5a47-bebf-3b7d-9802-f2dd80a91adebd3966a8-faa5-416e-9772-128554343571"&gt;</font>
        </p>
        <p>
which is a bit long for a uuid, isn't it? Correct is the following (as the spec later
explains):
</p>
        <p>
          <font face="Courier, Monospace">&lt;tModel tModelKey="uuid:0b1b5a47-bebf-3b7d-9802-f2dd80a91ade"&gt;</font>
        </p>
        <p>
The bug even survived the revision from 1.0 to 1.1, which makes me wonder whether
anyone ever reads these specs in any depth
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=219" />
      </body>
      <title>WS-PolicyAttachment UDDI bootstrap file</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,219.aspx</guid>
      <link>http://vasters.com/clemensv/2003/07/10/WSPolicyAttachment+UDDI+Bootstrap+File.aspx</link>
      <pubDate>Thu, 10 Jul 2003 17:49:57 GMT</pubDate>
      <description>&lt;p&gt;
I couldn't find one, so I made a &lt;a href="http://radio.weblogs.com/0108971/WS-PolicyAttachment_bootstrap.xml"&gt;WS-PolicyAttachment
UDDI&amp;nbsp;bootstrap file&lt;/a&gt; for import into Windows UDDI Services. 
&lt;/p&gt;
&lt;p&gt;
When I put that together, I ran into a bug in the spec. Point 5.1 shows the tModel
for the remote policy reference. The&amp;nbsp;tModelKey shown there is 
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier, Monospace"&gt;&amp;lt;tModel tModelKey="uuid:0b1b5a47-bebf-3b7d-9802-f2dd80a91adebd3966a8-faa5-416e-9772-128554343571"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
which is a bit long for a uuid, isn't it? Correct is the following (as the spec later
explains):
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier, Monospace"&gt;&amp;lt;tModel tModelKey="uuid:0b1b5a47-bebf-3b7d-9802-f2dd80a91ade"&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
The bug even survived the revision from 1.0 to 1.1, which makes me wonder whether
anyone ever reads these specs in any depth
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=219" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,219.aspx</comments>
      <category>Technology/Web Services</category>
      <category>Technology</category>
      <category>Technology/UDDI</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=215</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,215.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,215.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=215</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <span id="tabs__ctl0_businessKey">
            <strong>H2/2003, moving up one notch on the WS stack.</strong>
          </span>
        </p>
        <p>
          <span>Yesterday, all the travel madness of H1/2003 which begun in January has officially
ended. I have a couple of weeks at the office ahead of me and that's, even if it may
sound odd, a fantastic thing. The first half of the year and quite a bit
of last year too, I spent most of my research time working deep down in the public
and not-so-public extensibility points of Enterprise Services and Web Services, trying
to understand the exact details of how they work, figuring out how to inject more
and tweak existing functionality and whether certain development patterns such as
AOP could enhance the development experience and productivity of my clients
(and all of you out there who are reading my blog). I've been in 21 countries
in this first half of the year alone and at about 40 different events, talking
about what I found working with these technologies on some more and some
less serious projects and doing that and speaking to people I learned a lot and
I also think that I helped to inspire quite a few people's thinking. </span>
        </p>
        <p>
          <span>Now it's time to move on and focus on the bigger picture. Starting with version
2.0 of Microsoft Web Service Enhancements that's due out by end of this summer, Web
Services will finally become less Web and more Services. The WSE 2.0 stack will break
the tie between HTTP and SOAP by enabling other transports and they'll add support
for some of the most important WS-* specs such as WS-Policy, WS-Addressing and related
specs. The now released UDDI services in Windows Server 2003 put a serious local UDDI
registry at my fingertips. BizTalk Server 2004's new orchestration engine looks
awesome. There's a lot of talk about Service Oriented Architectures, but too less
to see and touch for everyone to believe that this stuff is real. I think that's a
good job description for H2/2003. My UDDI provider key: </span>
          <span>
            <a href="http://uddi.microsoft.com/details/businessdetail.aspx?frames=false&amp;key=7f0baedf-3f0d-4de1-b5e7-c35f668964d5">7f0baedf-3f0d-4de1-b5e7-c35f668964d5</a>
          </span>
        </p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=215" />
      </body>
      <title>H2/2003, moving up one notch on the WS stack.</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,215.aspx</guid>
      <link>http://vasters.com/clemensv/2003/07/09/H22003+Moving+Up+One+Notch+On+The+WS+Stack.aspx</link>
      <pubDate>Wed, 09 Jul 2003 11:05:25 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span id=tabs__ctl0_businessKey&gt;&lt;strong&gt;H2/2003, moving up one notch on the WS stack.&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Yesterday, all the travel madness of H1/2003 which begun in January has officially
ended. I have a couple of weeks at the office ahead of me and that's, even if it may
sound odd,&amp;nbsp;a&amp;nbsp;fantastic thing. The first half of the year and quite a bit
of last year too, I spent most of my research time working deep down in the public
and not-so-public extensibility points of Enterprise Services and Web Services, trying
to understand the exact details of how they work, figuring out how to inject more
and tweak existing functionality and whether certain development patterns such as
AOP could&amp;nbsp;enhance the development experience&amp;nbsp;and productivity of my clients
(and all of you out there who are reading my blog).&amp;nbsp;I've been in 21 countries
in this first half of the year alone and at about&amp;nbsp;40 different events, talking
about what I found working with&amp;nbsp;these technologies on&amp;nbsp;some more and some
less serious projects&amp;nbsp;and doing that and speaking to people I learned a lot and
I also think that I helped to inspire quite a few people's thinking. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Now it's time to move on and focus on the bigger picture. Starting with version
2.0 of Microsoft Web Service Enhancements that's due out by end of this summer, Web
Services will finally become less Web and more Services. The WSE 2.0 stack will break
the tie between HTTP and SOAP by enabling other transports and they'll add support
for some of the most important WS-* specs such as WS-Policy, WS-Addressing and related
specs. The now released UDDI services in Windows Server 2003 put a serious local UDDI
registry at my fingertips.&amp;nbsp;BizTalk Server 2004's new orchestration engine looks
awesome. There's a lot of talk about Service Oriented Architectures, but too less
to see and touch for everyone to believe that this stuff is real. I think that's a
good&amp;nbsp;job description for H2/2003. My UDDI provider key: &lt;/span&gt;&lt;span&gt;&lt;a href="http://uddi.microsoft.com/details/businessdetail.aspx?frames=false&amp;amp;key=7f0baedf-3f0d-4de1-b5e7-c35f668964d5"&gt;7f0baedf-3f0d-4de1-b5e7-c35f668964d5&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=215" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,215.aspx</comments>
      <category>Technology/Web Services</category>
      <category>Technology</category>
      <category>Technology/UDDI</category>
    </item>
  </channel>
</rss>