<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">
  <channel>
    <title>Rockford Lhotka - Service-Oriented</title>
    <link>http://www.lhotka.net/weblog/</link>
    <description>Creator of the CSLA .NET framework</description>
    <language>en-us</language>
    <copyright>Marimer LLC</copyright>
    <lastBuildDate>Thu, 29 Oct 2009 16:23:13 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>rocky@lhotka.net</managingEditor>
    <webMaster>rocky@lhotka.net</webMaster>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=ef9c2ecd-03b6-451f-a04d-d015a3763c10</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,ef9c2ecd-03b6-451f-a04d-d015a3763c10.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,ef9c2ecd-03b6-451f-a04d-d015a3763c10.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=ef9c2ecd-03b6-451f-a04d-d015a3763c10</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’m not too sure about all this “manifesto” stuff these days. Certain right-wing politicians
from days gone by are surely rolling in their graves. Then again, today’s highly communist/socialist
oriented open source worldview would have gotten many of us into a lot of trouble
just a few decades ago…
</p>
        <p>
Regardless, there’s now the <a href="http://soa-manifesto.org/">SOA Manifesto</a>.
And it seems to capture the spirit of SOA in a concise manner.
</p>
        <p>
In fact, its opening statement, talking about putting business value above technology
and so forth, seems to make sense for any software endeavor, not just ones that are
service-oriented.
</p>
        <p>
If you consider that SOA is much more of an <em>enterprise</em> architecture than
it is an <em>application</em> architecture, this all makes a great deal of sense.
The idea that applications should use service-oriented communication when they need
to interact with each other is exactly the sweet spot for service-orientation. 
</p>
        <p>
In that context, saying things like external uniformity and internal diversity are
good is clearly correct; because different applications may require different technologies
or implementation choices, but they all need to work with some enterprise-standardized
message-based service model.
</p>
        <p>
I still suspect SOA may ultimately make a big difference in our industry. But I also
think it will take decades to do so, just like object-orientation. People were working
on object-orientation for well over 20 years before the ideas became mainstream. SOA
is (if you are <em>really</em> generous) maybe a decade old, so it is probably time
to work on some formalism so it is ready to become mainstream 10-15 years from now
:)
</p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=ef9c2ecd-03b6-451f-a04d-d015a3763c10" />
      </body>
      <title>SOA Manifesto</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,ef9c2ecd-03b6-451f-a04d-d015a3763c10.aspx</guid>
      <link>http://www.lhotka.net/weblog/SOAManifesto.aspx</link>
      <pubDate>Thu, 29 Oct 2009 16:23:13 GMT</pubDate>
      <description>&lt;p&gt;
I’m not too sure about all this “manifesto” stuff these days. Certain right-wing politicians
from days gone by are surely rolling in their graves. Then again, today’s highly communist/socialist
oriented open source worldview would have gotten many of us into a lot of trouble
just a few decades ago…
&lt;/p&gt;
&lt;p&gt;
Regardless, there’s now the &lt;a href="http://soa-manifesto.org/"&gt;SOA Manifesto&lt;/a&gt;.
And it seems to capture the spirit of SOA in a concise manner.
&lt;/p&gt;
&lt;p&gt;
In fact, its opening statement, talking about putting business value above technology
and so forth, seems to make sense for any software endeavor, not just ones that are
service-oriented.
&lt;/p&gt;
&lt;p&gt;
If you consider that SOA is much more of an &lt;em&gt;enterprise&lt;/em&gt; architecture than
it is an &lt;em&gt;application&lt;/em&gt; architecture, this all makes a great deal of sense.
The idea that applications should use service-oriented communication when they need
to interact with each other is exactly the sweet spot for service-orientation. 
&lt;/p&gt;
&lt;p&gt;
In that context, saying things like external uniformity and internal diversity are
good is clearly correct; because different applications may require different technologies
or implementation choices, but they all need to work with some enterprise-standardized
message-based service model.
&lt;/p&gt;
&lt;p&gt;
I still suspect SOA may ultimately make a big difference in our industry. But I also
think it will take decades to do so, just like object-orientation. People were working
on object-orientation for well over 20 years before the ideas became mainstream. SOA
is (if you are &lt;em&gt;really&lt;/em&gt; generous) maybe a decade old, so it is probably time
to work on some formalism so it is ready to become mainstream 10-15 years from now
:)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=ef9c2ecd-03b6-451f-a04d-d015a3763c10" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,ef9c2ecd-03b6-451f-a04d-d015a3763c10.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=8a07ef3c-7d00-4a7a-bcae-25972d9364d2</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,8a07ef3c-7d00-4a7a-bcae-25972d9364d2.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,8a07ef3c-7d00-4a7a-bcae-25972d9364d2.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=8a07ef3c-7d00-4a7a-bcae-25972d9364d2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recently participated in a webcast covering SOA, REST and various related topics.
You can listen to it here
</p>
        <p>
          <a href="http://www.slickthought.net/post/Minneapolis-Developer-Roundtable-Podcast---Talking-REST.aspx">http://www.slickthought.net/post/Minneapolis-Developer-Roundtable-Podcast---Talking-REST.aspx</a>
        </p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=8a07ef3c-7d00-4a7a-bcae-25972d9364d2" />
      </body>
      <title>Webcast on SOA, REST and related topics</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,8a07ef3c-7d00-4a7a-bcae-25972d9364d2.aspx</guid>
      <link>http://www.lhotka.net/weblog/WebcastOnSOARESTAndRelatedTopics.aspx</link>
      <pubDate>Mon, 17 Mar 2008 00:32:37 GMT</pubDate>
      <description>&lt;p&gt;
I recently participated in a webcast covering SOA, REST and various related topics.
You can listen to it here
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.slickthought.net/post/Minneapolis-Developer-Roundtable-Podcast---Talking-REST.aspx"&gt;http://www.slickthought.net/post/Minneapolis-Developer-Roundtable-Podcast---Talking-REST.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=8a07ef3c-7d00-4a7a-bcae-25972d9364d2" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,8a07ef3c-7d00-4a7a-bcae-25972d9364d2.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=255d7bf6-b739-4f1e-9244-c39d2afefe4f</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,255d7bf6-b739-4f1e-9244-c39d2afefe4f.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,255d7bf6-b739-4f1e-9244-c39d2afefe4f.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=255d7bf6-b739-4f1e-9244-c39d2afefe4f</wfw:commentRss>
      <title>Why enable the data portal behind a web service?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,255d7bf6-b739-4f1e-9244-c39d2afefe4f.aspx</guid>
      <link>http://www.lhotka.net/weblog/WhyEnableTheDataPortalBehindAWebService.aspx</link>
      <pubDate>Thu, 24 Jan 2008 14:01:56 GMT</pubDate>
      <description>&lt;p&gt;
I reader recently sent me an email asking why the PTWebService project in the CSLA
.NET ProjectTracker reference app has support for using the data portal to talk to
an application server. His understanding was that web services were end points, and
that they should just talk to the database directly. Here's my answer:
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;A
web service is just like any regular web application. The only meaningful difference
is that it exposes XML instead of HTML.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2"&gt;Web
applications often need to talk to application servers. While you are correct – it
is ideal to build web apps in a 2-tier model, there are valid reasons (mostly around
security) why organizations choose to build them using a 3-tier model.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2"&gt;The
most common scenario (probably used by 40% of all organizations) is to put a second
firewall between the web server and any internal servers. The web server is then never
allowed to talk to the database directly (for security reasons), and instead is required
to talk through that second firewall to an app server, which talks to the database.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2"&gt;The
data portal in CSLA .NET helps address this issue, by allowing a web application to
talk to an app server using several possible technologies. Since different organizations
allow different technologies to penetrate that second firewall this flexibility is
important.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2"&gt;Additionally,
the data portal exists for other scenarios, like Windows Forms or WPF applications.
It would be impractical for me to create different versions of CSLA for different
types of application interface. In fact that would defeat the whole point of the framework
– which is to provide a consistent and unified environment for building business layers
that support all valid interface types (Windows, Web, WPF, Workflow, web service,
WCF service, console, etc).&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=255d7bf6-b739-4f1e-9244-c39d2afefe4f" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,255d7bf6-b739-4f1e-9244-c39d2afefe4f.aspx</comments>
      <category>Architecture</category>
      <category>CSLA .NET</category>
      <category>Service-Oriented</category>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=0c50b8ff-5751-46b8-bc42-bff3a9c2eccd</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,0c50b8ff-5751-46b8-bc42-bff3a9c2eccd.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,0c50b8ff-5751-46b8-bc42-bff3a9c2eccd.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=0c50b8ff-5751-46b8-bc42-bff3a9c2eccd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
I was recently asked how to get the JSON serializer used for AJAX programming to serialize
a CSLA .NET business object. 
</p>
        <p>
From an architectural perspective, it is better to view an AJAX (or Silverlight) client
as a totally separate application. That code is running in an untrusted and terribly
hackable location (the user’s browser – where they could have created a custom browser
to do anything to your client-side code – my guess is that there’s a whole class of
hacks coming that most people haven’t even thought about yet…) 
</p>
        <p>
So you can make a strong argument that objects from the business layer should never
be directly serialized to/from an untrusted client (code in the browser). Instead,
you should treat this as a service boundary – a semantic trust boundary between your
application on the server, and the untrusted application running in the browser. 
</p>
        <p>
What that means in terms of coding, is that you don’t want to do some sort of field-level
serialization of your objects from the server. That would be terrible in an untrusted
setting. To put it another way - the BinaryFormatter, NetDataContractSerializer or
any other field-level serializer shouldn't be used for this purpose. 
</p>
        <p>
If anything, you want to do property-level serialization (like the XmlSerializer or
DataContractSerializer or JSON serializer). But really you don’t want to do this either,
because you don’t want to couple your service interface to your internal implementation
that tightly. This is, fundamentally, the same issue I discuss in Chapter 11 of <em>Expert
2005 Business Objects</em> as I talk about SOA. 
</p>
        <p>
Instead, what you really want to do (from an architectural purity perspective anyway)
is define a service contract for use by your AJAX/Silverlight client. A service contract
has two parts: operations and data. The data part is typically defined using formal
data transfer objects (DTOs). You can then design your client app to work against
this service contract. 
</p>
        <p>
In your server app’s UI layer (the aspx pages and webmethods) you translate between
the external contract representation of data and your internal usage of that data
in business objects. In other words, you map from the business objects in/out of the
DTOs that flow to/from the client app. The JSON serializer (or other property-level
serializers) can then be used to do the serialization of these DTOs - which is what
those serializers are designed to do. 
</p>
        <p>
This is a long-winded way of saying that you really don’t want to do JSON serialization
directly against your objects. You want to JSON serialize some DTOs, and copy data
in/out of those DTOs from your business objects – much the way the SOA stuff works
in Chapter 11.
</p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=0c50b8ff-5751-46b8-bc42-bff3a9c2eccd" />
      </body>
      <title>Serializing business objects to Silverlight/AJAX?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,0c50b8ff-5751-46b8-bc42-bff3a9c2eccd.aspx</guid>
      <link>http://www.lhotka.net/weblog/SerializingBusinessObjectsToSilverlightAJAX.aspx</link>
      <pubDate>Tue, 06 Nov 2007 05:53:58 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I was recently asked how to get the JSON serializer used for AJAX programming to serialize
a CSLA .NET business object. 
&lt;p&gt;
From an architectural perspective, it is better to view an AJAX (or Silverlight) client
as a totally separate application. That code is running in an untrusted and terribly
hackable location (the user’s browser – where they could have created a custom browser
to do anything to your client-side code – my guess is that there’s a whole class of
hacks coming that most people haven’t even thought about yet…) 
&lt;p&gt;
So you can make a strong argument that objects from the business layer should never
be directly serialized to/from an untrusted client (code in the browser). Instead,
you should treat this as a service boundary – a semantic trust boundary between your
application on the server, and the untrusted application running in the browser. 
&lt;p&gt;
What that means in terms of coding, is that you don’t want to do some sort of field-level
serialization of your objects from the server. That would be terrible in an untrusted
setting. To put it another way - the BinaryFormatter, NetDataContractSerializer or
any other field-level serializer shouldn't be used for this purpose. 
&lt;p&gt;
If anything, you want to do property-level serialization (like the XmlSerializer or
DataContractSerializer or JSON serializer). But really you don’t want to do this either,
because you don’t want to couple your service interface to your internal implementation
that tightly. This is, fundamentally, the same issue I discuss in Chapter 11 of &lt;em&gt;Expert
2005 Business Objects&lt;/em&gt; as I talk about SOA. 
&lt;p&gt;
Instead, what you really want to do (from an architectural purity perspective anyway)
is define a service contract for use by your AJAX/Silverlight client. A service contract
has two parts: operations and data. The data part is typically defined using formal
data transfer objects (DTOs). You can then design your client app to work against
this service contract. 
&lt;p&gt;
In your server app’s UI layer (the aspx pages and webmethods) you translate between
the external contract representation of data and your internal usage of that data
in business objects. In other words, you map from the business objects in/out of the
DTOs that flow to/from the client app.&amp;nbsp;The JSON serializer (or other property-level
serializers) can then be used to do the serialization of these DTOs - which is what
those serializers are designed to do. 
&lt;p&gt;
This is a long-winded way of saying that you really don’t want to do JSON serialization
directly against your objects. You want to JSON serialize some DTOs, and copy data
in/out of those DTOs from your business objects – much the way the SOA stuff works
in Chapter 11.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=0c50b8ff-5751-46b8-bc42-bff3a9c2eccd" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,0c50b8ff-5751-46b8-bc42-bff3a9c2eccd.aspx</comments>
      <category>Architecture</category>
      <category>CSLA .NET</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=180a1aff-fb67-4555-9c80-ee1f0844309b</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,180a1aff-fb67-4555-9c80-ee1f0844309b.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,180a1aff-fb67-4555-9c80-ee1f0844309b.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=180a1aff-fb67-4555-9c80-ee1f0844309b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The WCF NetDataContractSerializer is an almost, but not quite perfect, replacement
for the BinaryFormatter. 
</p>
        <p>
The NDCS is very important, because without it WCF could never be viewed as a logical
upgrade path for either Remoting or Enterprise Services users. Both Remoting and Enterprise
Services use the BinaryFormatter to serialize objects and data for movement across
AppDomain, process or network boundaries.
</p>
        <p>
Very clearly, since WCF is the upgrade path for these core technologies, it had to
include a serialization technology that was functionally equivalent to the BinaryFormatter,
and that is the NDCS. The NDCS is very cool, because it honors both the Serializable
model and the DataContract model, and even allows you to mix them within a single
object graph.
</p>
        <p>
Unfortunately I have run into a serious issue, where the NDCS is not able to serialize
the System.Security.SecurityException type, while the BinaryFormatter has no issue
with it.
</p>
        <p>
The issue shows up in CSLA in the data portal, because it is quite possible for the
server to throw a SecurityException. You'd like to get that detail back on the client
so you can tell the user why the server call failed, but instead you get a "connection
unexpectedly closed" exception instead. The reason is that WCF itself blew up when
trying to serialize the SecurityException to return it to the client. So rather than
getting any meaningful result, the client gets this vague and nearly useless exception
instead.
</p>
        <p>
By the way, if you want to see the failure, just run this code:
</p>
        <p>
    Dim buffer As New System.IO.MemoryStream<br />
    Dim formatter As New System.Runtime.Serialization.NetDataContractSerializer<br />
    Dim ex As New System.Security.SecurityException("a test")<br />
    formatter.Serialize(buffer, ex)
</p>
        <p>
And if you want to see it not fail run this code:
</p>
        <p>
    Dim buffer As New System.IO.MemoryStream<br />
    Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter<br />
    Dim ex As New System.Security.SecurityException("a test")<br />
    formatter.Serialize(buffer, ex)
</p>
        <p>
I've been doing a lot of work with the NDCS over the past several months. And this
is the first time I've encountered a single case where NDCS didn't mirror the behavior
of the BinaryFormatter - which is why I do think this is a WCF bug. Now just to get
it acknowledged by someone at Microsoft so it can hopefully get fixed in the future...
</p>
        <p>
The immediate issue I face is that I'm not entirely sure how to resolve this issue
in the data portal. One (somewhat ugly) solution is to catch all exceptions (which
I actually do anyway), and then scan the object graph that is about to be returned
to the client to see if there's a SecurityException in the graph. If so perhaps I
could manually invoke the BinaryFormatter and just return a byte array. The problem
with that is in the case where the object graph is a mix of Serializable and DataContract
objects - in which case the BinaryFormatter won't work because it doesn't understand
DataContract...
</p>
        <p>
In the end I may just have to leave it be, and people will need to be aware that they
can never throw a SecurityException from the server...
</p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=180a1aff-fb67-4555-9c80-ee1f0844309b" />
      </body>
      <title>WCF NetDataContractSerializer and SecurityException</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,180a1aff-fb67-4555-9c80-ee1f0844309b.aspx</guid>
      <link>http://www.lhotka.net/weblog/WCFNetDataContractSerializerAndSecurityException.aspx</link>
      <pubDate>Fri, 01 Jun 2007 17:34:14 GMT</pubDate>
      <description>&lt;p&gt;
The WCF NetDataContractSerializer is an almost, but not quite perfect, replacement
for the BinaryFormatter. 
&lt;/p&gt;
&lt;p&gt;
The NDCS is very important, because without it WCF could never be viewed as a logical
upgrade path for either Remoting or Enterprise Services users. Both Remoting and Enterprise
Services use the BinaryFormatter to serialize objects and data for movement across
AppDomain, process or network boundaries.
&lt;/p&gt;
&lt;p&gt;
Very clearly, since WCF is the upgrade path for these core technologies, it had to
include a serialization technology that was functionally equivalent to the BinaryFormatter,
and that is the NDCS. The NDCS is very cool, because it honors both the Serializable
model and the DataContract model, and even allows you to mix them within a single
object graph.
&lt;/p&gt;
&lt;p&gt;
Unfortunately I have run into a serious issue, where the NDCS is not able to serialize
the System.Security.SecurityException type, while the BinaryFormatter has no issue
with it.
&lt;/p&gt;
&lt;p&gt;
The issue shows up in CSLA in the data portal, because it is quite possible for the
server to throw a SecurityException. You'd like to get that detail back on the client
so you can tell the user why the server call failed, but instead you get a "connection
unexpectedly closed" exception instead. The reason is that WCF itself blew up when
trying to serialize the SecurityException to return it to the client. So rather than
getting any meaningful result, the client gets this vague and nearly useless exception
instead.
&lt;/p&gt;
&lt;p&gt;
By the way, if you want to see the failure, just run this code:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim buffer As New System.IO.MemoryStream&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim formatter As New System.Runtime.Serialization.NetDataContractSerializer&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim ex As New System.Security.SecurityException("a test")&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; formatter.Serialize(buffer, ex)
&lt;/p&gt;
&lt;p&gt;
And if you want to see it not fail run this code:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim buffer As New System.IO.MemoryStream&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim ex As New System.Security.SecurityException("a test")&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; formatter.Serialize(buffer, ex)
&lt;/p&gt;
&lt;p&gt;
I've been doing a lot of work with the NDCS over the past several months. And this
is the first time I've encountered a single case where NDCS didn't mirror the behavior
of the BinaryFormatter - which is why I do think this is a WCF bug. Now just to get
it acknowledged by someone at Microsoft so it can hopefully get fixed in the future...
&lt;/p&gt;
&lt;p&gt;
The immediate issue I face is that I'm not entirely sure how to resolve this issue
in the data portal. One (somewhat ugly) solution is to catch all exceptions (which
I actually do anyway), and then scan the object graph that is about to be returned
to the client to see if there's a SecurityException in the graph. If so perhaps I
could manually invoke the BinaryFormatter and just return a byte array. The problem
with that is in the case where the object graph is a mix of Serializable and DataContract
objects - in which case the BinaryFormatter won't work because it doesn't understand
DataContract...
&lt;/p&gt;
&lt;p&gt;
In the end I may just have to leave it be, and people will need to be aware that they
can never throw a SecurityException from the server...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=180a1aff-fb67-4555-9c80-ee1f0844309b" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,180a1aff-fb67-4555-9c80-ee1f0844309b.aspx</comments>
      <category>CSLA .NET</category>
      <category>Microsoft .NET</category>
      <category>Service-Oriented</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=b0f39c62-4544-4924-9856-d54535af2736</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,b0f39c62-4544-4924-9856-d54535af2736.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,b0f39c62-4544-4924-9856-d54535af2736.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=b0f39c62-4544-4924-9856-d54535af2736</wfw:commentRss>
      <title>Does workflow compete with CSLA .NET?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,b0f39c62-4544-4924-9856-d54535af2736.aspx</guid>
      <link>http://www.lhotka.net/weblog/DoesWorkflowCompeteWithCSLANET.aspx</link>
      <pubDate>Sun, 04 Feb 2007 07:03:57 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;It seems that people are always
looking for The Next Big Thing™, which isn’t surprising. What I do find surprising
is that they always assume that TNBT must somehow destroy the Previous Big Thing™,
which in the field of software development was really object-orientation (at least
for most people).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Over the past few years Web Services
and then their reincarnation as SOA or just SO were going to eliminate the use of
OO. As more and more people have actually implemented and consumed services I think
it has become abundantly clear that SOA is merely a repackaging of EAI from the 90’s
and EDI from before that. Useful, but hardly of the sweeping impact of OO, at least
not in the near term.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Though to be fair, OO took more
than 20 years before it became remotely “mainstream”, and even today only around 30%
of developers (based on my informal, but broad, polling over the past couple years)
apply OOD in their daily work. So you could question whether OO is “mainstream” even
today, when the &lt;i style="mso-bidi-font-style: normal"&gt;vast&lt;/i&gt; majority of developers
use procedural programming techniques.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Even though the majority of .NET
and Java developers don’t actually use OO themselves, both the .NET and Java platforms
are OO throughout. So there’s no doubt that OO has had an incredible impact on our
industry, and that it has shaped the major platforms and development styles used by
almost everyone.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So perhaps in 15-20 years SO really
will have the sweeping impact that OO has had on software development. And I’m not
sure that would be a bad thing, but it isn’t a near-term concern.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;However, I was recently confronted
by a (so-called) newcomer: workflow. Yes, now workflow (WF) is going to kill OO, or
so I’ve been told. In fact, Through indirect channels, my challenger suggested that
the CSLA .NET framework is obsolete going forward because it is based on these “old-school”
OO concepts.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Obviously I beg to differ :)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;It is true that some of the concepts
I employ in CSLA .NET are quite old, but I am not ready to through OO into the “old-school”
bucket just yet... The idea is somewhat ironic however, because WF is being put up
as The Next Big Thing™. Depressingly, there's virtually no technology today that isn't
a rehash of something from 20 years ago. That's more true of SOA and WF than OO. Remember
that SOA is just repacking of message-based architecture, only with XML, and workflow
is an extension of procedural design and the use of flowcharts. At least OO can claim
to be younger than either of those two root technologies.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Personally, I very much doubt the
use of objects as rich behavioral entities will go away any time soon. Sure, for non-interactive
tasks procedural technologies like WF might be better than OO (though that's debatable).
And certainly for connecting disparate systems you need to use loosely coupled architectures,
of which SOA is one (but not the only one). &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But the question remains: how do
you create rich, interactive GUI applications in a productive and yet maintainable
manner?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Putting your logic in a workflow
reduces interactivity. Putting your logic behind a set of services reduces both interactivity
and performance. Putting your logic in the UI is "VB3 programming". So what's left?
For interactive apps you need a business layer that can run as close to the user as
possible and using business objects is a particularly good way to do exactly that.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Neither WF nor WCF/SOA are, to me,
competitors to CSLA. Rather, I see them as entirely complimentary.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Perhaps ADO.NET EF and/or LINQ are
competitors - that depends on what they look like as they stabilize over the next
several months. Everything I’ve seen thus far leads me to believe these technologies
are complimentary as well. (And Scott Guthrie agrees – check out his &lt;/font&gt;&lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=208"&gt;&lt;font face="Times New Roman" color=#800080 size=3&gt;recent
interview on DNR&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;) Neither
of them addresses the issues around support for data binding, or centralization of
business logic in a formal business layer.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But when it comes to SOA I still
think it is a “fad”. It is either MTS done over with XML - which is what 95% of the
people out there are doing with "services", or it is EDI/EAI with XML - which is a
good thing and a move forward, but which is too complex and has too much overhead
for use in a typical application. I think that most likely in 5-10 years we'll have
a new acronym for it – just adding to the EDI/EAI/SOA list.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Just like "outsourcing" became ASP
which became SaaS. The idea doesn't die, it just gets renamed so more money can be
made by selling the same stuff over again - often to people who really don't need/want
it.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The point is, our industry is cyclical.
And we're heading toward into a period where "procedural programming" is once again
reaching a peak of usage. This time under the names SOA and workflow. But if you step
back from the hype and look at it, what's proposed is that we create a bunch of standalone
code blocks that exchange formatted data. A set of procedures that exchange parameters.
Dress it up how you like, that's what is being proposed by both the SOA and WF crowds.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And there's nothing wrong with that.
Procedural design is well understood. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And it could actually work this
time around if we don't cheat. I still maintain that the reason procedural programming
"failed" was because we cheated and used common blocks and global variables. Why?
Because it was too inefficient and required too much code to formally package up all
the data and send it as parameters.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If we can stomach the efficiency
and coding costs this time around - packing the data into XML messages - then I see
no reason why we can't make procedural programming work in many cases. And by naming
it something trendy, like SOA and/or workflow, we can avoid the negative backlash
that would almost certainly occur if people realized they were abandoning OO to return
to procedural programming.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Having spent the first third of
my career doing procedural programming, I wouldn't necessarily mind going back. In
some ways it really was easier than using objects - though there are some very ugly
traps that people will have to rediscover again on this go-round. Most notably the
trap that a procedure can't be reused without introducing fragility into the system,
not due to syntactic coupling or API changes, but due to semantic coupling (&lt;/font&gt;&lt;a href="http://www.lhotka.net/weblog/SemanticCouplingTheElephantInTheSOARoom.aspx"&gt;&lt;font face="Times New Roman" size=3&gt;about
which I've blogged&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;This is true for procedures and
any other "reusable" code block like a workflow activity or a service. They all suffer
the same limitation - and it is one that neither WSDL nor compilers can help solve...&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Anyway, kind of went on a rant here
- but I find it amusing that, in some circles at least, OO is viewed as the "legacy"
technology in the face of services or workflow, which are even &lt;i style="mso-bidi-font-style: normal"&gt;more&lt;/i&gt; legacy
than OO ;)&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=b0f39c62-4544-4924-9856-d54535af2736" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,b0f39c62-4544-4924-9856-d54535af2736.aspx</comments>
      <category>Architecture</category>
      <category>CSLA .NET</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=9e42b0c9-6980-449f-bf65-18d43281ef12</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,9e42b0c9-6980-449f-bf65-18d43281ef12.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,9e42b0c9-6980-449f-bf65-18d43281ef12.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=9e42b0c9-6980-449f-bf65-18d43281ef12</wfw:commentRss>
      <title>Semantic coupling: the elephant in the SOA room</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,9e42b0c9-6980-449f-bf65-18d43281ef12.aspx</guid>
      <link>http://www.lhotka.net/weblog/SemanticCouplingTheElephantInTheSOARoom.aspx</link>
      <pubDate>Mon, 09 Oct 2006 23:07:08 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;For better or worse, SOA (service-oriented
architecture) continues to be the current industry fad. As SOA continues along the
“hype curve” (a term I’m borrowing from Gartner), more and more people are starting
to realize that SOA isn’t a silver bullet, and that it doesn’t actually replace n-tier
client/server or object-orientation.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What will most likely happen over
the next couple years, is that SOA will fall into the “pit of disillusionment” (part
of the hype curve, that I think of as the “pit of despair”), and many people will
decide, as a result, that it is totally useless. This will happen, not in small part,
because some organizations are investing &lt;i style="mso-bidi-font-style: normal"&gt;way&lt;/i&gt; too
much money into SOA now, when it is overly hyped – and they’ll feel betrayed when
“reality” sets in.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;After a period of disrepute, SOA
may then rise to a “plateau of productivity”, where it will finally be used to solve
the problems it is actually good at solving.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Some technologies don’t live through
the “despair” part of the process. Sometimes the harsh light of reality is too bright,
and the technology can’t hold up. Other times, a competing technology or concept hits
the top of &lt;i style="mso-bidi-font-style: normal"&gt;its&lt;/i&gt; hype curve, derailing a
previous technology. Over the next very few years, we’ll see if SOA holds up to the
despair or not.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;This is a pattern Gartner has observed
for virtually all technologies over many, many years. If you think about any technology
introduced over the past 20 years or more, almost all of them have following this
pattern: over-hyping, over-reacting-to-reality and finally used-as-a-real-solution.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;My colleague and mentor, David Chappell, &lt;/font&gt;&lt;a href="http://www.davidchappell.com/HTML_email/Opinari_No16_8_06.html"&gt;&lt;font face="Times New Roman" size=3&gt;recently
blogged&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; about some of
the realities people are discovering as they actually move beyond the hype and try
to apply SOA. It turns out, not surprisingly, that achieving real benefits in terms
of reuse is &lt;i style="mso-bidi-font-style: normal"&gt;much&lt;/i&gt; harder than the SOA evangelists
would have anyone believe.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I think this is because SOA focuses
on only one part of the problem: syntactic coupling. SOA, or at least service-oriented
design and programming, is very much centered around rules for addressing and binding
to services, and around clear definition of syntactic contracts for the API and message
data sent to and from services.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And that’s all good! Minimizing
coupling at the syntactic level is absolutely critical, and SOA has moved us forward
in this space, picking up where EAI (enterprise application integration) left off
in the 90’s.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Unfortunately, syntactic coupling
is the easy part. &lt;i style="mso-bidi-font-style: normal"&gt;Semantic coupling&lt;/i&gt; is
the harder part of the problem, and SOA does little or nothing to address this challenging
issue.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Semantic coupling refers to the
behavioral dependencies between components or services. There’s actual &lt;i style="mso-bidi-font-style: normal"&gt;meaning&lt;/i&gt; to
the interaction between a consumer and a service.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Every service implements some tangible
behavior. A consumer calls the service, thus becoming coupled to that service, at
both a syntactic and semantic level. At the syntactic level, the consumer must use
the address, binding and contract defined by the service – all of which are forms
of coupling. But the consumer also expects some specific behavior from the service
– which is a form of semantic coupling.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And this is where things get very
complex. The broader the expected behavior, the tighter the coupling. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;As an example, a service that does
something trivial, like adding two numbers, is relatively easy to replace with an
equivalent. Such a service can even be enhanced to support other numeric data types
with virtually no chance of breaking existing consumers. So the semantic coupling
between a consumer and such a service is relatively light.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Another example is credit card verification.
Obviously the internal implementation of this behavior is much more complex, but the &lt;i style="mso-bidi-font-style: normal"&gt;external&lt;/i&gt; expectations
of behavior remain very limited. Like adding two numbers, verifying a credit card
is a behavior that accepts very little data, and returns a very simple result (yes/no).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Contrast this with many other possible
business services, such as shipping an order, or generating manufacturing documentation.
In these (quite common) scenarios, the service performs, or is expected to perform,
a relatively broad set of behaviors. The result is a whole group of effects and side-effects
– all of which &lt;i style="mso-bidi-font-style: normal"&gt;should be&lt;/i&gt; considered as
black-box effects by any caller. But the more a service does, the less “black-box”
it can be to its callers, and the tighter the coupling.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And this leaves us in a serious
quandary. There’s a high cost to calling a service. There’s a lot of overhead to creating
a message, serializing it into text (XML), routing it through some communications
stack onto the wire, getting the electrons across the wire through some protocol (probably
TCP) and all the attendant hardware involved, picking it up off the wire on the server,
routing it through another communications stack, deserializing the text (XML) back
into a meaningful message and finally interpreting the message. Only then can the
service actually &lt;i style="mso-bidi-font-style: normal"&gt;act&lt;/i&gt; on the message to
do real work.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Worse, that’s only half the story,
because most people are creating synchronous request/response services, and so that
whole overhead cost must be paid &lt;i style="mso-bidi-font-style: normal"&gt;again&lt;/i&gt; to
get the result back to the caller!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Before going further, let me expand
on this “overhead cost” concept to be more precise.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I worked for many years in manufacturing.
In that industry there’s the concept of cost accounting – people make their living
at tracking costs. They divide costs into overhead, setup and run (there are other
models, but this one’s pretty standard). &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To make this somewhat more clear,
I’ll use the metaphor of baking cookies.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Overhead cost are all the salaried
people, the buildings, equipment and so forth. Costs that are paid whether widgets
are manufactured or not. When baking cookies, this is the cost of having a kitchen,
a stove, electricity, natural gas, and of course the person doing the baking. In most
homes these costs exist regardless of whether cookies are baked or not.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Setup costs are &lt;i style="mso-bidi-font-style: normal"&gt;applied
overhead&lt;/i&gt;. They are costs that are required to build a set of widgets, but they
are only incurred when widgets are being manufactured. These costs include setting
up machines, programming devices, getting organized, printing documents, etc. When
baking cookies, this is the cost (in terms of time) of getting out the various ingredients,
bowls, spoons and other implements. It is also the cost of cleaning up after the baking
is done – all the washing, drying and putting-away-of-implements that follows. These
costs are directly applied to the process, but are pretty much the same whether you
bake one dozen or ten dozen cookies.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Run costs are those costs that are
incurred on a per-widget basis to make a widget. This includes the hourly rate of
the workers manning the assembly line, the materials that go into the widget and so
forth. When baking cookies, this is the time spent by the baker, the cost of the flour,
eggs and other ingredients consumed in the process. Ideally it would include the amount
of electricity or natural gas used to run the stove as well. Obviously detailed run
costs can be hard to determine in some cases!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;When calculating the cost of your
cookies, each of these three costs is added together. The run rate is easy, as it
is per-cookie by definition. The setup rate is variable – the more cookies you make
in a batch the lower the relative setup cost, and the fewer cookies the higher the
relative setup cost. Overhead is typically aggregated – the annual overhead cost is
known, and is divided by the number of cookies (and other things) made over a year’s
time. Obviously there’s lots of wiggle room in this last number.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;For my purposes, in discussing services,
the overhead rate isn’t all that meaningful. In our industry this is the cost of the
IT staff, the servers, the server room, electricity and cooling and so forth.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But the setup rate and run rate
become &lt;i style="mso-bidi-font-style: normal"&gt;very&lt;/i&gt; meaningful when talking about
services.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Calling a service, as I noted earlier,
incurs a lot of overhead. This overhead is relatively constant: you pay about the
same whether you send 1 byte or 1024 bytes to or from the service.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The run rate is the actual work
done by the service. Once the message is parsed and available to the service, then
the service does real, valuable work. This is the run rate for the service.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In manufacturing it is always important
to manage the overhead and setup costs – they are a “pure cost”. The run rate cost
must also be managed, but it is directly applicable to a product, and so that cost
can be factored into the price you charge. Perhaps more importantly, your competitors
typically have a comparable run rate (materials and labor cost about the same), but
the overhead can vary radically.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To switch industries just a bit,
this is why Walmart does so well (and is so feared). They have managed their overhead
and setup costs to such a degree that they actually do focus on reducing their run
rate (in their case, the per-unit acquisition cost of items).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Coming back to services, we face
the same issue. Typically we deal with this using intuition rather than thinking it
through, but the core problem is very tangible.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Would you call a service to add
two numbers? Of course not! The setup/overhead cost would outweigh the run cost to
such a degree that this makes no sense at all.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Would you call a service to ship
an order, with all the surrounding activities that implies? This makes much more sense.
The setup/overhead cost becomes trivial when compared to the run cost for such a service.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And yet coupling has the opposite
effect. Which of those services can be more loosely coupled? The addition service
of course, because it performs a very narrow, discrete, composable behavior. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Do you even &lt;i style="mso-bidi-font-style: normal"&gt;know&lt;/i&gt; what
the ship-an-order service might do? Of course not, it is too big and vague. Will it
trigger invoicing? Will it contact the customer? Will it print pick lists for inventory?
Will it update the customer’s sales history?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I would &lt;i style="mso-bidi-font-style: normal"&gt;hope&lt;/i&gt; it
does all these things, but very few of us would be willing to blindly &lt;i style="mso-bidi-font-style: normal"&gt;assume&lt;/i&gt; it
does them. And so we are forced to treat ship-an-order as something other than a black
box. At best it is gray, but probably downright clear. We’ll &lt;i style="mso-bidi-font-style: normal"&gt;require&lt;/i&gt; that
the service’s actual behaviors be documented. And then we’ll fill in the gaps for
what it does not provide, or doesn’t provide in a way we like.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;(Or, failing to get adequate documentation,
we’ll experiment with the service, probing to find its effects and side-effects and
limitations. And &lt;i style="mso-bidi-font-style: normal"&gt;then&lt;/i&gt; we’ll fill in the
gaps for the bits we don’t like. Sadly, this is the more common scenario…)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;At this point we (the caller of
the service) have become so coupled to the service, that any change to the service
will almost certainly require a change to our code. And at this point we’ve lost the
primary goal/benefit of SOA.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Why? How can this be, when we’re
using all the blessed standards for SOA communication? Maybe we’re even using an Enterprise
Service Bus, or Biztalk Server or whatever the latest cool technology might be. And
yet this coupling occurs!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;This is because I am describing &lt;i style="mso-bidi-font-style: normal"&gt;semantic&lt;/i&gt; coupling.
Yes, all the cool, whiz-bang SOA technologies help solve the syntactic coupling issues.
But without a solution to the semantic, or behavioral, coupling it really doesn’t
get us very far…&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What’s even scarier, is that the
vision of the future portrayed by the SOA evangelists is one where we build services
(systems) that aggregate other services together to provide higher-level functionality.
Like assembling simple blocks into more complex creations, that in turn can be assembled
into more complex creations or used as-is. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Except that each level of aggregation
creates a service that provides broader behaviors – and by extension tighter coupling
to any callers (though the setup vs run costs become more and more favorable at the
top level).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To bring this (rather long) post
to a close, I want to return to the beginning. SOA is heading down the steep slope
into the pit of disillusionment. You can head this off for yourself and your organization
by realizing ahead of time, right now, that SOA only addresses syntactic issues. &lt;i style="mso-bidi-font-style: normal"&gt;You&lt;/i&gt; must
address the much harder semantic issues yourself.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And the tools exist. They have for
a long time. Good procedural design, use of flow charts, data flow diagrams, control
diagrams, state diagrams: these are all very valid tools that can help you manage
the semantic coupling. Unfortunately the majority of people with expertise in these
tools are nearing retirement (or have retired) – but the tools and techniques are
there if you can find some old, dusty books on procedural design. Just remember to
include the setup/overhead cost vs run cost in your decisions on whether to make each
procedure into a "service".&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;SOA solves some serious and important
issues, but it is overhyped. Fortunately the hype is fading, and so we can look forward
(perhaps 18 or 36 months) to a time when we can, with any luck, start focusing on
the “next big thing”. Maybe, just maybe, that “big thing” will be some new and interesting
way of addressing semantic coupling.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=9e42b0c9-6980-449f-bf65-18d43281ef12" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,9e42b0c9-6980-449f-bf65-18d43281ef12.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=07051623-cf59-4ab2-a8f6-e26e4da7d3be</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,07051623-cf59-4ab2-a8f6-e26e4da7d3be.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,07051623-cf59-4ab2-a8f6-e26e4da7d3be.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=07051623-cf59-4ab2-a8f6-e26e4da7d3be</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Somebody woke up on the wrong side of the bed, fortunately it wasn't me this time
:)
</p>
        <p>
This is a <a href="http://www.from9till2.com/PermaLink.aspx?guid=14484a2c-db58-4322-910a-3297e4be9d84">nice
little rant</a> about the limitations of OO-as-a-religion. I think you could substitute
any of the following for OO and the core of the rant would remain quite valid:
</p>
        <ul>
          <li>
procedural programming/design</li>
          <li>
modular programming/design</li>
          <li>
SOA/SO/service-orientation</li>
          <li>
Java</li>
          <li>
.NET</li>
        </ul>
        <p>
Every concept computer science has developed over the past many decades came into
being to solve a problem. And for the most part each concept did address some or all
of that problem. Procedures provided reuse. Modules provided encapsulation. Client/server
provided scalability. And so on...
</p>
        <p>
The thing is, that <em>very</em> few of these new concepts actually obsolete any previous
concepts. For instance, OO doesn't elminate the value of procedural reuse. In fact,
using the two in concert is typically the best of both worlds. 
</p>
        <p>
Similarly, SO is a case where a couple ideas ran into each other while riding bicycle.
"You got messaging in my client/server!" "No! You got client/server in my messaging!"
"Hey! This tastes pretty good!" SO is good stuff, but doesn't replace client/server,
messaging, OO, procedural design or any of the previous concepts. It merely provides
an interesting lense through which we can view these pre-existing concepts, and perhaps
some new ways to apply them.
</p>
        <p>
Anyway, I enjoyed the rant, even though I remain a staunch believer in the power
of OO.
</p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=07051623-cf59-4ab2-a8f6-e26e4da7d3be" />
      </body>
      <title>An (accurate) rant on OO</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,07051623-cf59-4ab2-a8f6-e26e4da7d3be.aspx</guid>
      <link>http://www.lhotka.net/weblog/AnAccurateRantOnOO.aspx</link>
      <pubDate>Mon, 13 Mar 2006 17:44:39 GMT</pubDate>
      <description>&lt;p&gt;
Somebody woke up on the wrong side of the bed, fortunately it wasn't me this time
:)
&lt;/p&gt;
&lt;p&gt;
This is a &lt;a href="http://www.from9till2.com/PermaLink.aspx?guid=14484a2c-db58-4322-910a-3297e4be9d84"&gt;nice
little rant&lt;/a&gt; about the limitations of OO-as-a-religion. I think you could substitute
any of the following for OO and the core of the rant would remain quite&amp;nbsp;valid:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
procedural programming/design&lt;/li&gt;
&lt;li&gt;
modular programming/design&lt;/li&gt;
&lt;li&gt;
SOA/SO/service-orientation&lt;/li&gt;
&lt;li&gt;
Java&lt;/li&gt;
&lt;li&gt;
.NET&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Every concept computer science has developed over the past many decades came into
being to solve a problem. And for the most part each concept did address some or all
of that problem. Procedures provided reuse. Modules provided encapsulation. Client/server
provided scalability. And so on...
&lt;/p&gt;
&lt;p&gt;
The thing is, that &lt;em&gt;very&lt;/em&gt; few of these new concepts actually obsolete any previous
concepts. For instance, OO doesn't elminate the value of procedural reuse. In fact,
using the two in concert is typically the best of both worlds. 
&lt;/p&gt;
&lt;p&gt;
Similarly, SO is a case where a couple ideas ran into each other while riding bicycle.
"You got messaging in my client/server!" "No! You got client/server in my messaging!"
"Hey! This tastes pretty good!" SO is good stuff, but doesn't replace client/server,
messaging, OO, procedural design or any of the previous concepts. It merely provides
an interesting lense through which we can view these pre-existing concepts, and perhaps
some new ways to apply them.
&lt;/p&gt;
&lt;p&gt;
Anyway, I enjoyed the rant, even though I remain a&amp;nbsp;staunch believer in the power
of OO.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=07051623-cf59-4ab2-a8f6-e26e4da7d3be" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,07051623-cf59-4ab2-a8f6-e26e4da7d3be.aspx</comments>
      <category>Architecture</category>
      <category>Distributed OO</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=9f3332c1-8c4d-4263-831a-1d70f6cf351d</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,9f3332c1-8c4d-4263-831a-1d70f6cf351d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,9f3332c1-8c4d-4263-831a-1d70f6cf351d.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=9f3332c1-8c4d-4263-831a-1d70f6cf351d</wfw:commentRss>
      <title>“Distributed Objects” are bad?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,9f3332c1-8c4d-4263-831a-1d70f6cf351d.aspx</guid>
      <link>http://www.lhotka.net/weblog/DistributedObjectsAreBad.aspx</link>
      <pubDate>Fri, 05 Aug 2005 15:12:29 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;a href="http://www.neward.net/ted/weblog/index.jsp?date=20050727#1122529218328"&gt;&lt;font face="Times New Roman" size=3&gt;Ted
Neward&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; believes that
“distributed objects” are, and always have been, a bad idea, and &lt;/font&gt;&lt;a href="http://pluralsight.com/blogs/johncj/archive/2005/08/04/13855.aspx"&gt;&lt;font face="Times New Roman" size=3&gt;John
Cavnar-Johnson&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; tends
to agree with him.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I also agree. "Distributed objects"
are bad.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Shocked? You shouldn’t be. The term
“distributed objects” is most commonly used to refer to one particular type of n-tier
implementation: the thin client model.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I discussed this model in a &lt;/font&gt;&lt;a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=3a057149-f30a-4350-976b-2c4627e6b8f5"&gt;&lt;font face="Times New Roman" size=3&gt;previous
post&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;, and you’ll note
that I didn’t paint it in an overly favorable light. That’s because the model is a
very poor one.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The idea of building a true object-oriented
model on a server, where the objects never leave that server is absurd. The Presentation
layer still needs all the data so it can be shown to the user and so the user can
interact with it in some manner. This means that the “objects” in the middle must
convert themselves into raw data for use by the Presentation layer.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And of course the Presentation layer
needs to do something with the data. The &lt;i style="mso-bidi-font-style: normal"&gt;ideal&lt;/i&gt; is
that the Presentation layer has no logic at all, that it is just a pass-through between
the user and the business objects. But the reality is that the Presentation layer
ends up with some logic as well – if only to give the user a half-way decent experience.
So the Presentation layer often needs to convert the raw data into some useful data
structures or objects.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The end result with “distributed
objects” is that there’s typically duplicated business logic (at least validation)
between the Presentation and Business layers. The Presentation layer is also unnecessarily
complicated by the need to put the data into some useful structure. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And the Business layer is complicated
as well. Think about it. Your typical OO model includes a set of objects designed
using OOD sitting on top of an ORM (object-relational mapping) layer. I typically
call this the Data Access layer. That Data Access layer then interacts with the real
Data layer.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But in a “distributed object” model,
there’s the need to convert the objects’ data back into raw data – often quasi-relational
or hierarchical – so it can be transferred efficiently to the Presentation layer.
This is really a whole new logical layer very akin to the ORM layer, except that it
maps between the Presentation layer’s data structures and the objects rather than
between the Data layer’s structures and the objects.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What a mess!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Ted is absolutely right when he
suggests that “distributed objects” should be discarded. If you are really stuck on
having your business logic “centralized” on a server then service-orientation is a
better approach. Using formalized message-based communication between the client application
and your service-oriented (hence procedural, not object-oriented) server application
is a better answer.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Note that the terminology changed
radically! Now you are no longer building &lt;i style="mso-bidi-font-style: normal"&gt;one&lt;/i&gt; application,
but rather you are building at least &lt;i style="mso-bidi-font-style: normal"&gt;two&lt;/i&gt; applications
that happen to interact via messages. Your server doesn't pretend to be object-oriented,
but rather is service-oriented - which is a code phrase for procedural programming.
This is a totally different mindset from “distributed objects”, but it is far better.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Of course another model is to use &lt;i style="mso-bidi-font-style: normal"&gt;mobile
objects&lt;/i&gt; or &lt;i style="mso-bidi-font-style: normal"&gt;mobile agents&lt;/i&gt;. This is the
model promoted in my Business Objects books and enabled by CSLA .NET. In the mobile
object model your Business layer exists on both the client machine (or web server)
and application server. The objects physically move between the two machines – running
on the client when user interaction is required and running on the application server
to interact with the database.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The mobile object model allows you
to continue to build a single application (rather than 2+ applications with SO), but
overcomes the nasty limitations of the “distributed object” model.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=9f3332c1-8c4d-4263-831a-1d70f6cf351d" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,9f3332c1-8c4d-4263-831a-1d70f6cf351d.aspx</comments>
      <category>Architecture</category>
      <category>Distributed OO</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=68eeae2e-e08b-4e8a-a4cd-0b9deb61ed37</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,68eeae2e-e08b-4e8a-a4cd-0b9deb61ed37.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,68eeae2e-e08b-4e8a-a4cd-0b9deb61ed37.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=68eeae2e-e08b-4e8a-a4cd-0b9deb61ed37</wfw:commentRss>
      <title>Some Service-Oriented Design thought</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,68eeae2e-e08b-4e8a-a4cd-0b9deb61ed37.aspx</guid>
      <link>http://www.lhotka.net/weblog/SomeServiceOrientedDesignThought.aspx</link>
      <pubDate>Tue, 24 May 2005 15:02:10 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;It is clear to
me that Service Oriented &lt;em&gt;&lt;span style="FONT-FAMILY: Verdana"&gt;Architecture &lt;/span&gt;&lt;/em&gt;has
gone about as far as it can go in a vacuum. And Service Oriented &lt;i style="mso-bidi-font-style: normal"&gt;Programming&lt;/i&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt; continues
to evolve somewhat randomly as vendors and/or standards bodies see fit (WSE, Indigo,
etc).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;So there needs
to be more rigorous thought apply to Service Oriented &lt;i style="mso-bidi-font-style: normal"&gt;Design&lt;/i&gt;.
If we assume the SOA concepts of autonomous entities communicating via contract-defined
messages over negotiated channels. And if we assume we’ll have programming tools that
provide contractual synchronous and asynchronous communication vectors, then we can
move ahead and work on thought models for designing services and systems composed
of services.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Note that there
are two very different aspects here. One is how to create a service, the other is
now to build systems where services interact. The inside view and the outside view.
And the rules and concepts are very different for each.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;In that vein,
here's a good/interesting &lt;a href="http://blogs.msdn.com/richardt/archive/2005/05/20/420650.aspx"&gt;article
on SO design&lt;/a&gt; from Rich Turner at Microsoft. He’s taking the inside view and discussing
some high-level design concepts for how you might build an autonomous service that
still requires other services to function. He’s proposing a couple thought models
that might be useful in design efforts – exactly the kind of dialog that is required
to move SOD forward.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Personally I think
that a number of the object-oriented design concepts behind CRC cards (class, responsibility,
collaboration) apply equally well to services. In such a scheme, Rich’s relationships
(constellation or fractal) would be listed as collaborators from a service.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;I’m convinced
that at least the first side of a CRC card, where the class (now service), responsibility
and list of collaborators (other services) are a good design tool for services. Some
of the other sides (like the list of behaviors) aren’t so useful, since a service
is an atomic procedure and thus by definition has exactly one behavior. Still, applying
those parts of CRC that do work is very helpful.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=68eeae2e-e08b-4e8a-a4cd-0b9deb61ed37" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,68eeae2e-e08b-4e8a-a4cd-0b9deb61ed37.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=095e4c00-8c98-41fd-83e4-72df746cedab</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,095e4c00-8c98-41fd-83e4-72df746cedab.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,095e4c00-8c98-41fd-83e4-72df746cedab.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=095e4c00-8c98-41fd-83e4-72df746cedab</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I try not to do too much simple link-fowarding,
but this is a very <a href="http://www.from9till2.com/PermaLink.aspx?guid=2354684e-5c70-4e69-b711-5097be3b57af">good,
clear article</a> on SOA.<img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=095e4c00-8c98-41fd-83e4-72df746cedab" /></body>
      <title>Good SOA article</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,095e4c00-8c98-41fd-83e4-72df746cedab.aspx</guid>
      <link>http://www.lhotka.net/weblog/GoodSOAArticle.aspx</link>
      <pubDate>Mon, 09 May 2005 00:45:51 GMT</pubDate>
      <description>I try not to do too much simple link-fowarding, but this is a very &lt;a href="http://www.from9till2.com/PermaLink.aspx?guid=2354684e-5c70-4e69-b711-5097be3b57af"&gt;good,
clear article&lt;/a&gt; on SOA.&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=095e4c00-8c98-41fd-83e4-72df746cedab" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,095e4c00-8c98-41fd-83e4-72df746cedab.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=2a5e2d14-3cf5-4cea-a296-24b894228f5d</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,2a5e2d14-3cf5-4cea-a296-24b894228f5d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,2a5e2d14-3cf5-4cea-a296-24b894228f5d.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=2a5e2d14-3cf5-4cea-a296-24b894228f5d</wfw:commentRss>
      <title>Message-based WebMethod "overloading"</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,2a5e2d14-3cf5-4cea-a296-24b894228f5d.aspx</guid>
      <link>http://www.lhotka.net/weblog/MessagebasedWebMethodOverloading.aspx</link>
      <pubDate>Tue, 03 May 2005 16:15:53 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;Over
the past few weeks I've given a number of presentations on service-oriented design
and how it relates to both OO and n-tier models. One constant theme has been my recommendation
that service methods use a request/response or just request method signature:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;= &lt;em&gt;&lt;span style="FONT-FAMILY: Verdana"&gt;f&lt;/span&gt;&lt;/em&gt;(request)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;or&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;em&gt;&lt;span style="FONT-FAMILY: Verdana"&gt;f&lt;/span&gt;&lt;/em&gt;(request)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;"request" and
"response" are both messages, defined by a type or schema (with a little "s", not
necessarily XSD).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;The actual procedure, &lt;em&gt;&lt;span style="FONT-FAMILY: Verdana"&gt;f&lt;/span&gt;&lt;/em&gt;,
is then implemented as a &lt;a href="http://patternshare.org/default.aspx/Home.HW.MessageRouter"&gt;Message
Router&lt;/a&gt;, routing each call to an appropriate handler method depending on the specific
type of the request message.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;In concept this
is an ideal model, as it helps address numerous issues around decoupling the client
and service, and around versioning of a service over time. I discussed many of these
issues in my article on &lt;a href="http://www.theserverside.net/articles/showarticle.tss?id=SOAVersioningCovenant"&gt;SOA
Covenants&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Of course the
devil is in the details, or in this case the implementation. Today's web service technologies
don't make it particularly easy to attach multiple schemas to a given parameter -
which we must do to the "request" parameter in order to allow our single endpoint
to accept multiple request messages.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;One answer is
to manually create the XSD and/or WSDL. Personally I find that answer impractical.
Angle-brackets weren't meant for human creation or consumption, and programmers shouldn't
have to see (much less type) things like XSD or WSDL.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Fortunately there's
another answer. In &lt;a href="http://www.srtsolutions.com/public/item/91025"&gt;this blog
entry&lt;/a&gt;, Microsoft technology expert Bill Wagner shows how to implement "method
overloading" in asmx using C# to do the heavy lifting. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;While the outcome
isn't totally seamless or perfect, it is pretty darn good. In my mind Bill's answer
is a decent compromise between getting the functionality we need, and avoiding the
manual creation of cryptic WSDL artifacts.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;The end result
is that it is totally possible to construct flexible, maintainable and broadly useful
web services using VB.NET or C#. Web services that follow a purely message-based approach,
implement a message router on the server and thus provide a good story for both versioning
and multiple message format stories.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Indigo, btw, offers
a similar solution to what Bill talks about. In the Indigo situation however, it appears
that we’ll have more fine-grained control over the generation of the public schema
through the use of the DataContract idea, combined with inheritance in our VB or C#
code.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=2a5e2d14-3cf5-4cea-a296-24b894228f5d" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,2a5e2d14-3cf5-4cea-a296-24b894228f5d.aspx</comments>
      <category>Service-Oriented</category>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=7849bd66-21b9-4731-9a22-1d617f0f9455</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,7849bd66-21b9-4731-9a22-1d617f0f9455.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,7849bd66-21b9-4731-9a22-1d617f0f9455.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=7849bd66-21b9-4731-9a22-1d617f0f9455</wfw:commentRss>
      <title>Is Indigo compelling or boring?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,7849bd66-21b9-4731-9a22-1d617f0f9455.aspx</guid>
      <link>http://www.lhotka.net/weblog/IsIndigoCompellingOrBoring.aspx</link>
      <pubDate>Tue, 19 Apr 2005 04:13:06 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Indigo is Microsoft’s code name
for the technology that will bring together the functionality in today’s .NET Remoting,
Enterprise Services, Web services (including WSE) and MSMQ. Of course knowing what
it is doesn’t necessarily tell us whether it is cool, compelling and exciting … or
rather boring.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Ultimately beauty is in the eye
of the beholder. Certainly the Indigo team feels a great deal of pride in their work
and they paint this as a very big and compelling technology.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Many technology experts I’ve talked
to outside of Microsoft are less convinced that it is worth getting all excited.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Personally, I must confess that
I find Indigo to be a bit frustrating. While it should provide some absolutely critical
benefits, in my view it is merely laying the groundwork for the potential of something
actually exciting to follow a few years later.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Why do I say this?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Well, consider what Indigo is again.
It is a technology that brings together a set of existing technologies. It provides
a unified API model on top of a bunch of concepts and tools we already have. To put
it another way, it lets us do what we can already do, but in a slightly more standardized
manner.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If you are a WSE user, Indigo will
save you &lt;i style="mso-bidi-font-style: normal"&gt;tons&lt;/i&gt; of code. But that’s because
WSE is experimental stuff and isn’t refined to the degree Remoting, Enterprise Services
or Web services are. If you are using any of those technologies, Indigo won’t save
you much (if any) code – it will just subtly alter the way you do the things you already
do.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Looking at it this way, it doesn’t
sound all that compelling really does it?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But consider this. Today’s technologies
are a mess. We have at least five different technologies for distributed communication
(Remoting, ES, Web services, MSMQ and WSE). Each technology shines in different ways,
so each is appropriate in different scenarios. This means that to be a competent .NET
architect/designer you must know all five reasonably well. You need to know the strengths
and weaknesses of each, and you must know how easy or hard they are to use and to
potentially extend. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Worse, you can’t expect to easily
switch between them. Several of these options are mutually exclusive.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But the final straw (in my mind)
is this: the technology you pick locks you into a single architectural world-view.
If you pick Web services or WSE you are accepting the SOA world view. Sure you can
hack around that to do n-tier or client/server, but it is ugly and dangerous. Similarly,
if you pick Enterprise Services you get a nice set of client/server functionality,
but you lose a lot of flexibility. And so forth.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Since the architectural decisions
are so directly and irrevocably tied to the technology, we can’t actually discuss
architecture. We are limited to discussing our systems in terms of the technology
itself, rather than the architectural concepts and goals we’re trying to achieve.
And that is very sad.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;By merging these technologies into
a single API, Indigo may allow us to elevate the level of dialog. Rather than having
inane debates between Web services and Remoting, we can have intelligent discussions
about the pros and cons of n-tier vs SOA. We can apply rational thought as to how
each distributed architecture concept applies to the various parts of our application.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;We might even find that some parts
of our application are n-tier, while others require SOA concepts. Due to the unified
API, Indigo should allow us to actually do both where appropriate. Without irrational
debates over protocol, since Indigo natively supports concepts for both n-tier and
SOA.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Now &lt;i style="mso-bidi-font-style: normal"&gt;this&lt;/i&gt; is
compelling!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;As compelling as it is to think
that we can start having more intelligent and productive architectural discussions,
that isn’t the whole of it. I am hopeful that Indigo represents the groundwork for
greater things.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;There are a lot of very hard problems
to solve in distributed computing. Unfortunately our underlying communications protocols
never seem to stay in place long enough for anyone to really address the more interesting
problems. Instead, for many years now we’ve just watched as vendors reinvent the concept
of remote procedure calls over and over again: RPC, IIOP, DCOM, RMI, Remoting, Web
services, Indigo.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;That is frustrating. It is frustrating
because we never really move beyond RPC. While there’s no doubt that Indigo is much
easier to use and more clear than any previous RPC scheme, it is also quite true that
Indigo merely lets us do what we could already do.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What I’m hoping (perhaps foolishly)
is that Indigo will be the end. That we’ll finally have an RPC technology that is
stable and flexible enough that it won’t need to be replaced so rapidly. And being
stable and flexible, it will allow the pursuit of solutions to the harder problems.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What are those problems? They are
many, and they include semantic meaning of messages and data. They include distributed
synchronization primitives and concepts. They include standardization and simplification
of background processing – making it as easy and natural as synchronous processing
is today. They include identity and security issues, management of long-running processes,
simplification of compensating transactions and many other issues.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Maybe Indigo represents the platform
on which solutions to these and other problems can finally be built. Perhaps in another
5 years we can look back and say that Indigo was the turning point that finally allowed
us to &lt;i style="mso-bidi-font-style: normal"&gt;really&lt;/i&gt; make distributed computing
a first-class concept.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=7849bd66-21b9-4731-9a22-1d617f0f9455" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,7849bd66-21b9-4731-9a22-1d617f0f9455.aspx</comments>
      <category>Architecture</category>
      <category>Distributed OO</category>
      <category>Microsoft .NET</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=30728540-9979-40e0-970f-250ec93e9c7d</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,30728540-9979-40e0-970f-250ec93e9c7d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,30728540-9979-40e0-970f-250ec93e9c7d.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=30728540-9979-40e0-970f-250ec93e9c7d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div>Just a super-quick entry that I'll hopefully follow up on later. Ted <a href="http://www.neward.net/ted/weblog/index.jsp?date=20050222#1109140047640">wrote
a bunch of stuff</a> on contracts related to Indigo, etc.
</div>
        <div> 
</div>
        <div>I think this is all wrong-headed. The idea of being loosely coupled and the idea
of being bound by a contract are in direct conflict with each other. If your service
only accepts messages conforming to a strict contract (XSD, C#, VB or whatever) then
it is impossible to be loosely coupled. Clients that can't conform to the contract
can't play, and the service can <em>never ever</em> change the contract so it becomes
locked in time.
</div>
        <div> 
</div>
        <div>Contract-based thinking was all the rage with COM, and look where it got us.
Cool things like DoWork(), DoWork2(), DoWorkEx(), DoWorkEx2() and more.
</div>
        <div> 
</div>
        <div>Is this <em>really</em> the future of services? You gotta be kidding!
</div>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=30728540-9979-40e0-970f-250ec93e9c7d" />
      </body>
      <title>Contracts and interop</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,30728540-9979-40e0-970f-250ec93e9c7d.aspx</guid>
      <link>http://www.lhotka.net/weblog/ContractsAndInterop.aspx</link>
      <pubDate>Wed, 23 Feb 2005 21:00:15 GMT</pubDate>
      <description>&lt;div&gt;Just a super-quick entry that I'll hopefully follow up on later. Ted &lt;a href="http://www.neward.net/ted/weblog/index.jsp?date=20050222#1109140047640"&gt;wrote
a bunch of stuff&lt;/a&gt; on contracts related to Indigo, etc.
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;I think this is all wrong-headed. The idea of being loosely coupled and the idea
of being bound by a contract are in direct conflict with each other. If your service
only accepts messages conforming to a strict contract (XSD, C#, VB or whatever) then
it is impossible to be loosely coupled. Clients that can't conform to the contract
can't play, and the service can &lt;em&gt;never ever&lt;/em&gt; change the contract so it becomes
locked in time.
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;Contract-based thinking was all the rage with COM, and look where it got us.
Cool things like DoWork(), DoWork2(), DoWorkEx(), DoWorkEx2() and more.
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;Is this &lt;em&gt;really&lt;/em&gt; the future of services? You gotta be kidding!
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=30728540-9979-40e0-970f-250ec93e9c7d" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,30728540-9979-40e0-970f-250ec93e9c7d.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=6a336ce6-2c07-4283-b208-e2cee1c250f9</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,6a336ce6-2c07-4283-b208-e2cee1c250f9.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,6a336ce6-2c07-4283-b208-e2cee1c250f9.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=6a336ce6-2c07-4283-b208-e2cee1c250f9</wfw:commentRss>
      <title>Indigo: the future of asmx/wse/es/msmq/remoting</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,6a336ce6-2c07-4283-b208-e2cee1c250f9.aspx</guid>
      <link>http://www.lhotka.net/weblog/IndigoTheFutureOfAsmxwseesmsmqremoting.aspx</link>
      <pubDate>Tue, 08 Feb 2005 18:35:52 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;I
just finished watching Eric Rudder’s keynote on Indigo at VS Live in 
&lt;st1:City w:st="on"&gt;
&lt;st1:place w:st="on"&gt;San Francisco&lt;/st1:place&gt;
&lt;/st1:City&gt;
. As with all keynotes, it had glitz and glamour and gave a high-level view of what
Microsoft is thinking.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;(for those who don’t know, Eric
is the Microsoft VP in charge of developer-related stuff including Indigo)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Among the various things discussed
was the migration roadmap from today’s communication technologies to Indigo. I thought
it was instructive.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;From asmx web services the proposed
changes are minor. Just a couple lines of code change and away you go. Very nice.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;From WSE to Indigo is harder, since
you end up removing lots of WSE code and replacing it with an attribute or two. The
end result is nice because your code is much shorter, but it is more work to migrate.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;From Enterprise Services (COM+,
ServicedComponent) the changes are minor – just a couple lines of changed code. But
the &lt;i style="mso-bidi-font-style: normal"&gt;semantic&lt;/i&gt; differences are substantial
because you can now mark methods as transactional rather than the whole class. Very
nice!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;From System.Messaging (MSMQ) to
Indigo the changes are comparable in scope to the WSE change. You remove lots of code
and replace it with an attribute or two. Again the results are very nice because you
save lots of code, but the migration involves some work.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;From .NET Remoting to Indigo the
changes are comparable to the asmx migration. Only a couple lines of code need to
change and away you go. This does assume you listened to advice from people like Ingo
Rammer, Richard Turner and myself and avoided creating custom sinks, custom formatters
or custom channels. If you ignored all this good advice then you’ll get what you deserve
I guess :-)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;As Eric pointed out however, Indigo
is designed for the loosely coupled web service/SOA mindset, not necessarily for the
more tightly coupled n-tier client/server mindset. He suggested that many users of
Remoting may not migrate to Indigo – directly implying that Remoting may remain the
better n-tier client/server technology.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I doubt he is right. Regardless
of what Indigo is designed for, it is clear to me that it offers substantial benefits
to the n-tier client/server world. These benefits include security, reliable messaging,
simplified 2-phase transactions and so forth. The fact that Indigo &lt;i style="mso-bidi-font-style: normal"&gt;can&lt;/i&gt; be
used for n-tier client/server even if it is a bit awkward or not really its target
usage won’t stop people. And from today’s keynote I must say that it looks totally
realistic to (mis)use Indigo for n-tier client/server work.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=6a336ce6-2c07-4283-b208-e2cee1c250f9" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,6a336ce6-2c07-4283-b208-e2cee1c250f9.aspx</comments>
      <category>Distributed OO</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=ad26c4cd-624d-4720-8bcf-d16b4fb03566</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,ad26c4cd-624d-4720-8bcf-d16b4fb03566.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,ad26c4cd-624d-4720-8bcf-d16b4fb03566.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=ad26c4cd-624d-4720-8bcf-d16b4fb03566</wfw:commentRss>
      <title>Can a Service have Tiers?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,ad26c4cd-624d-4720-8bcf-d16b4fb03566.aspx</guid>
      <link>http://www.lhotka.net/weblog/CanAServiceHaveTiers.aspx</link>
      <pubDate>Fri, 04 Feb 2005 05:32:50 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;One last post on SOA from my coffee-buzzed,
Chicago-traffic-addled mind.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Can a Service have Tiers?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Certainly a Service can have layers.
Any good software will have layers. In the case of a Service these layers will likely
be:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;1.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;Interface&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;2.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;Business&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;3.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;Data
access&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;4.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;Data
management&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;This only makes sense. You’ll organize
your message-parsing and XML handling code into the interface layer, which will invoke
the business layer to do actual work. The business layer may invoke the Data access
layer to get/save data into the Data management (database) layer.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But layers are &lt;i style="mso-bidi-font-style: normal"&gt;logical&lt;/i&gt; constructs.
They are just a way of organizing code so it is maintainable, readable and reusable.
Layers say nothing about how the code is deployed – that is the realm of tiers.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So the question remains, can a Service
be divided into tiers?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I’ll argue yes.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;You deploy layers onto different
tiers in an effort to get a good trade-off between performance, scalability, fault-tolerance
and security. More tiers mean worse performance, but may result in better scalability
or security.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If I create a service, I may very
well need to deploy it such that I can provide high levels of scalability or security.
To do this, I may need to deploy some of my service’s layers onto different tiers.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;This is no different – absolutely
no different – than what we do with web applications. This shouldn’t be a surprise,
since a web service is nothing more than a web application that spits out XML instead
of HTML. It seems pretty obvious that the rules are the same.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And there are cases where a web
application needs to have tiers to scale or to be secure. It follows then that the
same is true for web services.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Thus, services can be deployed into
multiple tiers.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Yet the SOA purists would argue
that any tier boundary should really be a service boundary. And this is where things
get nuts. Because a service boundary implies lack of trust, while a layer boundary
implies complete trust. Tiers are merely deployments of layers, so tiers imply complete
trust too.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;(By trust here I am not talking
about security – I’m talking about data trust. A service must treat any caller – even
another service – as an untrusted entity. It must assume that any inbound data breaks
rules. If a service &lt;i style="mso-bidi-font-style: normal"&gt;does&lt;/i&gt; extend trust then
it instantly becomes unmaintainable in the long run and you just gave up the primary
benefit of SOA.)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So if a tier is really a service
boundary, then we’re saying that we have multiple services, one calling the next.
But services pretty much always have those four layers I mentioned earlier, so now
each “was-tier-now-is-service” will have those layers.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Obviously this is a lot more code
to write, and a lot of overhead, since the lower-level service (that would have been
a tier) can’t trust the higher level one and must replicate much of its validation
and possibly other business logic.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To me, at this point, it is patently
obvious that the idea of entirely discarding tiers in favor of services is absurd.
Rather, a far better view is to suggest that services can have tiers – private, trusting
communications between layers, even across the network between the web server hosting
the service interface and the application server hosting the data access code.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And of course this ties right back
into my previous post for today on remoting. Because it is quite realistic to expect
that you’ll use DCOM/ES/COM+ or remoting to do the communication between the web server
and application server for this private communication. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;While DCOM might appear very attractive
(and is in many cases), it is often not ideal if there’s a firewall between the web
server and application server. While it is technically possible to get DCOM to go
through a firewall, I gotta say that this one issue is a major driver for people to
move to remoting or web services.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And web services might be very attractive
(and is in many cases), it is not ideal if you want to use distributed OO concepts
in the implementation of your service.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And there we are back at remoting
once again as being a perfectly viable option.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Of course there’s a whole other
discussion we could have about whether there’s any value to using any OO design concepts
when implementing a service – but that can be a topic for another time.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=ad26c4cd-624d-4720-8bcf-d16b4fb03566" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,ad26c4cd-624d-4720-8bcf-d16b4fb03566.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=18b7f37b-f80a-4fc8-aa67-430e5beb30bd</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,18b7f37b-f80a-4fc8-aa67-430e5beb30bd.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,18b7f37b-f80a-4fc8-aa67-430e5beb30bd.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=18b7f37b-f80a-4fc8-aa67-430e5beb30bd</wfw:commentRss>
      <title>SOA really is just RPC with angle-brackets</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,18b7f37b-f80a-4fc8-aa67-430e5beb30bd.aspx</guid>
      <link>http://www.lhotka.net/weblog/SOAReallyIsJustRPCWithAnglebrackets.aspx</link>
      <pubDate>Fri, 04 Feb 2005 04:59:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;I am afraid that
I'm rapidly becoming more convinced than &lt;a href="http://www.neward.net/ted/weblog/index.jsp?date=20050203#1107473579970"&gt;even
Ted&lt;/a&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt; that
SOA == web services == RPC with angle brackets.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;The more people
I talk to, the more I realize that virtually no one is actually talking about service-oriented
analysis, architecture or design. They are using SOA as a synonym for web services,
and they are using web services as a replacement for DCOM, RMI, remoting or whatever
RPC protocol they used before.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;I think the battle
is lost, if battle there was. The idea of a loosely-coupled, message-based architecture
where autonomous entities interact with each other over policy-based connections is
a really cool idea, but it doesn’t resonate with typical development teams.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;The typical development
team is building line-of-business systems and just needs a high performance, reliable
and feature-rich RPC protocol. Sometimes web services fits that bill, and even if
it doesn’t it is the currently fad so it tends to win by default.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;People are running
around creating web services that do not follow a message-based design. What would
a message-based design look like you ask? Like this:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;font face="Courier New"&gt;result
= procedure(request)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Where ‘procedure’
is the method/procedure name, ‘request’ is the idempotent message containing the request
from the caller and ‘result’ is the idempotent message containing the result of the
procedure.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Then if you want
to be a real purist, you’d make this asynchronous, so the design would actually be:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;font face="Courier New"&gt;procedure(request)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;And any result
message would be returned as a service call from ‘procedure’. But that &lt;i style="mso-bidi-font-style: normal"&gt;really&lt;/i&gt; goes
out of bounds for almost everyone, because then you are truly doing distributed parallel
processing and that’s just plain hard to grok.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;So in our pragmatic
universe, we’re talking about the&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;font face="Courier New"&gt;result
= procedure(request)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;form and that’s
enough. But that isn’t what most people are doing. Most people are creating services
as though they were components. Creating methods/procedures that accept parameters
rather than messages. Stuff like this:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;font face="Courier New"&gt;customerList
= GetCustomerData(firstName As String, lastName As String)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Where ‘customerList’
is a DataSet containing the results of any matches.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;There’s not a
message, idempotent or not, to be found here. This is components-on-the-web. This
is COM-on-the-web or CORBA-on-the-web. This is not SOA, this is just RPC redux.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;And that’s OK.
I have no problem with that necessarily. But since this is the norm, I am pretty much
ready to concede that the “Battle of SOA” is lost. SOA has already become just another
acronym in the long list of RPC acronyms we’ve left behind over the decades.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Too bad really,
because I found the distributed parallel, loosely coupled, message-based concepts
to be extremely interesting and challenging. Hard, and impractical for normal business
development, but really ranking high on the geek-cool chart.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=18b7f37b-f80a-4fc8-aa67-430e5beb30bd" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,18b7f37b-f80a-4fc8-aa67-430e5beb30bd.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=be2ee6b3-9809-4007-93e1-bc0c405a48a2</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,be2ee6b3-9809-4007-93e1-bc0c405a48a2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,be2ee6b3-9809-4007-93e1-bc0c405a48a2.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=be2ee6b3-9809-4007-93e1-bc0c405a48a2</wfw:commentRss>
      <title>Remoting vs Web Services vs ES/COM+/DCOM</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,be2ee6b3-9809-4007-93e1-bc0c405a48a2.aspx</guid>
      <link>http://www.lhotka.net/weblog/RemotingVsWebServicesVsESCOMDCOM.aspx</link>
      <pubDate>Fri, 04 Feb 2005 04:11:20 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I’ve hashed and rehashed this topic
numerous times. In particular, read &lt;/font&gt;&lt;a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=a70aad9c-79fd-45cc-875f-00dfd3dc0fb6"&gt;&lt;font face="Times New Roman" size=3&gt;this&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; and &lt;/font&gt;&lt;a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=69104bf7-4d71-4e8b-b67f-907fc462ff6e"&gt;&lt;font face="Times New Roman" size=3&gt;this&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;.
But the debate rages on, paralyzing otherwise perfectly normal development teams in
a frenzy of analysis paralysis over something that is basically not all that critical
in a good architecture.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I mean really. If you do a decent
job of architecting, it really doesn’t matter a whole hell of a lot which RPC protocol
you use, because you can always switch away to another one when required.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And while web services a pretty
obvious choice for SOA, the reality is that if you are debating between remoting,
web services and DCOM/ES/COM+ then you are looking for an RPC protocol – end of story.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If you were looking to do service-oriented
stuff you’d reject remoting and DCOM/ES/COM+ out of hand because they are closed,
proprietary, limited technologies that just plain don’t fit the SO mindset.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In an effort to summarize to the
finest point possible, I’ll try once again to clarify my view on this topic. In particular,
I am going to focus on why you might use remoting and how to use it if you decide
to. Specifically I am focusing on the scenario where remoting works better than either
of its competitors.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;First, the scenario that remoting
does that web services and ES/COM+/DCOM don’t do (without hacking them):&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;1.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;You
want to pass rich .NET types between AppDomains, Processes or Machines (we’re talking
Hashtables, true business objects, etc.)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;2.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;You
are communicating between layers of an application that are deployed in different
tiers (We’re not talking services here, we’re talking &lt;i style="mso-bidi-font-style: normal"&gt;layers
of a single application&lt;/i&gt;. We’re talking client-server, n-tier, etc.)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;3.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;You
want no-touch deployment on the client&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If you meet the above criteria then
remoting is the best option going today. If you only care about 1 and 2 then ES/COM+/DCOM
is fine – all you lose is no-touch deployment (well, and a few hours/days in configuring
DCOM, but that’s just life :-) ).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If you don’t care about 1 then web
services is fine. In this case you are willing to live within the confines of the
XmlSerializer and should have no pretense of being object-oriented or anything silly
like that. Welcome to the world of data-centric programming. Perfectly acceptable,
but not my personal cup of tea.&amp;nbsp; To be fair, it is possible to hack web services
to handle number 1, and it isn't hard. So if you feel that you must avoid remoting
but need 1, then you aren't totally out of luck.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But in general, assuming you want
to do 1, 2 and 3 then you should use remoting. If so, how should you use remoting?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;1.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;Host
in IIS&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;2.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;Use
the BinaryFormatter&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;3.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;Don’t
create custom sinks or formatters, just use what Microsoft gave you&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;4.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;Feel
free to use SSL if you need a secure line&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .75in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;5.&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;Wrap
your use of the RPC protocol in abstraction objects (like my DataPortal or Fowler’s
Gateway pattern)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Hosting in IIS gives you a well-tested
and robust process model in which your code can run. If it is good enough for &lt;/font&gt;&lt;a href="http://www.microsoft.com/"&gt;&lt;font face="Times New Roman" size=3&gt;www.microsoft.com&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; and &lt;/font&gt;&lt;a href="http://www.msn.com/"&gt;&lt;font face="Times New Roman" size=3&gt;www.msn.com&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; it
sure should be good enough for you.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Using the BinaryFormatter gives
you optimum performance and avoids the to-be-deprecated SoapFormatter.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;By not creating custom sinks or
formatters you are helping ensure that you’ll have a relatively smooth upgrade path
to Indigo. Indigo, after all, wraps in the core functionality of remoting. They aren’t
guaranteeing that internal stuff like custom sinks will upgrade smoothly, but they
have been very clear that Indigo will support distributed OO scenarios like remoting
does today. And that is what we’re talking about here.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If you need a secure link, use SSL.
Sure WSE 2.0 gives you an alternative in the web service space, but there’s no guarantee
it will be compatible with WSE 3.0, much less Indigo. SSL is pretty darn stable comparatively
speaking, and we’ve already covered the fact that web services doesn’t do distributed
OO without some hacking.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Finally, &lt;b style="mso-bidi-font-weight: normal"&gt;regardless
of whether you use remoting, web services or ES/COM+/DCOM&lt;/b&gt; make sure – absolutely
sure – that you wrap your RPC code in an abstraction layer. This is simple good architecture.
Defensive design against a fluid area of technology. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I can’t stress this enough. If your
business or UI code is calling web services, remoting or DCOM directly you are vulnerable
and I would consider your design to be flawed.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;This is why this whole debate is
relatively silly. If you are looking for an n-tier RPC solution, just pick one. Wrap
it in an abstraction layer and be happy. Then when Indigo comes out you can easily
switch. Then when Indigo++ comes out you can easily upgrade. Then when Indigo++# comes
out you are still happy.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=be2ee6b3-9809-4007-93e1-bc0c405a48a2" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,be2ee6b3-9809-4007-93e1-bc0c405a48a2.aspx</comments>
      <category>Distributed OO</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=5ac19dbd-eac1-4546-ba7b-2e5e21c9a328</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,5ac19dbd-eac1-4546-ba7b-2e5e21c9a328.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,5ac19dbd-eac1-4546-ba7b-2e5e21c9a328.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=5ac19dbd-eac1-4546-ba7b-2e5e21c9a328</wfw:commentRss>
      <title>Web services, DataSets and now...Business Objects</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,5ac19dbd-eac1-4546-ba7b-2e5e21c9a328.aspx</guid>
      <link>http://www.lhotka.net/weblog/WebServicesDataSetsAndNowBusinessObjects.aspx</link>
      <pubDate>Mon, 24 Jan 2005 16:10:21 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Sahil has some &lt;a href="http://dotnetjunkies.com/WebLog/sahilmalik/archive/2005/01/23/47832.aspx"&gt;interesting
thoughts&lt;/a&gt; on the web service/DataSet question as well.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;He spends some time discussing whether
“business objects” should be sent via a web service. His definition of “business object”
doesn’t match mine, and is closer to Fowler’s data transfer object (DTO) I think.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;It is important to remember that
web services &lt;i style="mso-bidi-font-style: normal"&gt;only&lt;/i&gt; move boring data. No
semantic meaning is included. At best (assuming avoidance of xsd:any) you get some
limited syntactic meaning along with the data.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;When we talk about moving &lt;i style="mso-bidi-font-style: normal"&gt;anything&lt;/i&gt; via
a web service, we’re really just talking about data.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;When talking about moving a “business
object”, most people think of something that can be serialized by web services – meaning
by the XmlSerializer. Due to the limitations of the XmlSerializer this means that
the objects will have all their fields exposed as public fields or read-write properties.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What this means in short, is that
the “business objects” can &lt;i style="mso-bidi-font-style: normal"&gt;not&lt;/i&gt; follow good
OO design principles. Basically, they are not “business objects”, but rather they
are a way of defining the message schema for the web service. They are, at best, data
transfer objects.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In my business objects books and
framework I talk about moving actual business objects across the wire using remoting.
Of course the reality here is that only the data moves – but the code must exist on
both ends. The effective result is that the object is cloned across the network, and
retains both its data and the semantic meaning (the business logic in the object).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;You can do this with web services
too, but not in a “web service friendly” way. Cloning an object implies that you get &lt;i style="mso-bidi-font-style: normal"&gt;all&lt;/i&gt; the
data in the object. And to do this while still allowing for encapsulation means that
the serialization must get private, friend/internal and protected fields as well as
public ones. This is accomplished via the BinaryFormatter. The BinaryFormatter generates
and consumes streams, which can be thought of as byte arrays. Thus, you end up creating
a web service that moves byte arrays around. Totally practical, but the data is not
human-readable XML – it is Base64 encoded binary data. I discuss &lt;/font&gt;&lt;a href="/Articles.aspx?id=1f6614eb-cf8b-4b30-abc2-b2558cb23348"&gt;&lt;font face="Times New Roman" size=3&gt;how
to do this in CSLA .NET&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; on
my web site.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;Now&lt;/i&gt; we
are talking about moving business objects. Real live, OO designed business objects.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Of course this approach is purely
for n-tier scenarios. It is totally antithetical to any service-oriented model! &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;For an SO model you need to have
clearly defined schemas for your web service messages, and those should be independent
from your internal implementation (business objects, DataSets or whatever). I discuss
this in Chapter 10 of my &lt;/font&gt;&lt;a href="/cslanet"&gt;&lt;font face="Times New Roman" size=3&gt;business
objects books&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=5ac19dbd-eac1-4546-ba7b-2e5e21c9a328" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,5ac19dbd-eac1-4546-ba7b-2e5e21c9a328.aspx</comments>
      <category>CSLA .NET</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=bee605ea-289a-4a39-9331-6df5e27909fd</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,bee605ea-289a-4a39-9331-6df5e27909fd.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,bee605ea-289a-4a39-9331-6df5e27909fd.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=bee605ea-289a-4a39-9331-6df5e27909fd</wfw:commentRss>
      <title>More on web services and DataSet objects</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,bee605ea-289a-4a39-9331-6df5e27909fd.aspx</guid>
      <link>http://www.lhotka.net/weblog/MoreOnWebServicesAndDataSetObjects.aspx</link>
      <pubDate>Mon, 24 Jan 2005 15:13:49 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;OK, so Shawn has some &lt;/font&gt;&lt;a href="http://adoguy.com/content.aspx?id=rantview&amp;amp;rantid=159"&gt;&lt;font face="Times New Roman" size=3&gt;good
points&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; about the use
of a DataSet for the purpose of establishing a formal contract for your web service
messages. This is in response to my &lt;/font&gt;&lt;a href="/WeBlog/PermaLink.aspx?guid=54c4f7d9-cda5-4803-b623-097cfca0f639"&gt;&lt;font face="Times New Roman" size=3&gt;previous
entry&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; about &lt;i style="mso-bidi-font-style: normal"&gt;not&lt;/i&gt; using
DataSets across web services.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The &lt;i style="mso-bidi-font-style: normal"&gt;really
big&lt;/i&gt; distinction between using web services for SO vs n-tier remains.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If you are doing SO, you need to
clearly define your message schema, and that schema must be independent from your
internal data structures or representations. This independence is critical for encapsulation
and is a core part of the SO philosophy. Your service &lt;i style="mso-bidi-font-style: normal"&gt;interface&lt;/i&gt; must
be independent from your service &lt;i style="mso-bidi-font-style: normal"&gt;implementation&lt;/i&gt;.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What technology you use to define
your &lt;i style="mso-bidi-font-style: normal"&gt;schema&lt;/i&gt; is really up to you. Shawn&amp;#8217;s
entry points out that you can use strongly typed DataSet objects to generate the schema
&amp;#8211; something I suppose I knew subconsciously but didn&amp;#8217;t really connect
until he brought it up. Thank you Shawn!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Any tool that generates an XSD will
work to define your schema, and from there you can define proxy classes (or apparently
use DataSet objects as proxies). Alternately you can create your &amp;#8220;schema&amp;#8221;
in VB or C# code and get the XSD from the code using the wsdl.exe tool from the .NET
SDK (though you have less control over the XSD this way).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But my core point remains, that
this is all about defining your &lt;i style="mso-bidi-font-style: normal"&gt;interface&lt;/i&gt;,
and should not be confused with defining your implementation. Using a DataSet for
a proxy is (according to Shawn) a great thing, and I&amp;#8217;ll roll with that. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But to use that &lt;i style="mso-bidi-font-style: normal"&gt;same&lt;/i&gt; DataSet
all the way down into your business and data code is dangerous and fragile. That directly
breaks encapsulation and makes you subject to horrific versioning issues.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And versioning is the big bugaboo
hiding in web services. Web services have no decent versioning story. At the service
API level the story is the same as it was for COM and DCOM &amp;#8211; which was really
bad and I believe ultimately helped drive the success of Java and .NET.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;At the &lt;i style="mso-bidi-font-style: normal"&gt;schema&lt;/i&gt; level
the versioning story is better. It is possible to have your service accept different
variations on your XML schema, and you can adapt to the various versions. But this
implies that your service (or a pre-filter/adapter) isn&amp;#8217;t tightly coupled to
some specific implementation. I fear that DataSets offer a poor answer in this case.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And in any case, if you to create
maintainable code you must be able to alter your internal implementation and data
representation independently from your external contract. The XSD that all your clients
rely on can&amp;#8217;t change easily, and you must be able to change your &lt;i style="mso-bidi-font-style: normal"&gt;internal&lt;/i&gt; structures
more rapidly to accommodate changing requirements over time.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Again, I&amp;#8217;m talking about SO
here. If you are using web services for n-tier then the rules are all different.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In the n-tier world, your tiers
are tightly coupled to start with. They are merely physical deployments of &lt;i style="mso-bidi-font-style: normal"&gt;layers&lt;/i&gt;,
and layers trust each other implicitly because they are just a logical organization
of the code inside your single application. While there are still some real-world
versioning issues involved, the fact is that they aren&amp;#8217;t remotely comparable
to the issues faced in the SO world.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=bee605ea-289a-4a39-9331-6df5e27909fd" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,bee605ea-289a-4a39-9331-6df5e27909fd.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=54c4f7d9-cda5-4803-b623-097cfca0f639</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,54c4f7d9-cda5-4803-b623-097cfca0f639.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,54c4f7d9-cda5-4803-b623-097cfca0f639.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=54c4f7d9-cda5-4803-b623-097cfca0f639</wfw:commentRss>
      <title>Thoughts on passing DataSet objects via web services</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,54c4f7d9-cda5-4803-b623-097cfca0f639.aspx</guid>
      <link>http://www.lhotka.net/weblog/ThoughtsOnPassingDataSetObjectsViaWebServices.aspx</link>
      <pubDate>Mon, 24 Jan 2005 03:06:20 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Every now and then the question
comes up about whether to pass DataSet or DataTable objects through a web service.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I agree with &lt;/font&gt;&lt;a href="http://www.neward.net/ted/weblog/index.jsp"&gt;&lt;font face="Times New Roman" size=3&gt;Ted
Neward&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; that the short
answer is NO!!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;However, nothing is ever black and
white&amp;#8230;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;For the remainder of this discussion
remember that a DataSet is just a collection of DataTable objects. There&amp;#8217;s no
real difference between a DataTable and DataSet in the context of this discussion,
so I&amp;#8217;m just going to use the term DataSet to mean 1..n DataTables.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;There are two &amp;#8220;types&amp;#8221;
of DataSet &amp;#8211; default and strongly typed.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Default DataSet objects can be converted
to relatively generic XML. They don&amp;#8217;t do this by default of course. So you must
choose to either pass a DataSet in a form that is pretty much only useful to .NET
code, or to force it into more generic XML that is useful by anyone.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To make this decision you need to
ask yourself why you are using web services to start with. They are designed, after
all, for the purpose of interop/integration. If you are using them for that intended
purpose then you want the generic XML solution. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;On the other hand, if you are misusing
web services for something other than interop/integration then you are already on
thin ice and can do any darn thing you want. Seriously, you are on your own anyway,
so go for broke.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Strongly typed DataSet objects are
a different animal. To use them, both ends of the connection need the .NET assembly
that contains the strongly typed code for the object. Obviously interop/integration
isn&amp;#8217;t your goal here, so you are implicitly misusing web services for something
else already, so again you are on your own and might as well go for broke.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Personally my recommendation is
to avoid passing DataSet objects of any sort via web services. Create explicit schema
for your web service messages, then generate proxy classes in VB or C# or whatever
language based on that schema. Then use the proxy objects in your web service code.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Your web service (asmx) code should
be considered the same as any other UI code. It should translate between the &amp;#8220;user&amp;#8221;
presentation (XML based on your schema/proxy classes) and your internal implementation
(DataSet, business objects or whatever).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I discuss this in Chapter 10 of
my &lt;/font&gt;&lt;a href="/cslanet"&gt;&lt;font face="Times New Roman" size=3&gt;Business Objects&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; books,
but the concepts apply directly to data-centric programming just as they do to OO
programming.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=54c4f7d9-cda5-4803-b623-097cfca0f639" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,54c4f7d9-cda5-4803-b623-097cfca0f639.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=97137ecc-0999-43e2-b835-537f7368a9f2</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,97137ecc-0999-43e2-b835-537f7368a9f2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,97137ecc-0999-43e2-b835-537f7368a9f2.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=97137ecc-0999-43e2-b835-537f7368a9f2</wfw:commentRss>
      <title>SOA is dead</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,97137ecc-0999-43e2-b835-537f7368a9f2.aspx</guid>
      <link>http://www.lhotka.net/weblog/SOAIsDead.aspx</link>
      <pubDate>Sun, 02 Jan 2005 23:08:12 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Don Box put out
his &lt;a href="http://pluralsight.com/blogs/dbox/archive/2004/12/29/4113.aspx"&gt;predictions
for 2005&lt;/a&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;,
including #3 which states that the term SOA will be replaced by some new hype-word
invented by the marketing wonks of various software and industry analysis companies.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;As I said months
ago, the &lt;a href="/WeBlog/PermaLink.aspx?guid=05f88592-9ecb-4331-a86b-cfeebc411dfe"&gt;S
in SOA is a dollar sign&lt;/a&gt;. SOA is much more hype than reality, which means it is
created and defined by marketing people far more than it is by actual computer scientists
or engineers. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;As is often the
case with over-hyped concepts, the terms related to those concepts rapidly become
meaningless. What is SOA? Depends on which vendor you ask. What is a service? Depends
on which vendor you ask. It is all a meaningless jumble here at the start of 2005.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Of course the &lt;em&gt;&lt;span style="FONT-FAMILY: Verdana"&gt;concept&lt;/span&gt;&lt;/em&gt; is
too valuable to marketeers[1] for them to give up just because a term has been lost.
So I am sure Don is right and marketing groups at Microsoft, IBM, Gartner and many
other organizations are busily working to decide on the next term or terms to use
for a while.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;So for better
or worse SOA itself isn&amp;#8217;t dead, but I agree that the term is living on borrowed
time.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;[1] Yes, I know
the term is marketers, but that extra &amp;#8220;e&amp;#8221; in there makes it sound so much
more, well, Disney somehow :-)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=97137ecc-0999-43e2-b835-537f7368a9f2" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,97137ecc-0999-43e2-b835-537f7368a9f2.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=67765899-9586-40f7-8fe7-aa147fd55968</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,67765899-9586-40f7-8fe7-aa147fd55968.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,67765899-9586-40f7-8fe7-aa147fd55968.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=67765899-9586-40f7-8fe7-aa147fd55968</wfw:commentRss>
      <title>Passive Data vs “Active” Data</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,67765899-9586-40f7-8fe7-aa147fd55968.aspx</guid>
      <link>http://www.lhotka.net/weblog/PassiveDataVsActiveData.aspx</link>
      <pubDate>Wed, 22 Dec 2004 02:27:28 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In recent SOA related posts I&amp;#8217;ve
alluded to this, but I wanted to call it out directly. SOA is founded on the principal
of &lt;i style="mso-bidi-font-style: normal"&gt;passive data&lt;/i&gt;. Dima Maltsev called this
out in a recent comment to a previous blog entry:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;In
one of the posts 
&lt;st1:City w:st="on"&gt;
&lt;st1:place w:st="on"&gt;Rockford&lt;/st1:place&gt;
&lt;/st1:City&gt;
is saying that SOA doesn't address the need of moving data and also the logic associated
with that data. I think this is one of the main ideas of SOA and I would rather state
it positively: SOA wants you to separate the logic and data.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Yes, absolutely. SOA is exactly
like structured or procedural programming in this regard. All those concepts we studied
way back in the COBOL/FORTRAN days while drawing flowcharts and data flow diagrams
are &lt;i style="mso-bidi-font-style: normal"&gt;exactly&lt;/i&gt; what SOA is all about.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Over the past 20-30 years two basic
schools of thought have evolved. One ways that data is a passive entity, the other
attempts to embed data into active entities (often called objects or components). &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Every now and then someone tries
to merge the two concepts, providing a scheme by which sometimes data is passive,
while other times it is contained within active entities. Fowlers Data Transfer Objects
(DTO) design pattern and my CSLA .NET are examples of recent efforts in this space,
though we are hardly alone.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But &lt;i style="mso-bidi-font-style: normal"&gt;most&lt;/i&gt; people
stick with one model or the other. Mixing the models is complex and typically requires
extra coding.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Thus, most software is created using
a passive data model, or an active entity model alone. And the reality is that the
vast majority of software uses a passive data model.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In my speaking I often draw a distinction
between &lt;i style="mso-bidi-font-style: normal"&gt;data-centric&lt;/i&gt; and &lt;i style="mso-bidi-font-style: normal"&gt;object-oriented&lt;/i&gt; design. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Data-centric design is merely a
variation on procedural programming, with the addition of a formalized data container
of some sort. In some cases this is as basic as a 2-dimensional array, but in most
cases it is a RecordSet, ResultSet, DataSet or some variation on that theme. In .NET
it is a DataTable (or a collection of DataTables in a DataSet).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The data-centric model is one where
the application goes to the database and retrieves data. The data in the database
is passive, and when the application gets it, the data is in a container &amp;#8211; say
a DataTable. This container is passive as well.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I hear you arguing already. &amp;#8220;Both
the database and DataTable make sure certain columns are numeric!&amp;#8221;, or &amp;#8220;They
both make sure the primary key is unique!&amp;#8221;. Sure, that is true. Over the past
decade some tiny amount of intelligence has crept into our data containers, but nothing
really interesting. Nothing that makes sure the number in the column is a &lt;i style="mso-bidi-font-style: normal"&gt;good&lt;/i&gt; number
&amp;#8211; that it is in the right range, or that it was calculated with the right formula.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Anything along the lines of validation,
calculation or manipulation of data occurs &lt;i style="mso-bidi-font-style: normal"&gt;outside&lt;/i&gt; the
data container. That outside entity is the actor, the data container is merely a vessel
for passive data.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And that&amp;#8217;s OK. That works.
Most software is written this way, with the business logic in the UI or a function
library (or maybe a rules engine), acting against the data.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The problem is that most people
don&amp;#8217;t recognize this as procedural programming. Since the DataSet is an object,
and your UI form is an object, the assumption is that we&amp;#8217;re object-oriented.
Thus we don&amp;#8217;t rigorously apply the lessons learned back in the FORTRAN days
about how to organize our code into reusable procedures and organize those procedures
into function libraries.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Instead we plop the code into the
UI behind button clicks and key press events. Any procedural organization is a token
effort, unorganized and informal.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Which is why I favor an active entity
approach &amp;#8211; in the form of object-oriented business entity objects.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In an active entity model, data
is never left out &amp;#8220;on its own&amp;#8221; in a passive state. Well, except for when
it is in the database, because we&amp;#8217;re stuck using RDBMS databases and the passive
data concept is so deeply embedded in that technology it is hopeless&amp;#8230;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But once the data comes out of the
database it is in an active entity. Again, this is typically an entity object, designed
using object-oriented concepts. The primary point here is that the data is never exposed
in a raw form. It is never passive. Any external entity using the data can count on
the data being validated, calculated and manipulated based on a consistent set of
rules that are included &lt;i style="mso-bidi-font-style: normal"&gt;with the data&lt;/i&gt;.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In this model we avoid putting the
logic in the UI. We avoid the need to create procedures and organize them into function
libraries like in the days of COBOL. Instead, the logic is part and parcel with the
data. They are one.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Most people don&amp;#8217;t take this
approach. Historically it has required more coding and more effort. With .NET 1.x
some of the overhead is gone, since basic data binding to objects is possible. However,
there&amp;#8217;s still the need to map the objects to/from the database and that is certainly
extra effort. Also, the data binding isn&amp;#8217;t on a par with that available for
the DataSet.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In .NET 2.0 the data binding of
objects will be on a par (or better than) binding with a DataSet, so that end of things
is improving nicely. The issue of mapping data to/from the database remains, and appears
that it will continue to be an issue for some time to come.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In any case, along comes SOA. SOA
is all about active entities sending messages to each other. When phrased like that
it sounds almost object-oriented, but don&amp;#8217;t be fooled.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The active entities are procedures.
Each one is stateless, and each one is defined by a formal contract that specifies
the name of the procedure, the parameters it accepts and the results it returns.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Some people will argue that they
aren&amp;#8217;t stateless. Indigo, for instance, will allow stateful entities just like
DCOM and Remoting to today. But we all know (after nearly 10 years experience with
DCOM) that stateful entities don&amp;#8217;t scale and don&amp;#8217;t lead to reliable systems.
So if you really &lt;i style="mso-bidi-font-style: normal"&gt;want&lt;/i&gt; to have an unscalable
and unreliable solution then go ahead and use stateful designs. I&amp;#8217;ll be over
here in stateless land where things actually work. :-)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The point being, these service-entities
are not objects, they are procedures. They accept messages. Message is just another
word for data, so they are procedures that accept data.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The data is described by a schema
&amp;#8211; often an XSD. This schema information has about the same level of &amp;#8220;logic&amp;#8221;
as a database or DataSet &amp;#8211; which is to say it is virtually useless. It can make
sure a value is numeric, but it can&amp;#8217;t make sure the number is any good.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So Dima is absolutely correct. SOA
is all about separating the data (messages) from the logic (procedures aka services).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Is this a good thing? Well that&amp;#8217;s
a value judgement.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Did you like how procedural programming
worked the first time around? Do you like how data-centric (aka procedural) programming
works in VB or Powerbuilder? If so, then you&amp;#8217;ll like SOA &amp;#8211; at least conceptually.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Or do you like how object-oriented
programming works? Do you appreciate the consistency and centralized nature of having
active entities that wrap your data at all times? Do you feel that the extra effort
of doing OO is worth it to gain the benefits? If so, then you&amp;#8217;ll probably balk
at SOA.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Note that I say that people happy
with procedural programming will &lt;i style="mso-bidi-font-style: normal"&gt;conceptually&lt;/i&gt; like
SOA. That&amp;#8217;s because there&amp;#8217;s always the distributed parallel thing to worry
about.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;SOA is inherently a distributed
design approach. Yes, you might configure your service-entities to all run on the
same machine, or even in the same process. But the &lt;i style="mso-bidi-font-style: normal"&gt;point&lt;/i&gt; of
SOA is that the services are location-transparent. You don&amp;#8217;t &lt;i style="mso-bidi-font-style: normal"&gt;know&lt;/i&gt; that
they are local, and at some point in the future they might not be. Thus you &lt;i style="mso-bidi-font-style: normal"&gt;must&lt;/i&gt; design
under the assumption that each call to a service is bouncing off two satellites as
it goes half-way around the planet and back.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;SOA (as described by Pat Helland
at least) is also inherently parallel. Calls to services are asynchronous. Your proxy
object might simulate a synchronous call, so you don&amp;#8217;t even realize it was async.
But a core idea behind SOA is that of transport-transparency. You don&amp;#8217;t know
how your message is delivered. Is it via web services? Is it via a queue? Is it via
email? You don&amp;#8217;t know. You aren&amp;#8217;t &lt;i style="mso-bidi-font-style: normal"&gt;supposed&lt;/i&gt; to
care.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But even procedural aficionados
may not be too keen to program in a distributed parallel environment. The distributed
part is complex and can be slow. The parallel part is complex and, well, very complex.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;My predication? Tools like Indigo
will avoid the whole parallel part and it will never come to pass. The idea of transport-transparency
(or protocol-transparency) will go the way of the dodo before SOA ever becomes truly
popular.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The distributed part of the equation
can&amp;#8217;t really go away though, so we&amp;#8217;re kind of stuck with that. But we&amp;#8217;ve
dealt with that for nearly 10 years now with DCOM, so it isn&amp;#8217;t a big thing.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In the end, my prediction is that
SOA will fade away as people realize that the &lt;i style="mso-bidi-font-style: normal"&gt;reality&lt;/i&gt; is
that we&amp;#8217;ll be using it to do &lt;i style="mso-bidi-font-style: normal"&gt;exactly&lt;/i&gt; what
we did with DCOM, RMI, IIOP and various other RPC technologies.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The really cool ideas &amp;#8211; the
ones with the power to be emergent &amp;#8211; are already fading away. They aren&amp;#8217;t
included (at least in the forefront) of Indigo, and they&amp;#8217;ll just slip away like
a bright and shining dream and we&amp;#8217;ll be left with a cool new way to do RPC.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And RPC is fundamentally a passive
data technology. Active entities (procedures) send passive data between them &amp;#8211;
often in the form of arrays or more sophisticated containers like a DataSet or perhaps
an XML document with an XSD. It is all the same stuff with tiny variations. Like ice
cream &amp;#8211; chocolate, vanilla or strawberry, it is all cold and fattening.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So welcome to the new world, same
as the old world.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=67765899-9586-40f7-8fe7-aa147fd55968" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,67765899-9586-40f7-8fe7-aa147fd55968.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=9ecb8981-a784-40ce-9df2-3ef786694208</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,9ecb8981-a784-40ce-9df2-3ef786694208.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,9ecb8981-a784-40ce-9df2-3ef786694208.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=9ecb8981-a784-40ce-9df2-3ef786694208</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If SOA really is a revolutionary force on a par with OO, it is because it has emergent
behavior. Here's some <a href="http://books.slashdot.org/article.pl?sid=04/12/15/2142206&amp;from=rss">more
information </a>on emergence as a field of study and what it really means.
</p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=9ecb8981-a784-40ce-9df2-3ef786694208" />
      </body>
      <title>More information on "emergence"</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,9ecb8981-a784-40ce-9df2-3ef786694208.aspx</guid>
      <link>http://www.lhotka.net/weblog/MoreInformationOnEmergence.aspx</link>
      <pubDate>Wed, 15 Dec 2004 23:40:35 GMT</pubDate>
      <description>&lt;p&gt;
If SOA really is a revolutionary force on a par with OO, it is because it has emergent
behavior. Here's some &lt;a href="http://books.slashdot.org/article.pl?sid=04/12/15/2142206&amp;amp;from=rss"&gt;more
information &lt;/a&gt;on emergence as a field of study and what it really means.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=9ecb8981-a784-40ce-9df2-3ef786694208" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,9ecb8981-a784-40ce-9df2-3ef786694208.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=ae09a6da-64d6-4d1c-b283-fc2259517710</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,ae09a6da-64d6-4d1c-b283-fc2259517710.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,ae09a6da-64d6-4d1c-b283-fc2259517710.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=ae09a6da-64d6-4d1c-b283-fc2259517710</wfw:commentRss>
      <title>Duplication of business logic in SOA</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,ae09a6da-64d6-4d1c-b283-fc2259517710.aspx</guid>
      <link>http://www.lhotka.net/weblog/DuplicationOfBusinessLogicInSOA.aspx</link>
      <pubDate>Wed, 15 Dec 2004 23:14:03 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Earlier this week my employer, &lt;/font&gt;&lt;a href="http://www.magenic.com/"&gt;&lt;font face="Times New Roman" size=3&gt;Magenic&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt; worked
with the Microsoft office in 
&lt;st1:City w:st="on"&gt;
&lt;st1:place w:st="on"&gt;Atlanta&lt;/st1:place&gt;
&lt;/st1:City&gt;
to set up a series of speaking engagements with some Atlanta-based companies. I had
a good time, as I got some very good questions and discussion through some of the
presentations.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In one of the presentations about
SOA, an attendee challenged my assertion that &amp;#8220;pure&amp;#8221; SOA would lead to
redundant business logic. He agreed with my example that validation logic would likely
be replicated, but asserted that replication of validation logic was immaterial and
that it was &lt;i style="mso-bidi-font-style: normal"&gt;business logic&lt;/i&gt; which shouldn&amp;#8217;t
be replicated.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Now I&amp;#8217;m the first to acknowledge
that there are different types of business logic. And this isn&amp;#8217;t the first time
that I&amp;#8217;ve had people argue that validation is not business logic. But that&amp;#8217;s
never rung true for me.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Every computer science student (and
I assume CIS and MIS students) gets inundated with GIGO early in their career. Garbage-In-Garbage-Out.
The mantra that illustrates just how incredibly important data validation really is.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;You can write the most elegant and
wonderful and perfect &lt;i style="mso-bidi-font-style: normal"&gt;business logic&lt;/i&gt; in
the world, and if you mess up the validation all your work will be for naught. Without
validation, nothing else matters. Of course without calculation and manipulation and
workflow the validation doesn&amp;#8217;t matter either.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;My point here is that validation,
calculation, manipulation, workflow and authorization are all just different types
of business logic. None are more important than others, and a flaw in any one of them
ripples through a system wreaking havoc throughout.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Redundant or duplicated validation
logic is no less dangerous or costly than duplicated calculation or manipulation logic.
Nor is it any easier to manage, control or replicate validation logic than any other
type of logic.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In fact, you could argue that it
is &lt;i style="mso-bidi-font-style: normal"&gt;harder&lt;/i&gt; to control replicated validation
logic in some ways. This is because we often want to do validation in a web browser
where the only real options are javascript or flash. But our &amp;#8220;real&amp;#8221; code
is in VB or C# on the web server and/or application server. Due to the difference
in technology, we can&amp;#8217;t share any code here, but must manually replicate and
maintain it.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Contrast this with calculation,
manipulation or workflow, which is almost always done as part of &amp;#8220;back end processing&amp;#8221;
and thus would be written in VB or C# in a DLL to start with. It is comparatively
easy to share a well-designed DLL between a web server and app server. Not trivial
I grant you, but it doesn&amp;#8217;t require manual porting of code between platforms/languages
like most validation logic we replicate.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So given the comparable importance
of validation logic to the other types of business logic, it is clear to me that it &lt;i style="mso-bidi-font-style: normal"&gt;must&lt;/i&gt; be
done right. And given the relative complexity of reusing validation logic across different
&amp;#8220;tiers&amp;#8221; or services, it is clear that we have a problem if we do decide
to replicate it.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And yet changing traditional tiered
applications into a set of cooperative services almost guarantees that validation
logic will be replicated.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The user enters data into a web
application. It validates the data of course, because the web application&amp;#8217;s
job is to give the user a good experience. Google&amp;#8217;s new search beta is reinforcing
the user expectation that even web apps can provide a rich user experience comparable
to Windows. Users will demand decent interactivity, and thus validation (and some
calculation) will certainly be on the web server and probably also replicated into
the browser.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The web application calls the business
workflow service. This service follows SOA principles and doesn&amp;#8217;t trust the
web app. After all, it is being used by other front-end apps as well, and can&amp;#8217;t
assume any of them do a good job. We&amp;#8217;re not talking security here either &amp;#8211;
we&amp;#8217;re talking data trust. The service just can&amp;#8217;t trust the data coming
from unknown front-end apps, as that would result in fragile coupling.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So the service must revalidate and
recalculate any thing that the web app did. This is clear and obvious replication
of code.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;At this point we&amp;#8217;ve probably
got three versions of some or all of our validation logic (browser, web server, workflow
service). We probably have some calculation/manipulation replication too, as the web
server likely did some basic calculations rather than round-trip to the workflow service.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Now some code could be centralized
into DLLs that are installed on both the web server and app server, so both the web
app and workflow service can use the same code base. This is common sense, and works
great in a homogenous environment.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But it doesn&amp;#8217;t extend to the
browser, where the replicated validation logic is in javascript. And it doesn&amp;#8217;t
work all that well if the web server is running on a different platform from the app
server.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In any case, we have replication
of code &amp;#8211; all we&amp;#8217;re doing is trying to figure out how to &lt;i style="mso-bidi-font-style: normal"&gt;manage&lt;/i&gt; that
replication in some decent way. I think this is an important conversation to have,
because in my mind it is one of the two major hurdles SOA must overcome (the other
being versioning).&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=ae09a6da-64d6-4d1c-b283-fc2259517710" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,ae09a6da-64d6-4d1c-b283-fc2259517710.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=333d2cce-8dfc-4f49-9065-8d75451fb90b</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,333d2cce-8dfc-4f49-9065-8d75451fb90b.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,333d2cce-8dfc-4f49-9065-8d75451fb90b.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=333d2cce-8dfc-4f49-9065-8d75451fb90b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
TheServerSide.net just published an article of mine titled “<a href="http://www.theserverside.net/news/thread.tss?thread_id=30568">The
Fallacy of the Data Layer</a>”, in which I basically carry some SOA ideas to
their logical conclusion to see what happens. Unfortunately the sarcasm in the article
was pretty well hidden and so the comments on the article are kinda harsh - but funny
if you actually see the sarcasm :-)
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=333d2cce-8dfc-4f49-9065-8d75451fb90b" />
      </body>
      <title>"The Fallacy of the Data Layer" article available on TSS.net</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,333d2cce-8dfc-4f49-9065-8d75451fb90b.aspx</guid>
      <link>http://www.lhotka.net/weblog/TheFallacyOfTheDataLayerArticleAvailableOnTSSnet.aspx</link>
      <pubDate>Wed, 15 Dec 2004 23:00:16 GMT</pubDate>
      <description>&lt;p&gt;
TheServerSide.net just published an article of mine titled &amp;#8220;&lt;a href="http://www.theserverside.net/news/thread.tss?thread_id=30568"&gt;The
Fallacy of the Data Layer&lt;/a&gt;&amp;#8221;, in which I basically carry some SOA ideas to
their logical conclusion to see what happens. Unfortunately the sarcasm in the article
was pretty well hidden and so the comments on the article are kinda harsh - but funny
if you actually see the sarcasm :-)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=333d2cce-8dfc-4f49-9065-8d75451fb90b" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,333d2cce-8dfc-4f49-9065-8d75451fb90b.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=467fbf49-b1d6-40cb-8037-c8f15249198e</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,467fbf49-b1d6-40cb-8037-c8f15249198e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,467fbf49-b1d6-40cb-8037-c8f15249198e.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=467fbf49-b1d6-40cb-8037-c8f15249198e</wfw:commentRss>
      <title>Conversations about services, remoting and Santa</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,467fbf49-b1d6-40cb-8037-c8f15249198e.aspx</guid>
      <link>http://www.lhotka.net/weblog/ConversationsAboutServicesRemotingAndSanta.aspx</link>
      <pubDate>Thu, 09 Dec 2004 19:24:47 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;Last
night a group of top developers from the 
&lt;st1:City w:st="on"&gt;
&lt;st1:place w:st="on"&gt;Minneapolis&lt;/st1:place&gt;
&lt;/st1:City&gt;
area had dinner with &lt;/font&gt;&lt;a href="http://www.chappellassoc.com/"&gt;&lt;font face="Times New Roman" size=3&gt;David
Chappell&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;. Great company,
great food and great conversation; what more could you want?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The conversation ranged wide, from
whether parents should perpetuate the myth of the Tooth Fairy and Santa all the way
down to how Whidbey&amp;#8217;s System.Transactions compares to the transactional functionality
in BizTalk Server.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;At one point during the conversation
David mentioned that there&amp;#8217;s not only an impedance mismatch between objects
and relational data, but also between users and objects and between services and objects.
While the user-object mismatch is somewhat understood, we&amp;#8217;re just now starting
to learn the nature of the service-object mismatch.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;(The OO-relational impedance mismatch
is well-known and is discussed in many OO books, perhaps most succinctly in &lt;/font&gt;&lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201309947/qid=1102619516/sr=2-1/ref=pd_ka_b_2_1/103-4155873-4125463"&gt;&lt;font face="Times New Roman" size=3&gt;David
Taylor&amp;#8217;s book&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I think that his observation is
accurate, and it is actually the topic of an article I submitted to &lt;/font&gt;&lt;a href="http://www.theserverside.net/"&gt;&lt;font face="Times New Roman" size=3&gt;TheServerSide.net&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; a
few days ago, so look for that to stir some controversy in the next few weeks :-)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I also heard that some people have
read my blog entries on remoting (&lt;/font&gt;&lt;a href="/WeBlog/PermaLink.aspx?guid=aa092a06-253b-4a3a-9c5e-58011f941479"&gt;&lt;font face="Times New Roman" size=3&gt;this
one in particular&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; I think)
and somehow came to the conclusion that I was indicating that Indigo would be binary
compatible with remoting. To be clear, as far as I know Indigo won&amp;#8217;t be binary
compatible with remoting. Heck, remoting isn&amp;#8217;t binary compatible with remoting.
Try accessing a .NET 1.1 server from a 1.0 client and see what happens!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What I said is that if you are careful
about how you use remoting today you&amp;#8217;ll have a relatively easy upgrade path
to Indigo. Which is no different than using asmx or ES today. They&amp;#8217;ll all have
an upgrade path to Indigo, but that doesn&amp;#8217;t imply that Indigo will natively
interoperate with remoting or ES (DCOM). &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;(Presumably Indigo will interop
with asmx because that&amp;#8217;s just SOAP, but even then you&amp;#8217;ll want to change
your code to take advantage of the new Indigo features, so it is still an upgrade
process)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What does &amp;#8220;be careful how
you use remoting&amp;#8221; mean? This:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;ol style="MARGIN-TOP: 0in" type=1&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Use the Http channel&lt;/font&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Host in IIS&lt;/font&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Use the BinaryFormatter&lt;/font&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Do not create or use custom sinks,
formatters or channels&lt;/font&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If you follow these rules you &lt;i style="mso-bidi-font-style: normal"&gt;should&lt;/i&gt; have
a relatively direct upgrade path to Indigo. Will you have to change your code? Of
course. That&amp;#8217;s what an upgrade path IS. It means you can, with relative ease,
update your code to work with the new technology.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=467fbf49-b1d6-40cb-8037-c8f15249198e" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,467fbf49-b1d6-40cb-8037-c8f15249198e.aspx</comments>
      <category>Distributed OO</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=05c18331-4e64-4d70-b880-5d748d0ca8f5</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,05c18331-4e64-4d70-b880-5d748d0ca8f5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,05c18331-4e64-4d70-b880-5d748d0ca8f5.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=05c18331-4e64-4d70-b880-5d748d0ca8f5</wfw:commentRss>
      <title>SOA: procedural programming redux or emergent technology?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,05c18331-4e64-4d70-b880-5d748d0ca8f5.aspx</guid>
      <link>http://www.lhotka.net/weblog/SOAProceduralProgrammingReduxOrEmergentTechnology.aspx</link>
      <pubDate>Thu, 18 Nov 2004 03:27:19 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;For some time now I&amp;#8217;ve been
writing relatively cautionary entries on service-orientation. Speculating whether
it is really anything new, or is just another communication scheme not unlike RPC,
DCOM, RMI and others before. It seems that &lt;/font&gt;&lt;a href="http://www-106.ibm.com/developerworks/blogs/dw_blog.jspa?blog=317"&gt;&lt;font face="Times New Roman" size=3&gt;Grady
Booch&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; is of a &lt;/font&gt;&lt;a href="http://www-106.ibm.com/developerworks/blogs/dw_blog_comments.jspa?blog=317&amp;amp;entry=65585"&gt;&lt;font face="Times New Roman" size=3&gt;similar
mind&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;, suggesting that
SOA is not the be-all-and-end-all of architectures, and that it may not be an architecture
at all.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In a couple weeks I&amp;#8217;m giving
the keynote at the &lt;/font&gt;&lt;a href="http://www.heartlanddc.com/"&gt;&lt;font face="Times New Roman" size=3&gt;Heartland
Developer&amp;#8217;s Conference&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt; in 
&lt;st1:City w:st="on"&gt;
&lt;st1:place w:st="on"&gt;Des Moines&lt;/st1:place&gt;
&lt;/st1:City&gt;
. I&amp;#8217;ll be talking about service-orientation from a historical perspective. How
does it relate and compare to procedural, object-oriented and component-based schemes,
as well as client/server and n-tier. In putting together the presentation, I had to
formalize a lot of my thoughts on the topic, and the more I&amp;#8217;ve considered it,
the more skeptical I have become that service-orientation or SOA is a tangibly new
thing.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If it is tangibly new, then it is
a new way of thinking or conceptualizing the problem space, not a new technology solution.
Web services, SOAP, XML and related technologies are merely incrementally new twists
on very old ideas. In and of themselves they offer nothing terribly new from an architecture
perspective.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But SOA itself isn&amp;#8217;t about
technology. It is about a new way of modeling reality. It is very data-centric and
thus is diametrically opposed to object-orientation. It is much more similar to the
older procedural world-view, where data is passive and procedures are the only active
entities in a system. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But it isn&amp;#8217;t really procedural
either, at least not in a traditional sense. This is because procedural design has
an underlying assumption that procedure calls are virtually free. In an SO model,
service calls have very high overhead &amp;#8211; or at least we must assume they do,
because that is one possible (and likely) deployment scenario.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Ultimately SO appears to be procedural
programming, with the addition of high overhead per call (thus forcing serious granularity
changes in design) and dynamic negotiation of the communication semantics (protocol,
orthogonal services, etc.) &amp;#8211; though there&amp;#8217;s no real implementation yet
of this dynamic negotiation&amp;#8230; And even that isn&amp;#8217;t really an architecture
thing as much as technological coolness.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So in the end, SO is procedural
programming redux, with the caveat that the procedures are very expensive and should
be called rarely. Kinda boring in that light&amp;#8230;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Or, as I&amp;#8217;ll say in my keynote,
SO could be &lt;em&gt;emergent&lt;/em&gt;&amp;nbsp;(as defined &lt;a href="http://www.brainyencyclopedia.com/encyclopedia/e/em/emergence.html"&gt;here&lt;/a&gt; and &lt;a href="http://c2.com/cgi/wiki?EmergentBehavior"&gt;here&lt;/a&gt;).&amp;nbsp;It
could be that the new combination of old concepts and simpler ideas combine to make
something new and unexpected. Something that isn&amp;#8217;t obvious. Much the same way
the simple moves of individual chess pieces combine to create a highly sophisticated
whole. The end result is certainly not obvious based on the simplicity of the core
rules. And if SO is emergent, then it is far from boring!!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Only time will tell. The next decade
will be quite interesting in this regard.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=05c18331-4e64-4d70-b880-5d748d0ca8f5" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,05c18331-4e64-4d70-b880-5d748d0ca8f5.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=d9ba99f9-9650-4c96-857a-43e1b0bd58c2</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,d9ba99f9-9650-4c96-857a-43e1b0bd58c2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,d9ba99f9-9650-4c96-857a-43e1b0bd58c2.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=d9ba99f9-9650-4c96-857a-43e1b0bd58c2</wfw:commentRss>
      <title>Make sure to vote</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,d9ba99f9-9650-4c96-857a-43e1b0bd58c2.aspx</guid>
      <link>http://www.lhotka.net/weblog/MakeSureToVote.aspx</link>
      <pubDate>Tue, 02 Nov 2004 14:45:05 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;Regardless
of your political leanings, if you are a 
&lt;st1:country-region w:st="on"&gt;
&lt;st1:place w:st="on"&gt;US&lt;/st1:place&gt;
&lt;/st1:country-region&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
citizen it is your civic duty to get out and vote, so please make sure to take the
time today and make it to the polls.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt;If 
&lt;st1:City w:st="on"&gt;
&lt;st1:place w:st="on"&gt;Minneapolis&lt;/st1:place&gt;
&lt;/st1:City&gt;
is any indication, allow extra time this year. There are already lines, and there
are a lot people doing same-day registration as well.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt;I realize that we are
all autonomous entities (to tie this to SOA). This means we have self-determination
and can make our own choices to do or not do things. Just like the entities that make
up services.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt;But self-determination
is the secondary definition. Autonomy's primary meaning is self-governance. And if
you don't vote today then you are giving up that primary meaning to the rest of America.
You are allowing others to choose your future and the future of our nation.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Just think what will happen when
SOA becomes reality in our software. We&amp;#8217;ll have autonomous entities (the implementation
behind a service) deciding whether it wants to do its &amp;#8220;civic duty&amp;#8221; or
not. Because these entities are autonomous, they&amp;#8217;ll be programmed with self-determination
and self-governance. They can say &amp;#8220;no, I don&amp;#8217;t feel like waiting in that
queue&amp;#8221; and just blow off client requests. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;For decades our industry has been
trying to create software models of the real world. SOA finally acknowledges that
software entities need to be autonomous to reflect the real world. Some 40% of US
citizens are likely to exercise their autonomy today by choosing to avoid self-governance
and to give that responsibility to the rest of us. If 40% of our software entities
started exercising their autonomy in a similar fashion I wonder what would happen&amp;#8230;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;
&lt;/o:p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The point being that service-oriented
design&amp;nbsp;might allow us to model the real world better than procedural or OO or
component-based design. But maybe that's not all it is cracked up to be, because real
world systems aren't particularly reliable and certainly aren't deterministic...&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;
&lt;/o:p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Be a reliable and deterministic
autonomous entity - get out and vote!&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=d9ba99f9-9650-4c96-857a-43e1b0bd58c2" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,d9ba99f9-9650-4c96-857a-43e1b0bd58c2.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=1f0e627d-1229-4680-9545-bd72b67d587e</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,1f0e627d-1229-4680-9545-bd72b67d587e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,1f0e627d-1229-4680-9545-bd72b67d587e.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=1f0e627d-1229-4680-9545-bd72b67d587e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.ebpml.org/soa.htm">Here is a good summary</a> of service-oriented
concepts and tenents.
</p>
        <p>
The only quibble I have is that the first section of the document combines SOA and
web services into a unified concept. I think this is too limiting, but at the same
time it is workable, since services <em>do imply</em> a design that may be distributed.
Whether you use web services or some other technology to do the distribution, the
fact is that the principles listed in the document will apply.
</p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=1f0e627d-1229-4680-9545-bd72b67d587e" />
      </body>
      <title>Good summary of service-oriented concepts and tenents</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,1f0e627d-1229-4680-9545-bd72b67d587e.aspx</guid>
      <link>http://www.lhotka.net/weblog/GoodSummaryOfServiceorientedConceptsAndTenents.aspx</link>
      <pubDate>Mon, 01 Nov 2004 18:06:36 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.ebpml.org/soa.htm"&gt;Here is a good summary&lt;/a&gt; of service-oriented
concepts and tenents.
&lt;/p&gt;
&lt;p&gt;
The only quibble I have is that the first section of the document combines SOA and
web services into a unified concept. I think this is too limiting, but at the same
time it is workable, since services &lt;em&gt;do imply&lt;/em&gt; a design that may be distributed.
Whether you use web services or some other technology to do the distribution, the
fact is that the principles listed in the document will apply.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=1f0e627d-1229-4680-9545-bd72b67d587e" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,1f0e627d-1229-4680-9545-bd72b67d587e.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=99ba4ec6-016c-4220-b7da-8dc79074342c</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,99ba4ec6-016c-4220-b7da-8dc79074342c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,99ba4ec6-016c-4220-b7da-8dc79074342c.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=99ba4ec6-016c-4220-b7da-8dc79074342c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is actually a shameless plug regarding me being quoted in the press...
</p>
        <p>
In the very same <a href="http://enterprisearchitect.texterity.com/enterprisearchitect/2004fall/">Enterprise
Architect magazine</a> whose article I maligned in my <a href="/WeBlog/PermaLink.aspx?guid=2d5d57fe-ce13-42ed-a59a-f749e376cd1b">previous
blog entry </a>I am actually quoted in a different article. Check in the <em>Editors
Note</em> and you'll find that Jim Fawcette does a good job of paraphrasing a statement
I made about SOA during a discussion panel at VS Live in Orlando this fall.
</p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=99ba4ec6-016c-4220-b7da-8dc79074342c" />
      </body>
      <title>Final SOA post for today</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,99ba4ec6-016c-4220-b7da-8dc79074342c.aspx</guid>
      <link>http://www.lhotka.net/weblog/FinalSOAPostForToday.aspx</link>
      <pubDate>Fri, 22 Oct 2004 03:24:39 GMT</pubDate>
      <description>&lt;p&gt;
This is actually a shameless plug regarding me being quoted in the press...
&lt;/p&gt;
&lt;p&gt;
In the very same &lt;a href="http://enterprisearchitect.texterity.com/enterprisearchitect/2004fall/"&gt;Enterprise
Architect magazine&lt;/a&gt; whose article&amp;nbsp;I maligned in my &lt;a href="/WeBlog/PermaLink.aspx?guid=2d5d57fe-ce13-42ed-a59a-f749e376cd1b"&gt;previous
blog entry &lt;/a&gt;I am actually quoted in a different article. Check in the &lt;em&gt;Editors
Note&lt;/em&gt; and you'll find that Jim Fawcette does a good job of paraphrasing a statement
I made about SOA during a discussion panel at VS Live in Orlando this fall.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=99ba4ec6-016c-4220-b7da-8dc79074342c" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,99ba4ec6-016c-4220-b7da-8dc79074342c.aspx</comments>
      <category>News</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=2d5d57fe-ce13-42ed-a59a-f749e376cd1b</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,2d5d57fe-ce13-42ed-a59a-f749e376cd1b.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,2d5d57fe-ce13-42ed-a59a-f749e376cd1b.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=2d5d57fe-ce13-42ed-a59a-f749e376cd1b</wfw:commentRss>
      <title>Not to keep harping on SOA, but really...</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,2d5d57fe-ce13-42ed-a59a-f749e376cd1b.aspx</guid>
      <link>http://www.lhotka.net/weblog/NotToKeepHarpingOnSOAButReally.aspx</link>
      <pubDate>Thu, 21 Oct 2004 18:48:58 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;In the just published &lt;a href="http://enterprisearchitect.texterity.com/enterprisearchitect/2004fall/"&gt;Enterprise
Architect magazine &lt;/a&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;is
an article titled &amp;#8220;SOA: Debunking 3 Common Myths&amp;#8221;. The first and third
myth I generally agree with. The second is problematic on several levels.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;The myth in question
is that SOA implies a distributed system. The author explains that SOA does &lt;i style="mso-bidi-font-style: normal"&gt;not&lt;/i&gt; imply
a distributed system, but rather is merely a message-based architecture of providers
and consumers. So far I&amp;#8217;m in agreement. SOA can be done in a single process.
Whether that&amp;#8217;s wise or not is another discussion, but it certainly can be done.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Then the author
goes on to suggest that a good architecture should include a Locator service so service
providers can be moved to other machines if needed. Again, so far so good. This kind
of flexibility is very important.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;But then we get
my point of disgreement. The closing statement is that &amp;#8220;services (and SOA) do
not imply any distribution semantics&amp;#8221;. Say what?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;If you are going
to actually have the option of running a service on another machine, then you must
design it to follow distributed semantics from day one. You must design it with course-grained,
message-based interfaces. You must ensure that the service provider never trusts the
service consumer and visa versa. You must ensure that there is no shared state between
provider and consumer&amp;nbsp;- including that they can't share a database or any other
common resource.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;In short, you
must design the service provider and consumer with the &lt;i style="mso-bidi-font-style: normal"&gt;assumption&lt;/i&gt; that
they are running on separate machines. Then, having written them with distributed
semantics, you can choose to collapse the physical deployment so they run in the same
process on the same machine.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Failure to view
SOA as a distributed architecture is a big mistake. &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;In
SOA there&amp;#8217;s the absolute implication that the provider and consumer may be distributed.
Philosophically we are designing for a distributed scenario. The fact that we might &lt;i style="mso-bidi-font-style: normal"&gt;not&lt;/i&gt; be
distributed in some cases is immaterial. SOA means you &lt;i style="mso-bidi-font-style: normal"&gt;always&lt;/i&gt; design
using distribution semantics.&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=2d5d57fe-ce13-42ed-a59a-f749e376cd1b" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,2d5d57fe-ce13-42ed-a59a-f749e376cd1b.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=69104bf7-4d71-4e8b-b67f-907fc462ff6e</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,69104bf7-4d71-4e8b-b67f-907fc462ff6e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,69104bf7-4d71-4e8b-b67f-907fc462ff6e.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=69104bf7-4d71-4e8b-b67f-907fc462ff6e</wfw:commentRss>
      <title>Technologies for crossing tiers vs crossing trust boundaries</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,69104bf7-4d71-4e8b-b67f-907fc462ff6e.aspx</guid>
      <link>http://www.lhotka.net/weblog/TechnologiesForCrossingTiersVsCrossingTrustBoundaries.aspx</link>
      <pubDate>Thu, 21 Oct 2004 13:34:31 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;I&amp;#8217;ve
been involved in yet another discussion about whether people should use Remoting (vs
DCOM/Enterprise Services or ASMX/WSE), and I thought I&amp;#8217;d share some more of
my thoughts in this regard.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;One key presupposition
in this discussion is often than we&amp;#8217;re talking about communication across service
boundaries. The train of thought goes that Microsoft (at least the Indigo team) seems
to indicate that the only cross-network communication we&amp;#8217;ll ever do in the future
is across service boundaries. In short, n-tier is dead and will never happen. Anywhere
n-tier would exist should be treated as crossing a service (and thus trust) boundary.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;I consider that assumption
to be fundamentally flawed.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;Just because the Indigo
team sees a future entirely composed of services doesn't mean that is a correct answer.
When MSMQ first came out the MSMQ team was telling everyone that all communication
should be done through MSMQ. Filter through the absurd bias of the product teams and
apply some basic judgment and it is clear that not all cross-network communication
will be service-oriented. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;The idea of crossing
trust boundaries between parts of &lt;i style="mso-bidi-font-style: normal"&gt;my application&lt;/i&gt; incurs
a terribly high cost in terms of duplicate logic and overhead in converting data into/out
of messages. The complexity and overhead is tremendous and makes no sense for communication
between what &lt;i style="mso-bidi-font-style: normal"&gt;would have been&lt;/i&gt; trusted layers
in my application&amp;#8230;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;In a world where service-orientation
exists, but is not the only story, there's a big difference between creating a n-layer/n-tier
application and creating a set of applications that work together via services. They
are totally different things.&lt;/span&gt;&lt;span style="COLOR: black"&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="COLOR: black"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;I totally agree that
neither Remoting nor DCOM/ES are appropriate across service boundaries. Those technologies
are not appropriate between applications in general.&lt;/span&gt;&lt;span style="COLOR: blue"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="COLOR: black"&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;However, I obviously
do not for a minute buy the hype that service-orientation will obviate the need for
n-tier architectures. And between tiers of your application, ASMX/WSE is a very limited
and poor choice. As an example, ASMX/WSE uses the highly limited XmlSerializer, which
is virtually useless for transferring objects by value.&lt;/span&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; &lt;/font&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;Between
tiers of your application either Remoting or DCOM/ES are good choices.&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;Application tiers are
just application layers that happen to be separated across a network boundary. By
definition they are tightly coupled, because they are just layers of the same application.
There are many techniques you can use here, all of which tend to be tightly coupled
because you are inside the same service and trust boundary even though you are crossing
tiers.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;I&amp;#8217;ve personally
got no objection to using DCOM/ES between tiers running on different servers (like
web server to app server). The deployment and networking complexity incurred is relatively
immaterial in such scenarios.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;But if you are creating
rich or smart client tiers that talk to an app server then the loss of no-touch deployment
and the increased networking complexity incurred by DCOM/ES is an overwhelming negative.
In most cases this complexity and cost is far higher than the (rather substantial)
performance benefit. In this scenario Remoting is usually the best option. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;Of course, if you can&amp;#8217;t
or won&amp;#8217;t use Remoting in this case, you can always hack ASMX/WSE to simulate
Remoting to get the same result (with a small performance penalty). You can wrap both
ends of the process manually so you can use the BinaryFormatter and actually get pass-by-value
semantics with ASMX/WSE. The data on the wire is a Base64 byte array, but there's
no value in being "open" between layers of your own application anyway so it doesn't
matter.&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;There's a performance
hit due to the Base64 encoding, but it may be worth it to gain the benefits of WSE.
And it may be worth it so you can say that you are conforming to recommendations against
Remoting.&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;For better or worse,
Remoting does some things that neither DCOM/ES nor ASMX/WSE do well. You have the
choice of either using Remoting (with its commensurate issues) or of hacking to make
DCOM or ASMX/WSE do what Remoting can do. Neither choice is particularly appealing,
and hopefully Indigo will provide a better solution overall. Only time will tell.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=69104bf7-4d71-4e8b-b67f-907fc462ff6e" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,69104bf7-4d71-4e8b-b67f-907fc462ff6e.aspx</comments>
      <category>Distributed OO</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=071736df-06d1-4f37-8ca6-2e64ed6f650f</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,071736df-06d1-4f37-8ca6-2e64ed6f650f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,071736df-06d1-4f37-8ca6-2e64ed6f650f.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=071736df-06d1-4f37-8ca6-2e64ed6f650f</wfw:commentRss>
      <title>One way SOA is fundamentally new and different</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,071736df-06d1-4f37-8ca6-2e64ed6f650f.aspx</guid>
      <link>http://www.lhotka.net/weblog/OneWaySOAIsFundamentallyNewAndDifferent.aspx</link>
      <pubDate>Thu, 14 Oct 2004 19:12:59 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;I'm
listening to Pat Helland (a serious thought leader in the service-oriented space)
speak and it has me seriously thinking.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt;I think that one fundamental
difference between service-oriented thinking and n-tier is this:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;We've spent years trying to make
distributed systems look and feel like they run in a single memory space on a single
computer. But they DON'T. Service-oriented thinking is all about recognizing that
we really are running across multiple systems. It is recognition that you can&amp;#8217;t
trivialize, abstract or simplify this basic fact. &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;It
is acknowledgement that we just can&amp;#8217;t figure it out.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Things like distributed transactions
that are designed to make many computers look like one. Heck, CSLA .NET is all about
making multiple computers look like a single hosting space for objects.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And these things only fit into a
service-oriented setting &lt;i style="mso-bidi-font-style: normal"&gt;inside&lt;/i&gt; a service,
never between them. The whole point of service-orientation is that services are autonomous
and thus don&amp;#8217;t trust each other. Transactions (including work-arounds like optimistic
concurrency) are high-trust operations and thus can not exist &lt;i style="mso-bidi-font-style: normal"&gt;between&lt;/i&gt; autonomous
services &amp;#8211; they can only exist inside them.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;

&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
Personally I don&amp;#8217;t think this rules out n-layer or n-tier applications, or n-layer
and n-tier &lt;em&gt;services&lt;/em&gt;. But I do think it reveals how the overall service-oriented
may be fundamentally different from n-tier (or OO for that matter).
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&gt;&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=071736df-06d1-4f37-8ca6-2e64ed6f650f" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,071736df-06d1-4f37-8ca6-2e64ed6f650f.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=20a7f113-9595-432a-9640-0c5176799dc8</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,20a7f113-9595-432a-9640-0c5176799dc8.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,20a7f113-9595-432a-9640-0c5176799dc8.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=20a7f113-9595-432a-9640-0c5176799dc8</wfw:commentRss>
      <title>Where is Service-Oriented Design?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,20a7f113-9595-432a-9640-0c5176799dc8.aspx</guid>
      <link>http://www.lhotka.net/weblog/WhereIsServiceOrientedDesign.aspx</link>
      <pubDate>Tue, 28 Sep 2004 14:54:07 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;There&amp;#8217;s a lot of talk about
Service-Oriented Architecture (SOA), and Service-Oriented Programming-related constructs
like web services and SOAP. There&amp;#8217;s even a &lt;/font&gt;&lt;a href="http://blogs.msdn.com/richardt/archive/2004/08/30/222784.aspx"&gt;&lt;font face="Times New Roman" size=3&gt;bit
of talk&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; about Service-Oriented
Analysis. But where&amp;#8217;s the discussion of Service-Oriented Design?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I am quite convinced that service-orientation
(SO) is no less of a force than object-orientation (OO). For over 30 years our understanding
OO has been evolving and slowly, ever so slowly, gaining mindshare in the industry.
I think we can apply a (slightly modified) Grady Booch OO quote to SO as well:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;#8220;Let there be no doubt that &lt;b style="mso-bidi-font-weight: normal"&gt;service&lt;/b&gt;-oriented
design is fundamentally different than traditional structured &lt;b style="mso-bidi-font-weight: normal"&gt;or
object-oriented&lt;/b&gt; design approaches: it requires a different way of thinking about
decomposition, and it produces software architectures that are largely outside the
realm of the structure &lt;b style="mso-bidi-font-weight: normal"&gt;or object-oriented&lt;/b&gt; design
culture.&amp;#8221;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The bits in bold are my alterations/additions
to this famous quote.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;OO includes architecture, analysis,
design and programming. Understanding and use of all these components is required
to make effective use of OO in an enterprise. Precious few organizations ever pull
this off. It requires a major culture and skill shift, which is one key reason why
OO is still a popular sideline approach rather than the mainstream approach. (The
other key reason is lack of tool support for OO design and programming, but that&amp;#8217;s
another topic.)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If SO is as big a thing as OO, and
I suspect it is, then SO has decades ahead of it on the way to becoming a popular
sideline approach for software development. Maybe in that time OO will have become
mainstream, but I&amp;#8217;m not holding my breath&amp;#8230;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;As an aside, I very much hope that
OOA/D/P do become mainstream at some point. After all, we will need to &lt;i style="mso-bidi-font-style: normal"&gt;create&lt;/i&gt; services,
and a service is just an application with an XML interface (vs HTML or GUI). Creating
services requires programming in a more conventional sense, and we&amp;#8217;ll end up
choosing between data-centric and OO just like today. Personally I really want to
see more OO, because I believe it is far superior. But I&amp;#8217;m pragmatic enough
to know that it is far more likely that services will be created using the same data-centric
(Recordset, DataSet, XML document) mindsets that are prevalent today in Windows and
Web applications&amp;#8230;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In my wilder dreams I envision a
new programming language that is specifically geared around the creation of services.
It might be neither data-centric nor OO, but rather would directly include language
constructs to represent service-oriented concepts. I know Microsoft is grafting some
of these concepts into VB and C# through the WSE and Indigo technologies, but that&amp;#8217;s
like prototyping for something that should come later. Perhaps S#? A language with
natural expressions for the ideas inherent in SOA/D/P?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In any case, I am convinced that
over the next many years we&amp;#8217;ll need to develop SO architecture, analysis, design
and programming as disciplines. Processes, techniques and tools will need to be created
around all these areas. Perhaps we can do a better job with SO than we did with OO,
but that remains to be seen.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But the focus of my question today
is this: where is service-oriented design? There&amp;#8217;s lots of talk and debate about
service-oriented architecture. There&amp;#8217;s lots of movement around the creation
of technologies (like web services, SOAP and the WS-* stuff) to support service-oriented
programming. There&amp;#8217;s tiny bits and pieces of discussion about service-oriented
analysis. But I have yet to see any serious discussion of service-oriented design.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Service-oriented design is critical.
Doing service-oriented &lt;i style="mso-bidi-font-style: normal"&gt;programming&lt;/i&gt; without
service-oriented design is sure to lead to all sorts of unfortunate and unproductive
results. Any modern developer knows that you need to translate your architecture into
a tactical design for the architecture to be useful. You also know that programming
without a design is a sure-fire way to end up with lots of rework and wasted effort.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Service-oriented design isn&amp;#8217;t
about the enterprise messaging standards, or about the transport protocols (HTTP,
MSMQ, Biztalk, etc.). Nor is it about the application of WS-this or WS-that. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Service-oriented design is about
the design of service-based applications. &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;It
is philosophy. &lt;/span&gt;It includes the design of services, service clients and other
service-related software constructs. It must focus on concepts like &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;ul style="MARGIN-TOP: 0in" type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;relationships&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;encapsulation&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;message structures&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;data flow&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;process flow&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;coupling&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;cohesion&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;decomposition&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;functional grouping&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;abstraction&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;the service interface&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;the service implementation&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;granularity&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;shared context&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;and more&amp;#8230;&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;a href="http://c2.com/cgi/wiki?FundamentalFlawsInProceduralDesigns"&gt;&lt;font face="Times New Roman" size=3&gt;Click
here&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; for an interesting
discussion of procedural vs OO design. I think we need to have a similar discussion
around SO design. What is it that makes SO unique and different from procedural/structured
and OO design? Intuitively I tend to think that it is unique, but at this point it
hasn&amp;#8217;t been fleshed out and so we can&amp;#8217;t have intelligent or objective
discussions about &lt;i style="mso-bidi-font-style: normal"&gt;how&lt;/i&gt; or &lt;i style="mso-bidi-font-style: normal"&gt;when&lt;/i&gt; it
is different.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In the end, I think that SO will
require a comparable culture and skill shift to OO. In other words, moving to SO from
either the procedural/structured or OO worlds will require major cultural and philosophical
changes, and substantial retraining and relearning.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Does this mean OOA/D/P are dead?
Not on your life. Neither are procedural/structured design or programming. Most software
today is built using procedural techniques, mixed with half-hearted OO code. As we
move (over the next 30 years) toward SO, you can bet that procedural and OO will be
along for the ride as well.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=20a7f113-9595-432a-9640-0c5176799dc8" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,20a7f113-9595-432a-9640-0c5176799dc8.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=7592a370-be76-43bc-9270-ba1cce315919</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,7592a370-be76-43bc-9270-ba1cce315919.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,7592a370-be76-43bc-9270-ba1cce315919.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=7592a370-be76-43bc-9270-ba1cce315919</wfw:commentRss>
      <title>Science fiction and SOA</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,7592a370-be76-43bc-9270-ba1cce315919.aspx</guid>
      <link>http://www.lhotka.net/weblog/ScienceFictionAndSOA.aspx</link>
      <pubDate>Tue, 21 Sep 2004 13:59:04 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I read a lot of science fiction.
I travel a lot (which you can tell from my &lt;/font&gt;&lt;a href="/presentations.aspx"&gt;&lt;font face="Times New Roman" size=3&gt;list
of speaking engagements&lt;/font&gt;&lt;/a&gt;)&lt;font face="Times New Roman" color=#000000 size=3&gt; and
I find it very hard to work on a plane. You might think I&amp;#8217;d read computer books,
but I regard computer books as reference material, so I very rarely actually &lt;i style="mso-bidi-font-style: normal"&gt;read&lt;/i&gt; a
computer book, as much as skim it or use the index to find answers to specific questions&amp;#8230;
Besides, they are all so darn big, and it gets heavy carrying them around airports
:)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So what&amp;#8217;s the point of this
post? I recently read a very excellent book that I believe has a great deal of meaning
for the computer industry. Sure, it is science fiction, but it is also paints a picture
of what computing could look like if today&amp;#8217;s service-oriented concepts come
to true fruition.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The book is Vernor Vinge&amp;#8217;s &lt;/font&gt;&lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0812536355"&gt;&lt;font face="Times New Roman" size=3&gt;A
Deepness in the Sky&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;,
which is a prequel to &lt;/font&gt;&lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0812515285"&gt;&lt;font face="Times New Roman" size=3&gt;A
Fire Upon the Deep&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;. &lt;i style="mso-bidi-font-style: normal"&gt;Fire&lt;/i&gt; is
an excellent novel, and was written first. I highly recommend it. However, &lt;i style="mso-bidi-font-style: normal"&gt;Deepness&lt;/i&gt; is
the book to which I&amp;#8217;m referring when I talk about the links to the computer
industry.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I doubt the links are accidental.
Vernor Vinge is a retired &lt;/font&gt;&lt;a href="http://www-rohan.sdsu.edu/faculty/vinge/"&gt;&lt;font face="Times New Roman" size=3&gt;professor
of Computer Science&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt; in 
&lt;st1:place w:st="on"&gt;
&lt;st1:City w:st="on"&gt;San Diego&lt;/st1:City&gt;
&lt;/st1:place&gt;
, and obviously has some pretty serious understanding of computer science and related
issues.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I should point out that what follows
could give away key points in the story. The story is awesome, so if you are worried
about having it lose some of its impact then &lt;b style="mso-bidi-font-weight: normal"&gt;STOP
READING NOW&lt;/b&gt;. Seriously. Take my word for it, go buy and read the book, then come
back.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The technology used by the Qeng
Ho (the protagonist race, pronounced &amp;#8220;cheng ho&amp;#8221;) in the book is based
on two core concepts: aggregate systems and the wrapping/abstraction of older subsystems.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;First is the idea that all the systems
are aggregates of smaller systems, which are aggregates of smaller systems and so
forth. This is service-orientation incarnate. If you know the protocol/interface to
a system, you can incorporate it into another system, thus creating a new system that
is an aggregate of both. Extending this into something as complex as a starship or
a fleet of starships gives you the effect Vinge describes in the book.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And this is a compelling vision.
I have been in a bit of a funk over the past few months. It seems like our industry
is lost in the same kind of rabid fanaticism that dominates the 
&lt;st1:country-region w:st="on"&gt;
&lt;st1:place w:st="on"&gt;US&lt;/st1:place&gt;
&lt;/st1:country-region&gt;
political scene, and that is very depressing. You are either Java or .NET. You are
either VB or C#. That gets very old, very fast.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But Vinge has reminded me why I
got into computers in the first place. My original vision &amp;#8211; way back when &amp;#8211;
was to actually link two Asteroids arcade games together so multiple people could
play together. It may sound corny, but I have been all about distributed systems since
before such things existed.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And Vinge&amp;#8217;s vision of a future
where massively complex systems are constructed by enabling communication between
autonomous distributed systems is &lt;i style="mso-bidi-font-style: normal"&gt;exactly&lt;/i&gt; what
gets me excited! It is like object-oriented design meets distributed architecture
in a truly productive and awesome manner. If this really is the future of service-orientation
then sign me up!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The second main theme is the idea
that most systems wrap older sub-systems. Rather than rewriting or enhancing a subsystem,
it is just wrapped by a newer and more useful system. Often the new system is more
abstract, leaving hidden functionality available to those who know how to tap directly
into the older subsystem directly.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;This second theme enables the first.
Unless systems (and subsystems) are viewed as autonomous entities, it is impossible
to envision a scenario where service-oriented architecture is a dominant idea. For
better or worse, this includes dealing with the fact that you may not like the way
a system works. You just deal with it, because it is autonomous.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To digress a bit, what we&amp;#8217;ve
been trying to do for decades now is get computers to model real life. We tried with
procedures, then objects, then components. They all miss the boat, because the real
world is full of unpredictable behavior that we all just deal with. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;We deal with the jerks that use
the shoulder as an illegal turn lane. We deal with the fact that our federal tax cuts
just get redirected so we can pay local taxes and school levies. We deal with the
fact that some lady is so busy on the cell phone that she rear-ends you at 40 mph
when you are stopped at a red light. We deal with the fact that the networks run R
rated movie commercials during primetime when our kids are watching TV.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The point is that people and all
our real world systems and devices and machines are autonomous. All our interactions
in the real world are done through a set of protocols and we just hope to high heaven
that the other autonomous entities around us react appropriately.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Service-oriented architecture/design/programming
is the same thing. It has the potential to be the most accurate model of real life
yet. But this won&amp;#8217;t be painless, because any software we write must be ready
to deal with the autonomous nature of all the other entities in the virtual setting.
Those other autonomous entities are likely to do the direct equivalent of using the
shoulder as a turn lane &amp;#8211; they&amp;#8217;ll break the law for personal advantage
and from time to time they&amp;#8217;ll cause an accident and every now and then they&amp;#8217;ll
kill someone. This is true in the real world, and it is the future of software in
the service-oriented universe.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To bring this back to Vinge&amp;#8217;s &lt;i style="mso-bidi-font-style: normal"&gt;Deepness&lt;/i&gt;,
the various combatants in the book make full use of both the distributed autonomous
nature of their computer systems, and of the fact that the systems are wrapping old
&amp;#8211; even ancient &amp;#8211; subsystems with hidden features. It isn't understanding
a computer language that counts, it is understanding of ancient, lost features of
deeply buried subsystems that gives you power.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;We are given a vision of a future
where systems and subsystems are swapped and tweaked and changed and the overall big
system just keeps on working. At most, there&amp;#8217;s adaptation to some new protocol
or interface, but thanks to autonomy and abstraction the overall system keeps working.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;It is perfect? Absolutely not. In
fact I never saw the big twist coming &amp;#8211; nor did the protagonists or antagonists
in the book. The overall system was too complex, too autonomous. There was no way
they could have anticipated or monitored what eventually occurred. Very cool (if a
bit scary). But I don&amp;#8217;t want to spoil it entirely, so I&amp;#8217;ll leave it there.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Go read the book, hopefully it will
inspire some of the same excitement I got by reading it. It certainly gave me an appreciation
for the cool (and scary) aspects of a truly service-oriented world-view!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;
&lt;/o:p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=7592a370-be76-43bc-9270-ba1cce315919" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,7592a370-be76-43bc-9270-ba1cce315919.aspx</comments>
      <category>Books</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=a2661097-c587-43e5-99ca-2c947db1a029</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,a2661097-c587-43e5-99ca-2c947db1a029.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,a2661097-c587-43e5-99ca-2c947db1a029.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=a2661097-c587-43e5-99ca-2c947db1a029</wfw:commentRss>
      <title>More discussion on service-oriented and procedural programming</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,a2661097-c587-43e5-99ca-2c947db1a029.aspx</guid>
      <link>http://www.lhotka.net/weblog/MoreDiscussionOnServiceorientedAndProceduralProgramming.aspx</link>
      <pubDate>Thu, 09 Sep 2004 14:42:46 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I just love a good discussion, and
thanks to &lt;/font&gt;&lt;a href="http://www.neward.net/ted/weblog"&gt;&lt;font face="Times New Roman" size=3&gt;Ted&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; I&amp;#8217;m
now &lt;/font&gt;&lt;a href="http://www.neward.net/ted/weblog/index.jsp?date=20040908#1094709676078"&gt;&lt;font face="Times New Roman" size=3&gt;part
of one&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt; :-)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;A few days ago I posted &lt;/font&gt;&lt;a href="/WeBlog/PermaLink.aspx?guid=5c0574f6-6ccc-4ba0-beed-b8580712bbd1"&gt;&lt;font face="Times New Roman" size=3&gt;another
blog entry&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; about service-oriented
concepts, drawing a parallel to procedural design. Apparently and unsurprisingly,
this parallel doesn&amp;#8217;t sit too well with everyone out there.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I agree that SO has the &lt;i style="mso-bidi-font-style: normal"&gt;potential&lt;/i&gt; to
be something new and interesting. Maybe even on par with fundamental shifts like event-driven
programming and object-oriented design have been over the past couple decades. However,
I am far from convinced that it really is such a big, radical shift &amp;#8211; at least
in most people&amp;#8217;s minds.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;After all, at its core SO is just
about enabling my code to talk to your code. A problem space that has been hashed
and rehashed for more years than most of us have been in the industry.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Most people view SO as SOAP over
HTTP, which basically makes it the newest &lt;/font&gt;&lt;a href="http://sbc.webopedia.com/TERM/R/RPC.html"&gt;&lt;font face="Times New Roman" size=3&gt;RPC&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;/&lt;/font&gt;&lt;a href="http://www.hyperdictionary.com/computing/rmi"&gt;&lt;font face="Times New Roman" size=3&gt;RMI&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;/&lt;/font&gt;&lt;a href="http://www.webopedia.com/TERM/D/DCOM.html"&gt;&lt;font face="Times New Roman" size=3&gt;DCOM&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; technology.
And if that&amp;#8217;s how it is viewed, then it is a pretty poor replacement for any
of them&amp;#8230;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Some people view SO as a technology
independent concept that can be used to describe business systems, technology systems
&amp;#8211; almost anything. &lt;/font&gt;&lt;a href="http://blogs.msdn.com/pathelland"&gt;&lt;font face="Times New Roman" size=3&gt;Pat
Helland&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; makes this case
in some of his presentations. I love the analogy he makes by using SO to describe
an old-fashioned experience of coming in and ordering breakfast in a diner. That makes
all the sense in the world to me, and there&amp;#8217;s not a computer or XML fragment
involved in the whole thing.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Yet other people view SO as a messaging
technology. Basically this camp is all about SOAP, but isn&amp;#8217;t tied to HTTP (even
though there are precious few other transports that are available for SOAP today).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Obviously for SO to be a radical
new thing, one of the latter two views must be adopted, since otherwise RPC has it
covered.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face="Times New Roman"&gt;By far the most interesting
view (to me) is of SO as a modeling construct, not a technological one. If SO is a
way of describing and decomposing problem spaces in a new way, then &lt;i style="mso-bidi-font-style: normal"&gt;that&lt;/i&gt; is
interesting. Not that there&amp;#8217;s a whole lot of tool/product money to be had in
this view &amp;#8211; but there&amp;#8217;s lots of consulting/speaking/writing money to be
made. This could be the next RUP or something&amp;nbsp;:-)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Less interesting, but more tangible,
is the messaging view. Having worked with companies who have their primary infrastructure
built on messaging (using MQ Series or MSMQ), I find this view of SO to be less than
inspiring.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;It has been &lt;i style="mso-bidi-font-style: normal"&gt;done&lt;/i&gt; people!
And it works very nicely &amp;#8211; but let&amp;#8217;s face it, this view of SO is no more
interesting or innovative than the RPC view. The idea of passing messages between
autonomous applications is not new. And adding angle brackets around our data merely
helps the network hardware vendors sell more equipment, it doesn&amp;#8217;t fundamentally
change life.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Again, I call back to FORTRAN and
procedural programming. The whole idea behind procedural programming was to have a
set of autonomous procedures that could be called in an appropriate order (orchestrated)
in order to achieve the desired functionality. If we had not cheated &amp;#8211; if we
had actually passed all our data as parameters from procedure to procedure, it might
have actually worked. But we didn&amp;#8217;t (for a variety of good reasons), and so
it collapsed under its own weight.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Maybe SO can avoid this fate, since
its distributed nature makes cheating much more difficult. But even so, the design
concepts developed 20 years ago for procedural design and programming should apply
to SO today, since SO is merely procedural programming with a wire between the procedures.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So in short, other than SO as an
analysis tool, I continue to seriously struggle with how it is a transformative technology.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Either SO is a new RPC technology,
enabling cross-network component access using XML, or SO is a new messaging technology,
enabling the same autonomous communication we have with queuing technologies &amp;#8211;
but with the dubious advantage of angle brackets. Neither is overly compelling in
and of itself.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;And yet intuitively SO &lt;i style="mso-bidi-font-style: normal"&gt;feels&lt;/i&gt; like
a bigger thing. Maybe it is the vendor hype: IBM with their services and Microsoft
with their products &amp;#8211; everyone wants to turn the S in SOA into a $.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But there is this concept of &lt;i style="mso-bidi-font-style: normal"&gt;emergent
behavior&lt;/i&gt;, which is something I&amp;#8217;ve put a fair amount of energy into. Emergent
behavior is the idea that simple elements &amp;#8211; even rehashed technology concepts
&amp;#8211; can combine in unexpected ways such that new and interesting behaviors emerge.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Maybe, just maybe, SO will turn
out to be emergent by combining the concepts of RPC, messaging and angle brackets
into something new and revolutionary. Then again, maybe it is a passing fad, and SO
is really just another acronym for &lt;/font&gt;&lt;a href="http://www.webopedia.com/TERM/E/EDI.html"&gt;&lt;font face="Times New Roman" size=3&gt;EDI&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; or &lt;/font&gt;&lt;a href="http://computing-dictionary.thefreedictionary.com/EAI"&gt;&lt;font face="Times New Roman" size=3&gt;EAI&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt;.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=a2661097-c587-43e5-99ca-2c947db1a029" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,a2661097-c587-43e5-99ca-2c947db1a029.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=da83d427-b545-48cf-9962-77f51e58e1e9</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,da83d427-b545-48cf-9962-77f51e58e1e9.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,da83d427-b545-48cf-9962-77f51e58e1e9.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=da83d427-b545-48cf-9962-77f51e58e1e9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I rarely read magazines or articles - I just skim them to see if there's anything
I actually do want to invest the time to read. This is useful, because it means I
can get the gist of a lot of content and only dive into the bits that I find actually
interesting. It also means that I can (and do) read a lot of Java related stuff as
well as .NET related material.
</p>
        <p>
If you've followed my blog or my books, you know that I have a keen interest in distributed
object-oriented systems - which naturally has spilled over into this whole SOA/service
fad that's going on at the moment. So I do tend to actually read stuff dealing with
these topic areas in both the .NET and Java space.
</p>
        <p>
Interestingly enough, there's no difference between the two spaces. Both the .NET
and Java communities are entirely confused and both have lots of vendors trying to
convince us that their definitions are correct, so we'll buy the “right”
products to solve our theoretical problems. What a mess.
</p>
        <p>
          <a href="http://www.neward.net/ted/weblog/index.jsp">Ted Neward</a> has been engaged
in some interesting discussions about the message-based or object-based nature of
services. Now <a href="http://www.ftponline.com/javapro/2003_08/magazine/columns/proshop/default.aspx">Daniel
F. Savarese</a> has joined the fray as well. And all this in the Java space, where
they claim to be more mature and advanced than us lowly .NET guys... I guess not,
since their discussions are identical to those happening in the .NET space.
</p>
        <p>
I think the key point here is that the distributed OO and SOA issues and confusion
totally transcend any technical differences between .NET and Java. What I find unfortunate
is that most of the discussions on these topics are occuring within artificial technology
silos. Too few discussions occur <em>across</em> the .NET/Java boundary.
</p>
        <p>
When it comes to SOA and distributed object-oriented systems (which are two different
things!), every single concept, issue, problem and solution that applies to .NET applies
equally to Java and visa versa. Sure, the <em>vendor</em> implementations vary, but
that's not where the problem (or the solution) is found. The problems and solutions
are more abstract and are common across platforms.
</p>
        <p>
What's needed is an intelligent, honest and productive discussion of these issues
that is inclusive of people from all the key technology backgrounds. I imagine that
will happen about the same time that we have any sort of intelligent, honest or
productive discussion between Republicans and Democrats in the US government...
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=da83d427-b545-48cf-9962-77f51e58e1e9" />
      </body>
      <title>Distributed Object-Oriented systems, SOA and Java?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,da83d427-b545-48cf-9962-77f51e58e1e9.aspx</guid>
      <link>http://www.lhotka.net/weblog/DistributedObjectOrientedSystemsSOAAndJava.aspx</link>
      <pubDate>Wed, 07 Jul 2004 17:52:56 GMT</pubDate>
      <description>&lt;p&gt;
I rarely read magazines or articles - I just skim them to see if there's anything
I actually do want to invest the time to read. This is useful, because it means I
can get the gist of a lot of content and only dive into the bits that I find actually
interesting. It also means that I can (and do) read a lot of Java related stuff as
well as .NET related material.
&lt;/p&gt;
&lt;p&gt;
If you've followed my blog or my books, you know that I have a keen interest in distributed
object-oriented systems - which naturally has spilled over into this whole SOA/service
fad that's going on at the moment. So I do tend to actually read stuff dealing with
these topic areas&amp;nbsp;in both the .NET and Java space.
&lt;/p&gt;
&lt;p&gt;
Interestingly enough, there's no difference between the two spaces. Both the .NET
and Java communities are entirely confused and both have lots of vendors trying to
convince us that their definitions are correct, so we'll buy the &amp;#8220;right&amp;#8221;
products to solve our theoretical problems. What a mess.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.neward.net/ted/weblog/index.jsp"&gt;Ted Neward&lt;/a&gt; has been engaged
in some interesting discussions about the message-based or object-based nature of
services. Now &lt;a href="http://www.ftponline.com/javapro/2003_08/magazine/columns/proshop/default.aspx"&gt;Daniel
F. Savarese&lt;/a&gt; has joined the fray as well. And all this in the Java space, where
they claim to be more mature and advanced than us lowly .NET guys... I guess not,
since their discussions are identical to those happening in the .NET space.
&lt;/p&gt;
&lt;p&gt;
I think the key point here is that the distributed OO and SOA issues and confusion
totally transcend any technical differences between .NET and Java. What I find unfortunate
is that most of the discussions on these topics are occuring within artificial technology
silos. Too few discussions occur &lt;em&gt;across&lt;/em&gt; the .NET/Java boundary.
&lt;/p&gt;
&lt;p&gt;
When it comes to SOA and distributed object-oriented systems (which are two different
things!), every single concept, issue, problem and solution that applies to .NET applies
equally to Java and visa versa. Sure, the &lt;em&gt;vendor&lt;/em&gt; implementations vary, but
that's not where the problem (or the solution) is found. The problems and solutions
are more abstract and are common across platforms.
&lt;/p&gt;
&lt;p&gt;
What's needed is an intelligent, honest and productive discussion of these issues
that is inclusive of people from all the key technology backgrounds. I imagine that
will happen about the same time that we have any sort of intelligent, honest&amp;nbsp;or
productive&amp;nbsp;discussion between Republicans and Democrats in the US government...
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=da83d427-b545-48cf-9962-77f51e58e1e9" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,da83d427-b545-48cf-9962-77f51e58e1e9.aspx</comments>
      <category>Distributed OO</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=d0eab99b-5bbf-46fa-81e6-7542195b9bd1</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,d0eab99b-5bbf-46fa-81e6-7542195b9bd1.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,d0eab99b-5bbf-46fa-81e6-7542195b9bd1.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=d0eab99b-5bbf-46fa-81e6-7542195b9bd1</wfw:commentRss>
      <title>SOA, CSLA .NET and trust boundaries</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,d0eab99b-5bbf-46fa-81e6-7542195b9bd1.aspx</guid>
      <link>http://www.lhotka.net/weblog/SOACSLANETAndTrustBoundaries.aspx</link>
      <pubDate>Sat, 12 Jun 2004 00:25:44 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I recently had a reader of my business
objects book ask about combining &lt;/font&gt;&lt;a href="/ArticleIndex.aspx?area=CSLA%20.NET"&gt;&lt;font face="Times New Roman" size=3&gt;CSLA
.NET&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; and SOA concepts
into a single application. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Certainly there are very valid ways
of implementing services and client applications using CSLA such that the result fits
nicely into the SOA world. For instance, in Chapter 10 I specifically demonstrate
how to create services based on CSLA-style business objects, and in some of my VS
Live presentations I discuss how consumption of SOA-style services fits directly into
the CSLA architecture within the DataPortal_xyz methods (instead of using ADO.NET).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But the reader put forth the following,
which I wanted to discuss in more detail. The text in italics is the reader’s view
of Microsoft’s “standard” SOA architecture. My response follows in normal text:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;1.
Here is the simplified MS’s “standard” layering, 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;(a)
UI Components 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;(b)
UI Process Components [UI never talk to BSI/BC directly, must via UIP]&lt;b&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;b&gt;&lt;i style="mso-bidi-font-style: normal"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/i&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;(c)
Service Interfaces 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;(d)
Business Components [UIP never talk to D directly, must via BC&lt;b&gt;]&lt;/b&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;(e)
Business Entities&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;(f)
Data Access Logic Components 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;I’m
aware of its “transaction script” and “anemic domain model” tendency, but it is perhaps
easier for integration and using tools.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To be clear, I think this portrayal
of ‘SOA’ is misleading and dangerous. SOA describes the interactions between separate
applications, while this would lead one into thinking that SOA is used &lt;i style="mso-bidi-font-style: normal"&gt;inside&lt;/i&gt; an
application between tiers. I believe that is entirely wrong – and if you pay attention
to what noted experts like Pat Helland are saying, you’ll see that this approach is
invalid.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;SOA describes a loosely-coupled,
message-based set of interactions between applications or services. But in this context,
the word ‘service’ is synonymous with ‘application’, since services must stand alone
and be entirely self-sufficient. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;font size=3&gt;&lt;font face="Times New Roman"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;Under
no circumstance&lt;/i&gt; can you view a ‘tier’ as a ‘service’ in the context of SOA. A
tier is part of an application, and implements part of the application’s overall functionality.
Tiers are not designed to stand alone or be used by arbitrary clients – they are designed
for use by the rest of their application. I &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;a href="/WeBlog/PermaLink.aspx?guid=9e06bcfd-380d-4ef6-9263-2f8527492945"&gt;&lt;font face="Times New Roman" size=3&gt;discussed
this earlier&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; in my post
on trust boundaries, and how services inherently create new trust boundaries by their
very nature.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So in my view you are describing
at least two separate applications. You have an application with a GUI or web UI (a
and b or &lt;b style="mso-bidi-font-weight: normal"&gt;ab&lt;/b&gt;), and an application with
an XML interface (c, d, e and f or &lt;b style="mso-bidi-font-weight: normal"&gt;cdef&lt;/b&gt;).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To fit into the SOA model, each
of these applications (&lt;b style="mso-bidi-font-weight: normal"&gt;ab&lt;/b&gt; and &lt;b style="mso-bidi-font-weight: normal"&gt;cdef&lt;/b&gt;)
is separate and must stand alone. They are not tiers in a single application, but
rather are two separate applications that interact. The XML interface from &lt;b style="mso-bidi-font-weight: normal"&gt;cdef&lt;/b&gt; must
be designed to service not only the &lt;b style="mso-bidi-font-weight: normal"&gt;ab&lt;/b&gt; application,
but any other applications that need its functionality. That’s the whole point of
an SOA-based model – to make this type of functionality broadly available and reusable.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Likewise, application &lt;b style="mso-bidi-font-weight: normal"&gt;ab&lt;/b&gt; should
be viewed as a full-blown application. The design of &lt;b style="mso-bidi-font-weight: normal"&gt;ab&lt;/b&gt; shouldn’t
necessarily eschew business logic – especially validation, but likely also including
some calculations or other data manipulation. After all, it is the job of the designer
of &lt;b style="mso-bidi-font-weight: normal"&gt;ab&lt;/b&gt; to provide the user with a satisfactory
experience based on their requirements – which is similar, but not the same, as the
set of requirements for &lt;b style="mso-bidi-font-weight: normal"&gt;cdef&lt;/b&gt;.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Yes, this &lt;i style="mso-bidi-font-style: normal"&gt;does&lt;/i&gt; mean
that you’ll have duplicate logic in &lt;b style="mso-bidi-font-weight: normal"&gt;ab&lt;/b&gt; and &lt;b style="mso-bidi-font-weight: normal"&gt;cdef&lt;/b&gt;.
That’s one of the side-effects of SOA. If you don’t like it, don’t use SOA.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But there’s nothing to stop you
from using CSLA .NET as a model to create either &lt;b style="mso-bidi-font-weight: normal"&gt;ab&lt;/b&gt; or &lt;b style="mso-bidi-font-weight: normal"&gt;cdef&lt;/b&gt; or
both.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To create &lt;b style="mso-bidi-font-weight: normal"&gt;ab&lt;/b&gt; with
CSLA .NET, you’d design a set of business objects (with as little or much logic as
you felt was required). Since ab doesn’t have a data store of its own, but rather
uses &lt;b style="mso-bidi-font-weight: normal"&gt;cdef&lt;/b&gt; as a data store, the DataPortal_xyz
methods in the business objects would call the services exposed by &lt;b style="mso-bidi-font-weight: normal"&gt;cdef&lt;/b&gt; to
retrieve and update data as needed.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To create &lt;b style="mso-bidi-font-weight: normal"&gt;cdef&lt;/b&gt; with
CSLA .NET, you’d follow the basic concepts I discuss in Chapter 10 in my &lt;/font&gt;&lt;a href="/ArticleIndex.aspx?area=CSLA%20.NET"&gt;&lt;font face="Times New Roman" size=3&gt;VB.NET
and C# Business Objects&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" color=#000000 size=3&gt; books.
The basic concept is that you create a set of XML web services as an interface that
provides the outside world with data and/or functionality. The functionality and data
is provided from a set of CSLA .NET objects, which are used by the web services themselves. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Note that the CSLA-style business
objects are &lt;i style="mso-bidi-font-style: normal"&gt;not &lt;/i&gt;directly exposed to the
outside world – there is a formal interface definition for the web services which
is separate from the CSLA-style business objects themselves. This provides separation
of interface (the web services) from implementation (the CSLA-style business objects).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=d0eab99b-5bbf-46fa-81e6-7542195b9bd1" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,d0eab99b-5bbf-46fa-81e6-7542195b9bd1.aspx</comments>
      <category>CSLA .NET</category>
      <category>Distributed OO</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=edfbccdf-ccc8-4e89-b9e2-7dd3f9f58c86</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,edfbccdf-ccc8-4e89-b9e2-7dd3f9f58c86.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,edfbccdf-ccc8-4e89-b9e2-7dd3f9f58c86.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=edfbccdf-ccc8-4e89-b9e2-7dd3f9f58c86</wfw:commentRss>
      <title>Services, Objects and People, Oh my!</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,edfbccdf-ccc8-4e89-b9e2-7dd3f9f58c86.aspx</guid>
      <link>http://www.lhotka.net/weblog/ServicesObjectsAndPeopleOhMy.aspx</link>
      <pubDate>Sun, 30 May 2004 02:53:54 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;This
week at Tech Ed in 
&lt;st1:City w:st="on"&gt;
&lt;st1:place w:st="on"&gt;San Diego&lt;/st1:place&gt;
&lt;/st1:City&gt;
I got an opportunity to talk to &lt;a href="http://www.chappellassoc.com/"&gt;David Chappell &lt;/a&gt;and
trade some thoughts about SOA, Biztalk and Web services. I always enjoy getting an
opportunity to talk to David, as he is an incredibly intelligent and thoughtful person.
Better still, he always brings a fresh perspective to topics that I appreciate greatly.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In this case we got to talking about
his Biztalk presentation, which he delivered at Tech Ed. Unfortunately I missed the
talk due to other commitments, but I did get some of the salient bits from our conversation.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;David put forth that the SOA world
is divided into three things: services, objects and data. Services interact with each
other following SOA principles of loose coupling and message-based communication.
Services are typically composed of objects. Objects interact with data &amp;#8211; typically
stored in databases.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;All of this makes sense to me, and
meshes well with my view of how services fit into the world at large. Unfortunately
we had to cut the conversation short, as I had a Cabana session to deliver with &lt;a href="http://www.neward.net/ted/weblog/index.jsp"&gt;Ted
Neward&lt;/a&gt;, &lt;a href="http://www.vergentsoftware.com/blogs/ckinsman/default.aspx"&gt;Chris
Kinsman &lt;/a&gt;and &lt;a href="http://weblogs.asp.net/kpleas/"&gt;Keith Pleas&lt;/a&gt;. Interestingly
enough, Ted and I got into some great discussions with the attendees of the session
about SOA, the role of objects and where (or if) object-relational mapping has any
value.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;But back to my SOA conversation
with David. David&amp;#8217;s terminology scheme is nice, because it avoids the use of
the word &amp;#8216;application&amp;#8217;. Trying to apply this word to an SOA world is problematic
because it becomes rapidly overloaded. Let&amp;#8217;s explore that a bit based on my
observations regarding the use of the word &amp;#8216;application&amp;#8217;.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Applications expose services, thus
implying that applications are &amp;#8220;service hosts&amp;#8221;, or that services are a
type of interface to an application. This makes sense to most people.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;However, we are now talking about
creating SOA applications. These are applications that exist only because they call
services and aggregate data and functionality from those services. Such applications
may or may not host services in and of themselves.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If that wasn&amp;#8217;t enough, there&amp;#8217;s
the idea being that tiers &lt;i style="mso-bidi-font-style: normal"&gt;within an application&lt;/i&gt; should
expose services for use by other tiers in the application. It is often postulated
that these tier-level services should be public for use by other applications as well
as the &amp;#8216;hosting&amp;#8217; application.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So now things are very complex.
An application is a service. An application hosts services. An application is composed
of services. An application can contain services that may be exposed to other parts
of itself and to others. Oy!&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Thus, the idea of avoiding the word
&amp;#8216;application&amp;#8217; strikes me as being a Good Thing&amp;#8482;.&lt;/font&gt;
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;em&gt;The use of the trademark symbol
for this phrase flows, as far as I know, from J. Michael Straczynski (jms). It may
be a bit of Babylon 5 insider trivia, but every time I use the phrase, the&amp;nbsp;&amp;#8482;
goes through my head...&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Later in the conference, David and
I met up again and talked further. In the meantime I&amp;#8217;d been thinking that something
was missing from David&amp;#8217;s model. Specifically, it is the people. Not only users,
but other people that might interact with the overall SOA system at large. David put
forth that there&amp;#8217;s a couple other things in the mix &amp;#8211; specifically user
interfaces and workflow processes, and that this is where the people fit in.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;However, I think there&amp;#8217;s a
bit more to it than this. I think that for an SOA model to be complete, the people
need to truly fit into the model itself. In other words, they must become active participants
in the model in the same way that services, objects and data are active participants.
Rather than saying that a user interface is another element of the model, I propose
that the &lt;i style="mso-bidi-font-style: normal"&gt;human&lt;/i&gt; become another element of
the model.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;As an aside, I realize that there&amp;#8217;s
something a bit odd or even scary about treating human beings as just another part
of a system model, but I think there&amp;#8217;s some value in this exercise. This is
no different than what business process analysts do when they are looking at manufacturing
processes. Humans are put at the same level as machines that are part of the process
and are assigned run rates, costs, overhead and so forth. From that perspective, applying
this same view to software seems quite valid to me.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So, the question then becomes whether
a human is a new entity in the model, or is a sub-type of service, object or data.
The way to solve this is to see if a human can fit the role of one of the three pre-existing
model concepts.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;My first instinct was to view a
human as a service. After all, services interact with other services, and the human
interacts with our system and visa versa. However, services interact using loose coupled,
message-based communication. Typically our systems interact with users through a Windows
or Web interface. This is not message-based, but rather is really quite tightly coupled.
We give the user specific, discrete bits of data and we get back specific, discrete
bits of data.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Certainly there are examples of
message-based interaction with humans. For instance, some systems send humans an email
or a fax, and the human later responds in some fashion. Even in this case, however,
the human&amp;#8217;s response is typically tightly coupled rather than message-based.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Ultimately, then, I don&amp;#8217;t
think we can view a human as a type of service due to the violation of SOA communication
requirements.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;How about having a human be an object?
Other than the obvious puns about objectification of humans (women, men or otherwise),
this falls apart pretty quickly. Objects live inside of services and interact with
other objects within that service. While it is certainly true that objects use tightly
coupled communication, and so do humans, I think it is hard to argue that a human
is contained within a given service.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Only one left. Are humans data?
Data is used by objects within a service. More generally, data is an external resource
that our system uses by calling a service, which uses its objects to interact with
this external&amp;nbsp;resource. Typically this is done by calling stored procedures,
where we send the resource a set of discrete data or parameters, and the resource
returns a set of discrete data.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;This sounds terribly similar to
how our system interacts with humans. If we turn the idea of a user interface on its
head, we could view our system as the actor, and the human as a resource. In such
a case, when we display data on a screen, we are basically providing discrete data
parameters to a resource (the human) in much the same way we provide parameters to
a database via a stored procedure call. The human then responds to our system by providing
a set of results in the form of discrete data. This could easily be viewed as equivalent
to the results of a stored procedure call.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Following this train of thought,
a human really can be viewed as a resource very much like a data source. Any user
interfaces we implement are really nothing more than a fancy data access layer within
a service. A bit more complex than ADO.NET perhaps, but still the same basic concept.
Our system needs to retrieve or alter data and we&amp;#8217;re calling out to an external
resource to get it.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I put this idea forward to David,
who thought it sounded interesting, but didn&amp;#8217;t see where it helped anything.
I can&amp;#8217;t say that I&amp;#8217;m convinced that it helps anything either, but intuitively
I think there&amp;#8217;s value here.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I think the value may lie in how
we describe our overall system. And this is important, because SOA is all about the
overall systems in our organizations. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Nothing makes this more evident
than Biztalk 2004 and its orchestration engine. This tool is really all about orchestrating
services together into some meaningful process to get work done. However, people are
part of almost any real business process, which implies that somewhere in most Biztalk
diagrams there should be people. But there aren&amp;#8217;t. Maybe that&amp;#8217;s because
people aren&amp;#8217;t services, so Biztalk can&amp;#8217;t interact with them directly.
Instead, Biztalk needs to interact with services that in turn interact with the people
as a resource &amp;#8211; asking for them to provide data, or to perform some external
action and report the result (which is again, just data).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Then again, maybe my thought processes
are just totally randomized after being on the road for four weeks straight and this
last week being Tech Ed, which is just a wee bit busy (day and night)&amp;#8230; I guess
only time will tell. When we start seeing humans show up in our system diagrams we&amp;#8217;ll
get a better idea how and where we, as a species, fit into this new SOA world order.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=edfbccdf-ccc8-4e89-b9e2-7dd3f9f58c86" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,edfbccdf-ccc8-4e89-b9e2-7dd3f9f58c86.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=9e06bcfd-380d-4ef6-9263-2f8527492945</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,9e06bcfd-380d-4ef6-9263-2f8527492945.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,9e06bcfd-380d-4ef6-9263-2f8527492945.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=9e06bcfd-380d-4ef6-9263-2f8527492945</wfw:commentRss>
      <title>Remoting, web services, SOA and trust boundaries</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,9e06bcfd-380d-4ef6-9263-2f8527492945.aspx</guid>
      <link>http://www.lhotka.net/weblog/RemotingWebServicesSOAAndTrustBoundaries.aspx</link>
      <pubDate>Fri, 09 Apr 2004 01:13:51 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;Totally
unrelated to my previous blog entry, I received an email asking me about the &amp;#8216;future
of remoting&amp;#8217; as it relates to web services and SOA.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;It seems that
the sender of the email got some advice from Microsoft indicating that the default
choice for all network communication should be web services, and that instead of using
conventional tiers in applications, that we should all be using SOA concepts instead.
Failing that, we should use Enterprise Services (and thus presumably DCOM (shudder!)),
and should only use remoting as a last resort.&lt;/span&gt;
&lt;/p&gt;
&lt;div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt"&gt;
&lt;p style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-padding-alt: 0in 0in 1.0pt 0in; mso-border-bottom-alt: solid windowtext .75pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Not surprisingly,
I disagree. My answer follows&amp;#8230;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-padding-alt: 0in 0in 1.0pt 0in; mso-border-bottom-alt: solid windowtext .75pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Frankly, I
flat out disagree with what you've been told. Any advice&amp;nbsp;that starts with "default
choices" is silly. There is no such thing - our environments are too complex for such
simplistic views on architecture.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Unless you
are willing to rearchitect your system to be a network of linked _applications_ rather
than a set of tiers, you have no business applying SOA concepts. Applying SOA is a &lt;i style="mso-bidi-font-style: normal"&gt;big&lt;/i&gt; choice,
because there is a very high cost to its application (in terms of complexity and performance). 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;SOA is very,
very cool, and is a very good thing when appropriately applied. Attempting to change
classic client/server scenarios into SOA scenarios is typically the wrong approach.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;While SOA
is a much bigger thing than web services, it turns out that web services are mostly
only useful for SOA models. This is because they employ an open standard, so exposing
your 'middle tier' as a set of web services really means you have exposed the 'middle
tier' to any app on your network. This &lt;i style="mso-bidi-font-style: normal"&gt;forces&lt;/i&gt; the
'middle tier' to become an application (because you have created a trust boundary
that didn't previously exist). As soon as you employ web services you have created
a separate application, not a tier. This is a HUGE architectural step, and basically
forces you to employ SOA concepts - even if you would prefer to use simpler and faster
client/server concepts.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Remoting offers
superior features and performance when compared to web services. It is the most appropriate
client/server technology available in .NET today. If you aren't crossing trust boundaries
(and don't want to artificially impose them with web services), then remoting is the
correct technology to use.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Indigo supports
the _concepts_ of remoting (namely the ability to pass .NET types with full fidelity,
and the ability to have connection-based objects like remoting's activated objects).
Indigo &lt;i style="mso-bidi-font-style: normal"&gt;has&lt;/i&gt; to support these concepts, because
it is supposed to be the future of both the open web service technology and the higher
performance client/server technology for .NET.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;The point
I'm making, is that using remoting today is good if you are staying within trust boundaries.
It doesn't preclude moving to Indigo in the future, because Indigo will also provide
solutions for communication within trust boundaries, with full .NET type fidelity
(and other cool features).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Web services
force the use of SOA, even if it isn't appropriate. They should be approached with
caution and forethought. &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Specifically,
you should give serious thought to where you want or need to have trust boundaries
in your enterprise and in your application design. Trust boundaries have a high cost,
so inserting them between what &lt;em&gt;should&lt;/em&gt; have been tiers of an application is
typically a very, very bad idea.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;On the other
hand, using remoting between applications is an equally bad idea. In such cases you
should always look at SOA as a philosophy, and potentially web services as a technical
solution (though frankly, today the better SOA technology is often queuing (MQ Series
or MSMQ), rather than web services).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=9e06bcfd-380d-4ef6-9263-2f8527492945" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,9e06bcfd-380d-4ef6-9263-2f8527492945.aspx</comments>
      <category>Distributed OO</category>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=05f88592-9ecb-4331-a86b-cfeebc411dfe</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,05f88592-9ecb-4331-a86b-cfeebc411dfe.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,05f88592-9ecb-4331-a86b-cfeebc411dfe.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=05f88592-9ecb-4331-a86b-cfeebc411dfe</wfw:commentRss>
      <title>SOA, dollar signs and trust boundaries</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,05f88592-9ecb-4331-a86b-cfeebc411dfe.aspx</guid>
      <link>http://www.lhotka.net/weblog/SOADollarSignsAndTrustBoundaries.aspx</link>
      <pubDate>Thu, 08 Apr 2004 15:27:35 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;A number of people have asked me
about my thoughts on SOA (service-oriented architecture). I have a great deal of interest
in SOA, and a number of fairly serious thoughts and concerns about it. But my first
response is always this.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The S in SOA is actually a dollar
sign ($OA).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;It is a dollar sign because SOA
is going to cost a lot of people a lot of money, and it will make a lot of other people
a lot of money.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;It will make money for product vendors,
as they slap the SOA moniker on all sorts of tools and products around web service
creation, consumption and management. And around things like XML translators and transformers,
and queue bridging software and transaction monitors and so forth. Nothing particularly
new, but with the SOA label, these relatively old concepts become fresh and worthy
of high price tags.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;It will make money for service vendors
(consultants) in a couple ways. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The first are the consultants that
convince clients that SOA is the way to go &amp;#8211; and that it is big and scary and
that the only way to make it work is to pay lots of consulting dollars. SOA, in this
world-view, involves business process reengineering, rip-and-replace of applications,
massive amounts of new infrastructure (planning and implementation) and so forth.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The second are the consultants who
come in to clean up after the first group make a mess of everything. This second group
will also get to clean even after many clients who didn&amp;#8217;t spend on big consulting
dollars, but bought into the product vendors&amp;#8217; hype around SOA and their quasi-related
products.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Who loses money? The clients who
buy the hyped products, or fall for the huge consulting price tags due to FUD or the
overall hype of SOA.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Since I work in consulting, SOA
means dollars flowing toward me, so you&amp;#8217;d think I&amp;#8217;d be thrilled. But I
am not. This is a big train wreck just waiting to derail what should be a powerful
and awesome architectural concept (namely SOA).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So, in a (most likely vain) effort
to head this off, here are some key thoughts.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;ol style="MARGIN-TOP: 0in" type=1&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;SOA is not about products, or even
about web services. It is an architectural philosophy and concept that should drive
enterprise and application architecture.&lt;br style="mso-special-character: line-break"&gt;
&lt;br style="mso-special-character: line-break"&gt;
&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;SOA is not useful INSIDE applications.
It is only useful BETWEEN applications. 
&lt;br&gt;
&lt;br&gt;
If you think you can replace your TIERS with SOA concepts, you are already in deep
trouble. Unless you turn your tiers into full-blown applications, you have no business
applying SOA between them.&lt;br style="mso-special-character: line-break"&gt;
&lt;br style="mso-special-character: line-break"&gt;
&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Another way to look at #2 is to
discuss trust boundaries. Tiers within an application trust each other. That&amp;#8217;s
why they are tiers. Applications don&amp;#8217;t trust each other. They can&amp;#8217;t, since
there&amp;#8217;s no way to know if different applications implement the same rules the
same ways.&lt;br&gt;
&lt;br&gt;
SOA is an idea philosophy and concept to help cross trust boundaries. If you don&amp;#8217;t
cross a trust boundary, you don&amp;#8217;t want SOA in there causing complexity. But
if you do cross a trust boundary, you want SOA in there helping you to safely manage
those trust and connectivity issues.&lt;br style="mso-special-character: line-break"&gt;
&lt;br style="mso-special-character: line-break"&gt;
&lt;/font&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;To turn #3 around, if you are using
SOA concepts, then you are crossing a trust boundary. Even if you didn&amp;#8217;t plan
for, or intend to insert a trust boundary at that location in your design, you just
did.&lt;br&gt;
&lt;br&gt;
The side-effect of this is that anywhere that you use SOA concepts between bits of
code, those bits of code must become applications, and must stop trusting each other.
Each bit of code must implement its own set of business rules, processing, etc. 
&lt;br&gt;
&lt;br&gt;
Thus, sticking SOA between the UI and middle tiers of an application, means that you
now have two applications &amp;#8211; one that interacts with the user, and one that interacts
with other applications (including, but obviously not limited to your UI application).
Because you&amp;#8217;ve now inserted a trust boundary, the UI app can&amp;#8217;t trust the
service app, nor can the service app trust the UI app. Both apps must implement all
your validation, calculation, data manipulation and authorization code, because you
can&amp;#8217;t trust that either one has it right. 
&lt;br&gt;
&lt;br&gt;
More importantly, you can&amp;#8217;t trust that FUTURE applications (UI or service) will
have it right, and SOA will allow those other application to tap into your current
applications essentially without warning. This, fundamentally, is why inserting SOA
concepts means you have inserted a trust boundary. If not today, in the future you
WILL have untrusted applications interacting with your current applications and they&amp;#8217;ll
try to do things wrong. If you aren&amp;#8217;t defensive from the very start, you&amp;#8217;ll
be in for a world of hurt.&lt;/font&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;In the end, I think the trust boundary
mindset is most valuable guide for SOA. Using SOA is expensive (in terms of complexity
and performance). It is not a price you should be willing to pay to have your UI talk
to a middle tier. There are far simpler, cheaper and faster philosophies, concepts
and technologies available for such interaction.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;On the other hand, crossing trust
boundaries is expensive and complex all by itself. This is because we have different
applications interacting with each other. It will always be expensive. In this case,
SOA offers a very nice way to look at this type of inter-application communication
across trust boundaries, and can actually decrease the overall cost and complexity
of the effort.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=05f88592-9ecb-4331-a86b-cfeebc411dfe" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,05f88592-9ecb-4331-a86b-cfeebc411dfe.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=251785fe-4ee9-4028-8925-4afee73de668</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,251785fe-4ee9-4028-8925-4afee73de668.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,251785fe-4ee9-4028-8925-4afee73de668.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=251785fe-4ee9-4028-8925-4afee73de668</wfw:commentRss>
      <title>Are web services components or applications?</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,251785fe-4ee9-4028-8925-4afee73de668.aspx</guid>
      <link>http://www.lhotka.net/weblog/AreWebServicesComponentsOrApplications.aspx</link>
      <pubDate>Wed, 11 Feb 2004 22:00:44 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Applications or Components?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;When you create a system with web
services, are your web services components or are they standalone applications?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;While this might seem like a semantic
question, it is actually a very big deal, with a lot of implications in terms of your
overall application design, as well as the design of the web services themselves.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I specifically argue that web services
are the &amp;#8216;user interface&amp;#8217; to a standalone application. Any other view of
web services is flawed and will ultimately lead to a seriously flawed application
environment.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Another, simpler, way to put this
is that &amp;#8220;a web service is an application, not a tier in an application&amp;#8221;.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Perhaps the key reason this is such
an important thing to realize is that almost anyone can use a web service. It isn&amp;#8217;t
like we get to pick which other apps will call our web service. Web services are discoverable,
and someone, somewhere in our organization (or outside) will discover our web service
and will start using it.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If we designed the web service as
a tier in our application, we would design it to trust our higher level tiers. If
the higher level tier did a bunch of calculations or validations, it would be silly
to replicate that functionality in a lower level tier.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;On the other hand, if the web service
is a standalone application that merely has an XML interface (as compared to a GUI
or HTML interface), it must implement its own calculations and validations. It would
be silly for an application &lt;i style="mso-bidi-font-style: normal"&gt;not&lt;/i&gt; to implement
this type of functionality.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;So let&amp;#8217;s get back to the component
vs application thing. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Components are generally viewed
as entities that live within applications. A component provides some functionality
that our application can use. But components often have a high degree of trust in
the application, and the application certainly has a high degree of trust in the component.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Think of Windows Forms controls,
ActiveX controls, encryption libraries, data access (like ADO.NET) and so forth. These
are all examples of components, and it is pretty clear that there&amp;#8217;s a high level
of trust between them and their hosting applications.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Viewing a web service as a component
implies that it is &lt;i style="mso-bidi-font-style: normal"&gt;part of&lt;/i&gt; an application,
rather than actually being an application. This implies a higher level of trust than
can be granted to something that is essentially a public API that can be invoked by
any application in our organization (or beyond).&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Applications, on the other hand,
don&amp;#8217;t trust each other. They trade data, they send messages, but they don&amp;#8217;t
trust. We&amp;#8217;ve probably all be burned (multiple times) by having too much trust
between applications, and we know that it is a bad thing.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;By viewing a web service as an application,
we can apply full application design principles to its creation. It has a presentation
tier (the XML web service itself), a business tier (hopefully a set of business objects,
or at least a business DLL), and a data tier (whatever that might be). It is self-contained,
doing its own calculation, validation, authentication and so forth.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Other applications can use our web
service as a data source, or however they choose. But our web service will be internally
consistent and self-protecting. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;This ultimately means that the web
service will be reliable, useful across multiple applications and in the end will
be a good investment in terms of development dollars.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=251785fe-4ee9-4028-8925-4afee73de668" /&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,251785fe-4ee9-4028-8925-4afee73de668.aspx</comments>
      <category>Service-Oriented</category>
    </item>
  </channel>
</rss>