<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Clemens Vasters - Technology|FABRIQ</title>
    <link>http://vasters.com/clemensv/</link>
    <description>Cloud Development and Alien Abductions</description>
    <language>en-us</language>
    <copyright>Clemens Vasters</copyright>
    <lastBuildDate>Mon, 05 Jul 2004 07:06:41 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.7067.0</generator>
    <managingEditor>cvasters@guhhome.com</managingEditor>
    <webMaster>cvasters@guhhome.com</webMaster>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=f9d907bd-2c2f-4dc1-8b87-5b7549366bbf</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,f9d907bd-2c2f-4dc1-8b87-5b7549366bbf.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,f9d907bd-2c2f-4dc1-8b87-5b7549366bbf.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=f9d907bd-2c2f-4dc1-8b87-5b7549366bbf</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We've built FABRIQ, we've built Proseware. We have written seminar series about Web
Services Best Practices and Service Orientation for Microsoft Europe. I speak about
services and aspects of services at conferences around the world. And at all events
where I talk about Services, I keep hearing the same question: "Enough of the theory,
how do I do it?"
</p>
        <p>
Therefore we have <a href="http://www.newtelligence.net/PermaLink.aspx?guid=c9fd0897-8702-4e1b-8aa9-2dbcf66051b4">announced</a> a
seminar/workshop around designing and building service oriented systems that puts
together all the things we've found out in the past years about how services can be
built today and on today's Microsoft technology stack and how your systems can
be designed for with migration to the next generation Microsoft technlogy stack in
mind. Together with our <em>newtelligence Associates</em>, we are offering this workshop
for in-house delivery at client sites world-wide and are planning to announce dates
and locations for central, "open for all" events soon. 
</p>
        <p>
If you are interested in inviting us for an event at your site, contact <a href="mailto:bartd@newtelligence.com">Bart
DePetrillo</a>, or write to <a href="mailto:sales@newtelligence.com">sales@newtelligence.com</a>.
If you are interested in participating at a central seminar, <a href="mailto:bartd@newtelligence.com">Bart</a> would
like to hear about it (no obligations) so that we can select reasonable location(s)
and date(s) that fit your needs.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=f9d907bd-2c2f-4dc1-8b87-5b7549366bbf" />
      </body>
      <title>newtelligence Seminar Series: Service Oriented Architecture and Systems</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,f9d907bd-2c2f-4dc1-8b87-5b7549366bbf.aspx</guid>
      <link>http://vasters.com/clemensv/2004/07/05/newtelligence+Seminar+Series+Service+Oriented+Architecture+And+Systems.aspx</link>
      <pubDate>Mon, 05 Jul 2004 07:06:41 GMT</pubDate>
      <description>&lt;p&gt;
We've built FABRIQ, we've built Proseware. We have written seminar series about Web
Services Best Practices and Service Orientation for Microsoft Europe. I speak about
services and aspects of services at conferences around the world. And at all events
where I talk about Services, I keep hearing the same question: "Enough of the theory,
how do I do it?"
&lt;/p&gt;
&lt;p&gt;
Therefore we have &lt;a href="http://www.newtelligence.net/PermaLink.aspx?guid=c9fd0897-8702-4e1b-8aa9-2dbcf66051b4"&gt;announced&lt;/a&gt; a
seminar/workshop around designing and building service oriented systems that puts
together all the things we've found out in the past years about how services can be
built today and on today's Microsoft technology stack and how your&amp;nbsp;systems can
be designed for with migration to the next generation Microsoft technlogy stack in
mind. Together with our &lt;em&gt;newtelligence Associates&lt;/em&gt;, we are offering this workshop
for in-house delivery at client sites world-wide and are planning to announce&amp;nbsp;dates
and locations for central, "open for all"&amp;nbsp;events soon. 
&lt;/p&gt;
&lt;p&gt;
If you are interested in inviting us for an event at your site, contact &lt;a href="mailto:bartd@newtelligence.com"&gt;Bart
DePetrillo&lt;/a&gt;, or write to &lt;a href="mailto:sales@newtelligence.com"&gt;sales@newtelligence.com&lt;/a&gt;.
If you are interested in participating at&amp;nbsp;a central seminar,&amp;nbsp;&lt;a href="mailto:bartd@newtelligence.com"&gt;Bart&lt;/a&gt; would
like to hear about it (no obligations) so that we can&amp;nbsp;select reasonable location(s)
and date(s) that fit your needs.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=f9d907bd-2c2f-4dc1-8b87-5b7549366bbf" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,f9d907bd-2c2f-4dc1-8b87-5b7549366bbf.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Technology/FABRIQ</category>
      <category>Technology/Indigo</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=6dea32c2-ef79-42e1-b574-97b273163fbb</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,6dea32c2-ef79-42e1-b574-97b273163fbb.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,6dea32c2-ef79-42e1-b574-97b273163fbb.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=6dea32c2-ef79-42e1-b574-97b273163fbb</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Finally</strong>, <em>finally, </em>finally. It was a looong wait. As many
others, we were in a wait loop for <a href="http://msdn.microsoft.com/webservices/building/wse/default.aspx">WSE
2.0</a> for a long time and that let us do what we do today only much,
much later than we initially anticipated. So after being able to test on and
adjust for the WSE 2.0 RTM bits for the last four weeks, we're now happy enough with
our "1.0" that we're ready to share it:
</p>
        <p>
Microsoft EMEA and newtelligence AG present: <a href="http://workspaces.gotdotnet.com/fabriq">The
FABRIQ</a>. (<a href="http://workspaces.gotdotnet.com/fabriq">http://workspaces.gotdotnet.com/fabriq</a>)<br />
(When you go there, make sure you get both the bits <strong>and</strong> the Hands-on
Labs; you will need them).
</p>
        <p>
Also, a few things to keep in mind <strong>before</strong> you go and get the
bits:
</p>
        <ul>
          <li>
This is a proof-of-concept project collaboratively created by Microsoft EMEA and newtelligence
AG. We have tested intensively for quite a few sets of use-cases, but this is not
a product. We are giving this to you because we think it's very useful architecturally
and most implementation aspects isn't too bad either, and we do expect you to
play with it. We don't give it to you to install this in a production environment
tomorrow or even on the day after. 
</li>
          <li>
The support policy for FABRIQ is very simple: There is none. If you download
this, you are absolutely and entirely on your own, legally speaking. We are
keen to hear your feedback and are curious whether and for what you find this useful,
but this is no product and therefore there's no support whatsoever. (<em>If you
find this so useful that you want customization, support, or need help to get
this from near-production quality to production-quality, <a href="mailto:sales@newtelligence.com">sales@newtelligence.com</a> is
a great place to write e-mail to)</em></li>
          <li>
This is "work in progress" and you are getting a version that is not considered
finished. You will find artifacts in the code that are not (anymore or yet) used.
You will find code branches that we not (anymore or yet) hit.  There are a few
places, where we cut some corners in terms of implementation efficiency in order to
get this out early. You will find that there is a bit of a disconnect between the
specification documents that we have in the package vs. the documentation that you'll
find and we could have done a better job cleaning it all up. We love this ourselves
and will continue to polish it. 
</li>
          <li>
You need <a href="http://msdn.microsoft.com/webservices/building/wse/default.aspx">WSE
2.0</a> and the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=80DF04BC-267D-4919-8BB4-1F84B7EB1368&amp;displaylang=en">Enterprise
Instrumentation Framework</a> to play. 
</li>
          <li>
Contributions: We give you the code and you can use it and change it. For
the first version and the next minor drops, we'll not have a public code repository
that people can check things into immediately, because the beast turned out to
be so complex that we need to stay in control for a little while. If we allowed
"random" community contributions early, people who don't <em>live inside</em> in the
codebase could too easily seemingly unrelated stuff. Therefore: If you want to change
or add stuff, wrap up your changes along with a good reason why that's needed and
send it <a href="mailto:clemensv@newtelligence.com">here</a>. 
</li>
          <li>
Discussions: Write what you like or hate or what you don't understand into <a href="http://www.gotdotnet.com/community/messageboard/messageboard.aspx?id=9012">the
forums in the workspace</a> or just blog about it and refer to this entry or
relevant entries on my blog or Arvindra's blog once he's fully set up. We'll
accept everybody into the workspace; just apply and you'll be granted access as soon
as someone sees it.</li>
        </ul>
        <p>
Credit where credit is due: Very many thanks to the development team in Argentina,
with Eugenio Pace, Adrian Nigro, Federico Winkel, and Juan Carlos Elichirigoity,
who have worked very very hard turning my "written in two weeks in a hurry" prototype
code into something that's actually useful.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6dea32c2-ef79-42e1-b574-97b273163fbb" />
      </body>
      <title>Go, get it!   FABRIQ 1.0.4173.4</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,6dea32c2-ef79-42e1-b574-97b273163fbb.aspx</guid>
      <link>http://vasters.com/clemensv/2004/06/25/Go+Get+It+FABRIQ+1041734.aspx</link>
      <pubDate>Fri, 25 Jun 2004 19:57:15 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;Finally&lt;/strong&gt;, &lt;em&gt;finally, &lt;/em&gt;finally. It was a looong wait. As many
others, we were&amp;nbsp;in a wait loop for &lt;a href="http://msdn.microsoft.com/webservices/building/wse/default.aspx"&gt;WSE
2.0&lt;/a&gt; for a long time and that&amp;nbsp;let&amp;nbsp;us do what we do today only&amp;nbsp;much,
much later than we initially anticipated.&amp;nbsp;So after being able to test on and
adjust for the WSE 2.0 RTM bits for the last four weeks, we're now happy enough with
our&amp;nbsp;"1.0" that we're ready to share it:
&lt;/p&gt;
&lt;p&gt;
Microsoft EMEA and newtelligence AG present: &lt;a href="http://workspaces.gotdotnet.com/fabriq"&gt;The
FABRIQ&lt;/a&gt;. (&lt;a href="http://workspaces.gotdotnet.com/fabriq"&gt;http://workspaces.gotdotnet.com/fabriq&lt;/a&gt;)&lt;br&gt;
(When you go there, make sure you get both the bits &lt;strong&gt;and&lt;/strong&gt; the Hands-on
Labs; you will need them).
&lt;/p&gt;
&lt;p&gt;
Also,&amp;nbsp;a few things to keep in mind &lt;strong&gt;before&lt;/strong&gt; you go and get the
bits:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
This is a proof-of-concept project collaboratively created by Microsoft EMEA and newtelligence
AG. We have tested intensively for quite a few sets of use-cases, but this is not
a product. We are giving this to you because we think it's very useful architecturally
and&amp;nbsp;most implementation aspects isn't too bad either, and we do expect you to
play with it. We don't give it to you to install this in a production environment
tomorrow or even on the day after. 
&lt;li&gt;
The support policy for FABRIQ is&amp;nbsp;very simple: There is none. If you download
this, you are absolutely and&amp;nbsp;entirely on your own, legally speaking. We&amp;nbsp;are
keen to hear your feedback and are curious whether and for what you find this useful,
but&amp;nbsp;this is no product and therefore there's no support whatsoever. (&lt;em&gt;If you
find this so useful that&amp;nbsp;you&amp;nbsp;want customization, support, or need help to&amp;nbsp;get
this from near-production quality to production-quality,&amp;nbsp;&lt;a href="mailto:sales@newtelligence.com"&gt;sales@newtelligence.com&lt;/a&gt; is
a great place to write e-mail to)&lt;/em&gt; 
&lt;li&gt;
This is "work in progress" and you are getting a version that is not&amp;nbsp;considered
finished. You will find artifacts in the code that are not (anymore or yet) used.
You will find code branches that we not (anymore or yet) hit. &amp;nbsp;There are a few
places, where we cut some corners in terms of implementation efficiency in order to
get this out early. You will find that there is a bit of a disconnect between the
specification documents that we have in the package vs. the documentation that you'll
find and we could have done a better job cleaning it all up. We love this ourselves
and will continue to polish it. 
&lt;li&gt;
You need &lt;a href="http://msdn.microsoft.com/webservices/building/wse/default.aspx"&gt;WSE
2.0&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=80DF04BC-267D-4919-8BB4-1F84B7EB1368&amp;amp;displaylang=en"&gt;Enterprise
Instrumentation Framework&lt;/a&gt; to play. 
&lt;li&gt;
Contributions:&amp;nbsp;We give you the code and you can use&amp;nbsp;it and change it. For
the first version and the next minor drops, we'll not have a public code repository
that people can check things into immediately,&amp;nbsp;because the beast turned out to
be so complex that we need to stay in control for a little while. If&amp;nbsp;we allowed
"random" community contributions early, people who don't &lt;em&gt;live inside&lt;/em&gt; in the
codebase could too easily seemingly unrelated stuff. Therefore: If you want to change
or add stuff, wrap up your changes along with a good reason why that's needed and
send it &lt;a href="mailto:clemensv@newtelligence.com"&gt;here&lt;/a&gt;. 
&lt;li&gt;
Discussions: Write what you like or hate or what you don't understand into &lt;a href="http://www.gotdotnet.com/community/messageboard/messageboard.aspx?id=9012"&gt;the
forums&amp;nbsp;in the workspace&lt;/a&gt; or just blog about it and refer to this entry or
relevant entries on my blog or Arvindra's blog once he's fully set up.&amp;nbsp;We'll
accept everybody into the workspace; just apply and you'll be granted access as soon
as someone sees it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Credit where credit is due: Very many thanks to&amp;nbsp;the development team in Argentina,
with&amp;nbsp;Eugenio Pace, Adrian Nigro, Federico Winkel, and Juan Carlos Elichirigoity,
who have worked very very hard turning my "written in two weeks in a hurry" prototype
code into something that's actually useful.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6dea32c2-ef79-42e1-b574-97b273163fbb" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,6dea32c2-ef79-42e1-b574-97b273163fbb.aspx</comments>
      <category>Architecture</category>
      <category>Talks/TechEd Europe</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=9ba96fdb-8acb-4ce7-a095-f0d5825bb27d</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,9ba96fdb-8acb-4ce7-a095-f0d5825bb27d.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,9ba96fdb-8acb-4ce7-a095-f0d5825bb27d.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=9ba96fdb-8acb-4ce7-a095-f0d5825bb27d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p>
After providing some background on what <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=82350b56-cff0-445d-b917-34cc49c37adf">nodes
and networks</a> are and how they work, I’ll get to how they are configured.
Warning: This post is pretty dense in terms of content ;-)
</p>
          <p>
Each FABRIQ network is defined in a single configuration document with the root element
“fabriq”.
</p>
          <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="100%" border="1">
            <tbody>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 7.5pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 7.5pt; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="100%">
                  <p class="MsoNormal">
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;</span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">fabriq</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">configuration</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="twoSimpleNodes"</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">version</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="2.15"</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">xmlns</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="urn:fabriq-europe-microsoft-com:2004-06:fabriq-configuration"&gt;<br />
  …<br />
&lt;/</span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">fabriq</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;</span>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
Each configuration document must have a unique name (at least unique amongst the configurations
you want to use) and must have a version number. The version number has the notation <i>major</i>.<i>minor</i> and
must be incremented whenever you want to submit an updated configuration to a FABRIQ
engine. Changed configurations with the same version number are rejected by the engine.
</p>
          <p>
The first (optional) element within a configuration document is the <i>import</i> element. <i>Import</i> is
a very powerful facility to create and reuse libraries of <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=1a502fa5-83db-4c43-bb33-b79bb2133713">handler-types,
pipeline-types</a>, and node-type definitions (that I’ll explain further down
in this document). 
</p>
          <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="100%" border="1">
            <tbody>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 7.5pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 7.5pt; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="100%">
                  <p class="MsoNormal">
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;</span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">fabriq</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"> …</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"> &gt;<br />
   &lt;</span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">import</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">location</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="baseConfig.xml"</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">/&gt;<br />
   &lt;</span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">import</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">location</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="http://myserver/defs/myfabriqdefs.xml"</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">/&gt;<br />
  …<br />
&lt;/</span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">fabriq</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;</span>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
Imported definitions become a part of the importing configuration document (the imported
document’s configuration name is not a namespace mechanism) and therefore names
of pipeline-types, handler-types and node-types should be unique across all configuration
files. All names of such items are freeform text and it may make sense to choose a
“urn:xxx” naming scheme to name for them (I don’t do that in my
simple examples here) 
</p>
          <p>
Following the import clause, might be a sequence of handlerType and pipelineType definitions
that are already explained <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=1a502fa5-83db-4c43-bb33-b79bb2133713">here</a>. 
</p>
          <p>
The imported and locally declared pipelineTypes can then be applied to nodeTypes.
</p>
          <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="100%" border="1">
            <tbody>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 7.5pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 7.5pt; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="100%">
                  <p>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">  &lt;</span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">nodeType</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">name</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="FirstNodeType"</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">xmlns</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">:</span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">mymsg</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="urn:myMessages"&gt;<br /></span>
                    <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'">(1) <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">policy</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wsu</span><span style="COLOR: blue">="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"<br /></span><span style="COLOR: fuchsia">        </span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wssp</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/ws/2002/12/secext"</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wsp</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/ws/2002/12/policy"<br /></span><span style="COLOR: fuchsia">        </span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wse</span><span style="COLOR: blue">="http://schemas.microsoft.com/wse/2003/06/Policy"&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsp:Policy</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">wsu</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">Id</span><span style="COLOR: blue">="Kerb-Sign-Encrypt"&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wssp:MessageAge</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">wsp</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">Usage</span><span style="COLOR: blue">="wsp:Required"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">Age</span><span style="COLOR: blue">="3660"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsp:MessagePredicate</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">wsp</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">Usage</span><span style="COLOR: blue">="wsp:Required"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">Dialect</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/2002/12/wsse#part"<br /></span><span style="COLOR: fuchsia">          </span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wsa</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/ws/2004/03/addressing"</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wse</span><span style="COLOR: blue">="http://schemas.microsoft.com/wse/2003/06/Policy"&gt;<br /></span>          wsp:Body() wsp:Header(wsa:To)
wsp:Header(wsa:Action) wsp:Header(wsa:MessageID) wse:Timestamp()<br />
        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsp:MessagePredicate</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsp:Policy</span><span style="COLOR: blue">&gt;<br /></span>    <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">policy</span><span style="COLOR: blue">&gt;<br /></span>(2) <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">types</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">xsd:schema</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">targetNamespace</span><span style="COLOR: blue">="urn:myMessages"&gt;<br /></span>         <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">xsd:complexType</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="myMessage"&gt;<br /></span>             <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">xsd:sequence</span><span style="COLOR: blue">&gt;<br /></span>                <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">xsd:element</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="data"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="xsd:string"/&gt;<br /></span>             <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">xsd:sequence</span><span style="COLOR: blue">&gt;<br /></span>         <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">xsd:complexType</span><span style="COLOR: blue">&gt;</span><br />
      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">xsd:schema</span><span style="COLOR: blue">&gt;<br />
  </span>  <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">types</span><span style="COLOR: blue">&gt;<br /></span>(3) <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">actions</span><span style="COLOR: blue">&gt;<br /></span>(4)   <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">action</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="OperationA"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">match</span><span style="COLOR: blue">="fabriq://MyApp/FirstNode/OperationA"&gt;<br /></span>(5)     <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">input</span><span style="COLOR: blue">&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">message</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="xsd:anyType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br />
  </span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">input</span><span style="COLOR: blue">&gt;<br /></span>(6)     <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">pipeline</span><span style="COLOR: blue">&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">pipeline</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="transformExternalMessageToMessageAType"/&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handler</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="canoncalizeMessageAType"/&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handler</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="handleMessageAType"/&gt;<br />
  </span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">pipeline</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">action</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">action</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="OperationB"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">match</span><span style="COLOR: blue">="fabriq://MyApp/FirstNode/OperationB"&gt;<br />
  </span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">input</span><span style="COLOR: blue">&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">message</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="mymsg:myMessage"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">input</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">pipeline</span><span style="COLOR: blue">&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">pipeline</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="transformExternalMessageToMessageBType"/&gt;<br />
  </span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handler</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="canoncalizeMessageBType"/&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handler</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="handleMessageBType"/&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">pipeline</span><span style="COLOR: blue">&gt;<br />
  </span>    <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">action</span><span style="COLOR: blue">&gt;<br />
  </span>  <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">actions</span><span style="COLOR: blue">&gt;<br />
  &lt;/</span><span style="COLOR: maroon">nodeType</span><span style="COLOR: blue">&gt;</span></span>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
A node-type defines a (mostly) deployment independent one-way service. A nodeType
defines actions, their input messages and the pipelines that process input messages.
The example above shows an exemplary nodeType in most of its glory. Each nodeType
must have a unique name. 
</p>
          <p>
The nodeType <i>may</i> declare a policy (1) on the nodeType-level that is applied
to all messages that flow into any node based on this nodeType. In the example above,
the policy defines two assertions; the first mandates a maximum message age and the
second mandates the presence of a certain set of message headers (both are WS-SecurityPolicy
elements). Policies can also be declared on the action-level as per the configuration
schema, but we’re currently not processing such action-level policies.
</p>
          <p>
The nodeType <i>may</i> declare any number of local types via embedded XML schemas
(2). These types referenced by the input message declaration (5).
</p>
          <p>
Each nodeType declares a collection (3) of actions. An action (4) is a named activity
that has a locally unique name. Each action has a <i>match</i> attribute that is matched
against the &lt;wsa:Action&gt; header (those not too familiar with WS-Addressing should
think of SOAPAction) of an inbound message to determine whether the message is applicable
to the respective action. If the attribute value is “*”, the action applies
to any inbound message and the &lt;wsa:Action&gt; value is essentially ignored.
</p>
          <p>
An action <i>may</i> declare a set of accepted input messages (5). If this declaration
is missing, any input message is considered valid. If the declaration is present,
any message that is declared within the <i>input</i> element is considered valid.
In version 1.0, we do not provide a validation handler to enforce this rule, but it’s
on the to-do list. The primary reason for having this element is not validation, though.
Its presence allows generating WSDL for each node by ways of XSLT transformation quite
easily.
</p>
          <p>
Any action <i>must</i> declare a <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=1a502fa5-83db-4c43-bb33-b79bb2133713">pipeline</a> that
defines the processing steps that shall be performed by the action. 
</p>
          <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="100%" border="1">
            <tbody>
              <tr>
                <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 7.5pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 7.5pt; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="100%">
                  <p>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;</span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">network</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">name</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="MyApp"&gt;<br /></span>
                    <span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'">    <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">node</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">host</span><span style="COLOR: blue">="machine1;machine2;machine3;machine4"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="FirstNode"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="FirstNodeType"&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">ports</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wsa</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/ws/2004/03/addressing"&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;</span>msmq://any/fabriqport<span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">ports</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">output</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">route</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">to</span><span style="COLOR: blue">="*"&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">destination</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">priority</span><span style="COLOR: blue">="1"&gt;<br /></span>            <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wsa</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/ws/2004/03/addressing"&gt;<br /></span>              <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;</span>fabriq://MyApp/SecondNode<span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;<br /></span>            <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: blue">&gt;<br /></span>          <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">destination</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">route</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">output</span><span style="COLOR: blue">&gt;<br /></span>    <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">node</span><span style="COLOR: blue">&gt;<br /></span>    <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">node</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">host</span><span style="COLOR: blue">="machine5;machine6;machine7"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="SecondNode"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="SecondNodeType"&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">ports</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wsa</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/ws/2004/03/addressing"&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;</span>msmq://any/fabriqport<span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">ports</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">output</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">route</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">to</span><span style="COLOR: blue">="*"&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">destination</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">priority</span><span style="COLOR: blue">="1"&gt;<br /></span>            <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">replyTo</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>          <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">destination</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">route</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">output</span><span style="COLOR: blue">&gt;<br /></span>    <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">node</span><span style="COLOR: blue">&gt;<br /></span>  <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">network</span><span style="COLOR: blue">&gt;</span></span>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
A <i>network</i> defines an application consisting of nodes. Each node is based on
a nodeType and adds the deployment dependent aspects and the handling of output to
the nodeType’s base-definitions.
</p>
          <p>
A node may be assigned to any number of hosts or to “any” host by specifying
the wildcard “*”. It may declare for itself a set of <i>ports</i> (the
runtime chooses a default endpoint using ES transport if the declaration is absent)
at which is can be reached. Each port is declared as an endpoint-reference. If the
address specified in the endpoint reference has a hostname of “any”, the
address is automatically mapped to a physical address based on the node’s hostname
list whenever required. In “SecondNode” in the above example, the runtime
will map msmq://any/fabriqport to one of msmq://machine5/fabriqport, msmq://machine6/fabriqport,
or msmq://machine7/fabriqport. When the runtime wants to route to the node MyApp/SecondNode,
it will pick one of these physical targets at random and send the message there (and
therefore balance across the hosting machines).
</p>
          <p>
The <i>output </i>section of the node declaration defines <i>routes</i>. A route can
be selected based on a combination of the “@To” or the “@Action”
property (analogous to the respective WS-Addressing headers) contained in the message(s)
that come(s) out of the pipeline after processing. If you omit the “to”
and/or “action” attribute, the route will apply to any destination and/or
any action. If multiple routes apply, a copy of the message will be sent along each
of those routes.
</p>
          <p>
Each route has a set of <i>destinations</i>. A destination contains a prioritized
endpoint reference or the reserved <i>replyTo</i> element. The runtime will load balance
across destinations with the same priority and if sending fails on a destination with
high priority (1 is highest, 9 is lowest, 0 is disabled), the engine will fall back
to a lower priority destination as a backup route. The <i>replyTo</i> destination
causes the runtime to pick up the wsa:ReplyTo header contained in the input message
and send to the endpoint indicated by that header. The wsa:ReplyTo header that is
sent into a FABRIQ network is always propagated throughout the network (even if the
message is split) and this element therefore enables the external client to dynamically
supply a destination where the network drops off the final message(s) after processing
is complete.
</p>
        </div>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=9ba96fdb-8acb-4ce7-a095-f0d5825bb27d" />
      </body>
      <title>Configuring FABRIQ Networks and Nodes</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,9ba96fdb-8acb-4ce7-a095-f0d5825bb27d.aspx</guid>
      <link>http://vasters.com/clemensv/2004/06/25/Configuring+FABRIQ+Networks+And+Nodes.aspx</link>
      <pubDate>Fri, 25 Jun 2004 11:49:33 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
&lt;p&gt;
After providing some background on what &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=82350b56-cff0-445d-b917-34cc49c37adf"&gt;nodes
and networks&lt;/a&gt; are and how they work, I&amp;#8217;ll get to how they are configured.
Warning: This post is pretty dense in terms of content ;-)
&lt;/p&gt;
&lt;p&gt;
Each FABRIQ network is defined in a single configuration document with the root element
&amp;#8220;fabriq&amp;#8221;.
&lt;/p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 width="100%" border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 7.5pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 7.5pt; BORDER-BOTTOM: windowtext 1pt solid" valign=top width="100%"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;fabriq&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;configuration&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="twoSimpleNodes"&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;version&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="2.15"&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="urn:fabriq-europe-microsoft-com:2004-06:fabriq-configuration"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;#8230;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;fabriq&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Each configuration document must have a unique name (at least unique amongst the configurations
you want to use) and must have a version number. The version number has the notation &lt;i&gt;major&lt;/i&gt;.&lt;i&gt;minor&lt;/i&gt; and
must be incremented whenever you want to submit an updated configuration to a FABRIQ
engine. Changed configurations with the same version number are rejected by the engine.
&lt;/p&gt;
&lt;p&gt;
The first (optional) element within a configuration document is the &lt;i&gt;import&lt;/i&gt; element. &lt;i&gt;Import&lt;/i&gt; is
a very powerful facility to create and reuse libraries of &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=1a502fa5-83db-4c43-bb33-b79bb2133713"&gt;handler-types,
pipeline-types&lt;/a&gt;, and node-type definitions (that I&amp;#8217;ll explain further down
in this document). 
&lt;/p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 width="100%" border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 7.5pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 7.5pt; BORDER-BOTTOM: windowtext 1pt solid" valign=top width="100%"&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;fabriq&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &amp;#8230;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt; &amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;import&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;location&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="baseConfig.xml"&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;import&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;location&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="http://myserver/defs/myfabriqdefs.xml"&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;#8230;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;fabriq&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Imported definitions become a part of the importing configuration document (the imported
document&amp;#8217;s configuration name is not a namespace mechanism) and therefore names
of pipeline-types, handler-types and node-types should be unique across all configuration
files. All names of such items are freeform text and it may make sense to choose a
&amp;#8220;urn:xxx&amp;#8221; naming scheme to name for them (I don&amp;#8217;t do that in my
simple examples here) 
&lt;/p&gt;
&lt;p&gt;
Following the import clause, might be a sequence of handlerType and pipelineType definitions
that are already explained &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=1a502fa5-83db-4c43-bb33-b79bb2133713"&gt;here&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
The imported and locally declared pipelineTypes can then be applied to nodeTypes.
&lt;/p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 width="100%" border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 7.5pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 7.5pt; BORDER-BOTTOM: windowtext 1pt solid" valign=top width="100%"&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;nodeType&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="FirstNodeType"&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;mymsg&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="urn:myMessages"&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'"&gt;(1) &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;policy&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wsu&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"&lt;br&gt;
&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wssp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/ws/2002/12/secext"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wsp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/ws/2002/12/policy"&lt;br&gt;
&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wse&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.microsoft.com/wse/2003/06/Policy"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsp:Policy&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsu&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Kerb-Sign-Encrypt"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wssp:MessageAge&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsp&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Usage&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="wsp:Required"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Age&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="3660"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsp:MessagePredicate&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsp&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Usage&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="wsp:Required"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Dialect&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/2002/12/wsse#part"&lt;br&gt;
&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wsa&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/ws/2004/03/addressing"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wse&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.microsoft.com/wse/2003/06/Policy"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wsp:Body() wsp:Header(wsa:To)
wsp:Header(wsa:Action) wsp:Header(wsa:MessageID) wse:Timestamp()&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsp:MessagePredicate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsp:Policy&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;policy&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;(2) &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;types&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xsd:schema&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;targetNamespace&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="urn:myMessages"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xsd:complexType&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="myMessage"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xsd:sequence&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xsd:element&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="data"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="xsd:string"/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xsd:sequence&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xsd:complexType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xsd:schema&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;types&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;(3) &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;actions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;(4) &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;action&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="OperationA"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;match&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriq://MyApp/FirstNode/OperationA"&amp;gt;&lt;br&gt;
&lt;/span&gt;(5) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;input&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;message&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="xsd:anyType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;input&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;(6) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipeline&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipeline&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="transformExternalMessageToMessageAType"/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handler&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="canoncalizeMessageAType"/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handler&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="handleMessageAType"/&amp;gt;&lt;br&gt;
&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipeline&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;action&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;action&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="OperationB"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;match&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriq://MyApp/FirstNode/OperationB"&amp;gt;&lt;br&gt;
&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;input&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;message&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="mymsg:myMessage"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;input&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipeline&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipeline&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="transformExternalMessageToMessageBType"/&amp;gt;&lt;br&gt;
&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handler&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="canoncalizeMessageBType"/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handler&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="handleMessageBType"/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipeline&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;action&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;actions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;nodeType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
A node-type defines a (mostly) deployment independent one-way service. A nodeType
defines actions, their input messages and the pipelines that process input messages.
The example above shows an exemplary nodeType in most of its glory. Each nodeType
must have a unique name. 
&lt;/p&gt;
&lt;p&gt;
The nodeType &lt;i&gt;may&lt;/i&gt; declare a policy (1) on the nodeType-level that is applied
to all messages that flow into any node based on this nodeType. In the example above,
the policy defines two assertions; the first mandates a maximum message age and the
second mandates the presence of a certain set of message headers (both are WS-SecurityPolicy
elements). Policies can also be declared on the action-level as per the configuration
schema, but we&amp;#8217;re currently not processing such action-level policies.
&lt;/p&gt;
&lt;p&gt;
The nodeType &lt;i&gt;may&lt;/i&gt; declare any number of local types via embedded XML schemas
(2). These types referenced by the input message declaration (5).
&lt;/p&gt;
&lt;p&gt;
Each nodeType declares a collection (3) of actions. An action (4) is a named activity
that has a locally unique name. Each action has a &lt;i&gt;match&lt;/i&gt; attribute that is matched
against the &amp;lt;wsa:Action&amp;gt; header (those not too familiar with WS-Addressing should
think of SOAPAction) of an inbound message to determine whether the message is applicable
to the respective action. If the attribute value is &amp;#8220;*&amp;#8221;, the action applies
to any inbound message and the &amp;lt;wsa:Action&amp;gt; value is essentially ignored.
&lt;/p&gt;
&lt;p&gt;
An action &lt;i&gt;may&lt;/i&gt; declare a set of accepted input messages (5). If this declaration
is missing, any input message is considered valid. If the declaration is present,
any message that is declared within the &lt;i&gt;input&lt;/i&gt; element is considered valid.
In version 1.0, we do not provide a validation handler to enforce this rule, but it&amp;#8217;s
on the to-do list. The primary reason for having this element is not validation, though.
Its presence allows generating WSDL for each node by ways of XSLT transformation quite
easily.
&lt;/p&gt;
&lt;p&gt;
Any action &lt;i&gt;must&lt;/i&gt; declare a &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=1a502fa5-83db-4c43-bb33-b79bb2133713"&gt;pipeline&lt;/a&gt; that
defines the processing steps that shall be performed by the action. 
&lt;/p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 width="100%" border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 7.5pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 7.5pt; BORDER-BOTTOM: windowtext 1pt solid" valign=top width="100%"&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;network&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="MyApp"&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;node&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;host&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="machine1;machine2;machine3;machine4"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="FirstNode"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="FirstNodeType"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;ports&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wsa&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/ws/2004/03/addressing"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;msmq://any/fabriqport&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;ports&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;output&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;route&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;to&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="*"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;destination&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;priority&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wsa&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/ws/2004/03/addressing"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;fabriq://MyApp/SecondNode&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;destination&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;route&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;output&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;node&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;node&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;host&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="machine5;machine6;machine7"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="SecondNode"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="SecondNodeType"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;ports&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wsa&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/ws/2004/03/addressing"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;msmq://any/fabriqport&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;ports&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;output&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;route&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;to&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="*"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;destination&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;priority&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;replyTo&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;destination&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;route&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;output&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;node&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;network&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
A &lt;i&gt;network&lt;/i&gt; defines an application consisting of nodes. Each node is based on
a nodeType and adds the deployment dependent aspects and the handling of output to
the nodeType&amp;#8217;s base-definitions.
&lt;/p&gt;
&lt;p&gt;
A node may be assigned to any number of hosts or to &amp;#8220;any&amp;#8221; host by specifying
the wildcard &amp;#8220;*&amp;#8221;. It may declare for itself a set of &lt;i&gt;ports&lt;/i&gt; (the
runtime chooses a default endpoint using ES transport if the declaration is absent)
at which is can be reached. Each port is declared as an endpoint-reference. If the
address specified in the endpoint reference has a hostname of &amp;#8220;any&amp;#8221;, the
address is automatically mapped to a physical address based on the node&amp;#8217;s hostname
list whenever required. In &amp;#8220;SecondNode&amp;#8221; in the above example, the runtime
will map msmq://any/fabriqport to one of msmq://machine5/fabriqport, msmq://machine6/fabriqport,
or msmq://machine7/fabriqport. When the runtime wants to route to the node MyApp/SecondNode,
it will pick one of these physical targets at random and send the message there (and
therefore balance across the hosting machines).
&lt;/p&gt;
&lt;p&gt;
The &lt;i&gt;output &lt;/i&gt;section of the node declaration defines &lt;i&gt;routes&lt;/i&gt;. A route can
be selected based on a combination of the &amp;#8220;@To&amp;#8221; or the &amp;#8220;@Action&amp;#8221;
property (analogous to the respective WS-Addressing headers) contained in the message(s)
that come(s) out of the pipeline after processing. If you omit the &amp;#8220;to&amp;#8221;
and/or &amp;#8220;action&amp;#8221; attribute, the route will apply to any destination and/or
any action. If multiple routes apply, a copy of the message will be sent along each
of those routes.
&lt;/p&gt;
&lt;p&gt;
Each route has a set of &lt;i&gt;destinations&lt;/i&gt;. A destination contains a prioritized
endpoint reference or the reserved &lt;i&gt;replyTo&lt;/i&gt; element. The runtime will load balance
across destinations with the same priority and if sending fails on a destination with
high priority (1 is highest, 9 is lowest, 0 is disabled), the engine will fall back
to a lower priority destination as a backup route. The &lt;i&gt;replyTo&lt;/i&gt; destination
causes the runtime to pick up the wsa:ReplyTo header contained in the input message
and send to the endpoint indicated by that header. The wsa:ReplyTo header that is
sent into a FABRIQ network is always propagated throughout the network (even if the
message is split) and this element therefore enables the external client to dynamically
supply a destination where the network drops off the final message(s) after processing
is complete.
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=9ba96fdb-8acb-4ce7-a095-f0d5825bb27d" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,9ba96fdb-8acb-4ce7-a095-f0d5825bb27d.aspx</comments>
      <category>Talks/TechEd Europe/Architecture</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=82350b56-cff0-445d-b917-34cc49c37adf</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,82350b56-cff0-445d-b917-34cc49c37adf.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,82350b56-cff0-445d-b917-34cc49c37adf.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=82350b56-cff0-445d-b917-34cc49c37adf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p class="MsoNormal">
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">
            </span> 
</p>
          <p class="MsoBodyText">
            <img height="274" hspace="12" src="http://staff.newtelligence.net/clemensv/content/binary/image0021234.jpg" width="337" align="left" />A <b><i>network</i></b> defines
a group of nodes that exchange messages. The network defines a trust perimeter in
regards to security and behavior around a set of nodes and is the smallest unit of
configuration in FABRIQ. Nodes inside a FABRIQ network should not be exposed to and
should not directly addressable from entities outside the network. Securing a FABRIQ
network and access to its nodes is not in the scope of this specification, but it
is assumed that FABRIQ networks run within a secured environment that allows no foreign
(potentially hostile) access. 
</p>
          <p class="MsoBodyText">
Messages shall flow into a FABRIQ network through a well-defined and secured gateway,
which is the “head” of the network. Access to the network is governed
by a policy that defines security requirements and other requirements for messages
flowing into the network. The gateway is capable of dispatching verified messages
directly to nodes inside the network. Inside the network, nodes exchange messages
without security restrictions and without authentication or authorization. As a deployment
strategy, the communication <img height="316" hspace="12" src="http://staff.newtelligence.net/clemensv/content/binary/image0031234.jpg" width="400" align="right" />channels
between nodes may be guarded by transport level security, but this is not made a requirement.
This relaxed security model and the requirement for absolute security trust between
nodes is introduced to allow the network to operate at very high speed. The expense
of security verification is consciously pushed out to the network perimeter using
a single gateway.
</p>
          <p class="MsoBodyText">
Each <b>node</b> inside a network is uniquely identified by its node URI. A node must
also be associated with at least one logical host identifier and may be associated
with any arbitrary number of host identifiers. A host identifier logically represents
a host machine on which node instances that shall be run. FABRIQ uses DNS to resolve
the host identifier to determine whether a node shall be run on the local machine.
This allows creating groups of machines by grouping the IP addresses of a set of machines
under a common name in DNS.
</p>
          <p class="MsoBodyText">
There is no predefined message flow inside the network. Each node may send messages
to any other node in the network directly. If a node does not choose to specify an
explicit destination address during processing, the message is relayed along one of
the routes specified for the node, which may lead up the next node or even an external
endpoint.
</p>
          <p class="MsoBodyText">
 
</p>
          <p class="MsoBodyText">
Each <b>node</b> is run as an independent service within its own AppDomain running
on top of the FABRIQ runtime <img height="348" hspace="12" src="http://staff.newtelligence.net/clemensv/content/binary/image0041.jpg" width="430" align="left" />process
(using the Enterprise Services process model). There is exactly one such service process
per machine inside a FABRIQ machine cluster. The service process provides a set of
communication <i>ports</i> and hosts any number of <i>node instances</i>. 
</p>
          <p class="MsoBodyText">
The communication ports will not attempt to read incoming messages. Their only purpose
is the yield either a byte array or a stream of data accompanied by a URI. The relative
node URI, which is assumed to be the rightmost part of the URI is used to match against
a map of the nodes the host is current running. Once a match is found, the incoming
raw message is handed into the node’s application domain and there into a thread
pool wait queue and is only cracked (parsed) and processed once a thread becomes available
for that message.
</p>
          <p class="MsoBodyText">
On the processing thread the node constructs an <i>XmlReader</i> over a <i>BufferStream</i> over
the raw data stream and constructs a <i>Message</i> over <img height="527" hspace="12" src="http://staff.newtelligence.net/clemensv/content/binary/image005.jpg" width="474" align="right" />the <i>XmlReader</i>.
That message object is then handed into the node’s main pipeline for processing.
The main pipeline consists of a “gatekeeper” that is responsible for ensuring
that the incoming message contains all required headers and will also enforce policy.
The “action dispatcher” will dispatch the message to a concrete action <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=1a502fa5-83db-4c43-bb33-b79bb2133713">pipeline</a> (there
can be any number of actions per node). Once the message has been processed by the
action’s pipeline, the resulting message(s) are passed to the “router”,
which determines the route for the message. Once the message is routed (which may
result in the message being sent to multiple destinations concurrently), the “sender
port” is responsible for getting it “out the door”.
</p>
          <p class="MsoBodyText">
Next step: Configuring nodes.
</p>
          <p class="MsoBodyText">
 
</p>
          <p class="MsoNormal">
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">
            </span> 
</p>
        </div>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=82350b56-cff0-445d-b917-34cc49c37adf" />
      </body>
      <title>FABRIQ Networks and Nodes</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,82350b56-cff0-445d-b917-34cc49c37adf.aspx</guid>
      <link>http://vasters.com/clemensv/2004/06/24/FABRIQ+Networks+And+Nodes.aspx</link>
      <pubDate>Thu, 24 Jun 2004 13:06:59 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
&lt;img height=274 hspace=12 src="http://staff.newtelligence.net/clemensv/content/binary/image0021234.jpg" width=337 align=left&gt;A &lt;b&gt;&lt;i&gt;network&lt;/i&gt;&lt;/b&gt; defines
a group of nodes that exchange messages. The network defines a trust perimeter in
regards to security and behavior around a set of nodes and is the smallest unit of
configuration in FABRIQ. Nodes inside a FABRIQ network should not be exposed to and
should not directly addressable from entities outside the network. Securing a FABRIQ
network and access to its nodes is not in the scope of this specification, but it
is assumed that FABRIQ networks run within a secured environment that allows no foreign
(potentially hostile) access. 
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
Messages shall flow into a FABRIQ network through a well-defined and secured gateway,
which is the &amp;#8220;head&amp;#8221; of the network. Access to the network is governed
by a policy that defines security requirements and other requirements for messages
flowing into the network. The gateway is capable of dispatching verified messages
directly to nodes inside the network. Inside the network, nodes exchange messages
without security restrictions and without authentication or authorization. As a deployment
strategy, the communication &lt;img height=316 hspace=12 src="http://staff.newtelligence.net/clemensv/content/binary/image0031234.jpg" width=400 align=right&gt;channels
between nodes may be guarded by transport level security, but this is not made a requirement.
This relaxed security model and the requirement for absolute security trust between
nodes is introduced to allow the network to operate at very high speed. The expense
of security verification is consciously pushed out to the network perimeter using
a single gateway.
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
Each &lt;b&gt;node&lt;/b&gt; inside a network is uniquely identified by its node URI. A node must
also be associated with at least one logical host identifier and may be associated
with any arbitrary number of host identifiers. A host identifier logically represents
a host machine on which node instances that shall be run. FABRIQ uses DNS to resolve
the host identifier to determine whether a node shall be run on the local machine.
This allows creating groups of machines by grouping the IP addresses of a set of machines
under a common name in DNS.
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
There is no predefined message flow inside the network. Each node may send messages
to any other node in the network directly. If a node does not choose to specify an
explicit destination address during processing, the message is relayed along one of
the routes specified for the node, which may lead up the next node or even an external
endpoint.
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
Each &lt;b&gt;node&lt;/b&gt; is run as an independent service within its own AppDomain running
on top of the FABRIQ runtime &lt;img height=348 hspace=12 src="http://staff.newtelligence.net/clemensv/content/binary/image0041.jpg" width=430 align=left&gt;process
(using the Enterprise Services process model). There is exactly one such service process
per machine inside a FABRIQ machine cluster. The service process provides a set of
communication &lt;i&gt;ports&lt;/i&gt; and hosts any number of &lt;i&gt;node instances&lt;/i&gt;. 
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
The communication ports will not attempt to read incoming messages. Their only purpose
is the yield either a byte array or a stream of data accompanied by a URI. The relative
node URI, which is assumed to be the rightmost part of the URI is used to match against
a map of the nodes the host is current running. Once a match is found, the incoming
raw message is handed into the node&amp;#8217;s application domain and there into a thread
pool wait queue and is only cracked (parsed) and processed once a thread becomes available
for that message.
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
On the processing thread the node constructs an &lt;i&gt;XmlReader&lt;/i&gt; over a &lt;i&gt;BufferStream&lt;/i&gt; over
the raw data stream and constructs a &lt;i&gt;Message&lt;/i&gt; over &lt;img height=527 hspace=12 src="http://staff.newtelligence.net/clemensv/content/binary/image005.jpg" width=474 align=right&gt;the &lt;i&gt;XmlReader&lt;/i&gt;.
That message object is then handed into the node&amp;#8217;s main pipeline for processing.
The main pipeline consists of a &amp;#8220;gatekeeper&amp;#8221; that is responsible for ensuring
that the incoming message contains all required headers and will also enforce policy.
The &amp;#8220;action dispatcher&amp;#8221; will dispatch the message to a concrete action &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=1a502fa5-83db-4c43-bb33-b79bb2133713"&gt;pipeline&lt;/a&gt; (there
can be any number of actions per node). Once the message has been processed by the
action&amp;#8217;s pipeline, the resulting message(s) are passed to the &amp;#8220;router&amp;#8221;,
which determines the route for the message. Once the message is routed (which may
result in the message being sent to multiple destinations concurrently), the &amp;#8220;sender
port&amp;#8221; is responsible for getting it &amp;#8220;out the door&amp;#8221;.
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
Next step: Configuring nodes.
&lt;/p&gt;
&lt;p class=MsoBodyText&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=82350b56-cff0-445d-b917-34cc49c37adf" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,82350b56-cff0-445d-b917-34cc49c37adf.aspx</comments>
      <category>Architecture</category>
      <category>Talks/TechEd Europe</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=1a502fa5-83db-4c43-bb33-b79bb2133713</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,1a502fa5-83db-4c43-bb33-b79bb2133713.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,1a502fa5-83db-4c43-bb33-b79bb2133713.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=1a502fa5-83db-4c43-bb33-b79bb2133713</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p>
            <img height="176" hspace="12" src="http://staff.newtelligence.net/clemensv/content/binary/image00712.png" width="207" align="right" />The
most fundamental element in FABRIQ is a message handler. The simplest possible message
handler implements the interface <i>IMessageHandler</i>, which has a single method
called <i>bool Process(Message msg)</i>. 
</p>
          <p>
Message handlers are CLR classes that can be declared as “handler types”
for use in a FABRIQ configuration file using an expression like:
</p>
          <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1">
            <tbody>
              <tr>
                <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7.5pt; BORDER-TOP: medium none; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: medium none; WIDTH: 6.15in; PADDING-TOP: 7.5pt; BORDER-BOTTOM: medium none" valign="top" width="590">
                  <p>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;</span>
                    <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handlerType</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">name</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="myHandlerType"</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">class</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="MyClass,
MyAssembly" </span>
                    <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">codebase</span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="http://codeserver/myAssembly.dll"</span>
                    <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">/&gt;</span>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
The handler-type name is a unique name that is used to refer to the handler-type from
a handler declaration that maps a handler-type into a pipeline (more on that later).
The class does of course refer to the class that implements the message handler and
the optional <i>codebase</i> attribute points to a location from where the assembly
can be automatically downloaded by the FABRIQ runtime as <img height="220" hspace="20" src="http://staff.newtelligence.net/clemensv/content/binary/image0081.png" width="366" align="left" vspace="20" />needed
(does that smell like “grid” to you?)
</p>
          <p>
Message handlers can be composed with other message handlers into a pipeline if and
only if they support another interface, which is, in fact, mandatory for any message
handlers that want to play within the FABRIQ. Simple message handlers are only used
internally for a few things. The additional interface <i>IChainableMessageHandler</i> has
a single property <i>IMessageHandler Next {get; }</i> and allows creating single-linked
lists of message handlers. <i>(This is indeed and almost inevitably a bit similar
to the guts of the Indigo connector or Remoting’s message sink model, but the
similarity quite rapidly ends at this point and after those four net code lines of
interface definitions)</i>.
</p>
          <p>
A handler declaration declares an instance of a handler-type inside a pipeline. The
handler declaration may contain an XML element with handler-specific configuration
data that is read to the handler if it implements the additional interface <i>IMessageHandlerConfiguration</i>.
</p>
          <table class="MsoTableGrid" style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0">
            <tbody>
              <tr>
                <td style="PADDING-RIGHT: 7.5pt; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; WIDTH: 6.15in; PADDING-TOP: 7.5pt" valign="top" width="590">
                  <p class="MsoNormal">
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="myHandlerType"&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">mycfg:data</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">xmlns</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">:</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">mycfg</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="…"&gt;<br />
      ...<br />
   &lt;/</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">mycfg:data</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;<br />
&lt;/</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;</span>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
A pipeline is a special type of message handler that wraps around a chain of message
handlers. A pipeline has explicit “head” and “tail” handlers
that frame the handler sequence. Because the pipeline is a message handler itself,
pipelines <img height="346" hspace="12" src="http://staff.newtelligence.net/clemensv/content/binary/image0091.png" width="442" align="right" />can
also be composed into other pipelines. Reusable pipelines are declared as pipeline-types
in configuration files. 
</p>
          <p>
 
</p>
          <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1">
            <tbody>
              <tr>
                <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7.5pt; BORDER-TOP: medium none; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: medium none; WIDTH: 6.15in; PADDING-TOP: 7.5pt; BORDER-BOTTOM: medium none" valign="top" width="590">
                  <p class="MsoNormal">
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipelineType</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">name</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="myPipelineType"&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="myHandlerType"&gt;<br />
      &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">mycfg:data</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">xmlns</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">:</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">mycfg</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="…"&gt;<br />
         ...<br />
      &lt;/</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">mycfg:data</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;<br />
   &lt;/</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="otherHandlerType"/&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="yetAnotherHandlerType"/&gt;<br />
&lt;/</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipelineType</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;</span>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
To compose a pipeline-type into another pipeline-type, you refer to it with the <i>pipeline</i> element.
</p>
          <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1">
            <tbody>
              <tr>
                <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 6.15in; PADDING-TOP: 0in; BORDER-BOTTOM: medium none" valign="top" width="590">
                  <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1">
                    <tbody>
                      <tr>
                        <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7.5pt; BORDER-TOP: medium none; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: medium none; WIDTH: 431.25pt; PADDING-TOP: 7.5pt; BORDER-BOTTOM: medium none" valign="top" width="575">
                          <p>
                            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;</span>
                            <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipelineType</span>
                            <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                            </span>
                            <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">name</span>
                            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="myPipelineType"&gt;<br />
   &lt;</span>
                            <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                            <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                            </span>
                            <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="myHandlerType"/&gt;<br />
   &lt;</span>
                            <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipeline</span>
                            <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                            </span>
                            <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="otherPipelineType"/&gt; 
<br />
   &lt;</span>
                            <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                            <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                            </span>
                            <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="otherHandlerType"/&gt;<br />
   &lt;</span>
                            <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                            <span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                            </span>
                            <span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="yetAnotherHandlerType"/&gt;<br />
&lt;/</span>
                            <span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipelineType</span>
                            <span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;</span>
                          </p>
                        </td>
                      </tr>
                    </tbody>
                  </table>
                  <p>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
If you want to use the built-in pipeline composition rules, you need to use the <i>endpoint </i>element
in the pipeline that marks the “middle” of the pipeline and the anchor
for composing pipelines. The name “endpoint” seems a bit odd, but that
element also serves to declare a single handler within the pipeline that acts in a
request/response way (this is the facility to dispatch to “normal code”
that doesn’t work in a one-way fashion). In that case, the endpoint element
may refer to a handlerType. The name “endpoint” simply stems from the
fact that that handler is considered to be the final destination for an incoming message
and that it yields a new message as a result. 
</p>
          <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1">
            <tbody>
              <tr>
                <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7.5pt; BORDER-TOP: medium none; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: medium none; WIDTH: 6.15in; PADDING-TOP: 7.5pt; BORDER-BOTTOM: medium none" valign="top" width="590">
                  <p>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipelineType</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">name</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">=”P1”&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="A"/&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">endpoint</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt; 
<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="B"/&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="C"/&gt;<br />
&lt;/</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipelineType</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;<br />
...<br />
&lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipeline</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="P1" </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">composition</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="inside"&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="D"/&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">endpoint
/</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt; 
<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="E"/&gt;<br />
&lt;/</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipelineType</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;<br />
&lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipelineType</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="P1" </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">composition</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="outside"&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="D"/&gt;<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">endpoint </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">/&gt; 
<br />
   &lt;</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">handler</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
                    </span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">type</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="E"/&gt;<br />
&lt;/</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">pipelineType</span>
                    <span lang="DA" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&gt;</span>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
With the composition rules, you can wrap a predefined pipeline (pipeline-type) or
place your own handlers inside a predefined pipeline. The first pipeline in the above
example (inside) yields the sequence D&gt;A&gt;B&gt;C&gt;E, the second (outside) yields
the sequence A&gt;D&gt;E&gt;B&gt;C. 
</p>
          <p>
 
</p>
          <p>
Next stop: Node-types and nodes.
</p>
        </div>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=1a502fa5-83db-4c43-bb33-b79bb2133713" />
      </body>
      <title>FABRIQ Message Handlers and Pipelines</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,1a502fa5-83db-4c43-bb33-b79bb2133713.aspx</guid>
      <link>http://vasters.com/clemensv/2004/06/23/FABRIQ+Message+Handlers+And+Pipelines.aspx</link>
      <pubDate>Wed, 23 Jun 2004 21:06:08 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
&lt;p&gt;
&lt;img height=176 hspace=12 src="http://staff.newtelligence.net/clemensv/content/binary/image00712.png" width=207 align=right&gt;The
most fundamental element in FABRIQ is a message handler. The simplest possible message
handler implements the interface &lt;i&gt;IMessageHandler&lt;/i&gt;, which has a single method
called &lt;i&gt;bool Process(Message msg)&lt;/i&gt;. 
&lt;/p&gt;
&lt;p&gt;
Message handlers are CLR classes that can be declared as &amp;#8220;handler types&amp;#8221;
for use in a FABRIQ configuration file using an expression like:
&lt;/p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7.5pt; BORDER-TOP: medium none; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: medium none; WIDTH: 6.15in; PADDING-TOP: 7.5pt; BORDER-BOTTOM: medium none" valign=top width=590&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handlerType&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="myHandlerType"&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;class&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="MyClass,
MyAssembly" &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;codebase&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="http://codeserver/myAssembly.dll"&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
The handler-type name is a unique name that is used to refer to the handler-type from
a handler declaration that maps a handler-type into a pipeline (more on that later).
The class does of course refer to the class that implements the message handler and
the optional &lt;i&gt;codebase&lt;/i&gt; attribute points to a location from where the assembly
can be automatically downloaded by the FABRIQ runtime as &lt;img height=220 hspace=20 src="http://staff.newtelligence.net/clemensv/content/binary/image0081.png" width=366 align=left vspace=20&gt;needed
(does that smell like &amp;#8220;grid&amp;#8221; to you?)
&lt;/p&gt;
&lt;p&gt;
Message handlers can be composed with other message handlers into a pipeline if and
only if they support another interface, which is, in fact, mandatory for any message
handlers that want to play within the FABRIQ. Simple message handlers are only used
internally for a few things. The additional interface &lt;i&gt;IChainableMessageHandler&lt;/i&gt; has
a single property &lt;i&gt;IMessageHandler Next {get; }&lt;/i&gt; and allows creating single-linked
lists of message handlers. &lt;i&gt;(This is indeed and almost inevitably a bit similar
to the guts of the Indigo connector or Remoting&amp;#8217;s message sink model, but the
similarity quite rapidly ends at this point and after those four net code lines of
interface definitions)&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
A handler declaration declares an instance of a handler-type inside a pipeline. The
handler declaration may contain an XML element with handler-specific configuration
data that is read to the handler if it implements the additional interface &lt;i&gt;IMessageHandlerConfiguration&lt;/i&gt;.
&lt;/p&gt;
&lt;table class=MsoTableGrid style="BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 7.5pt; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; WIDTH: 6.15in; PADDING-TOP: 7.5pt" valign=top width=590&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="myHandlerType"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;mycfg:data&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt;:&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;mycfg&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="&amp;#8230;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;mycfg:data&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
A pipeline is a special type of message handler that wraps around a chain of message
handlers. A pipeline has explicit &amp;#8220;head&amp;#8221; and &amp;#8220;tail&amp;#8221; handlers
that frame the handler sequence. Because the pipeline is a message handler itself,
pipelines &lt;img height=346 hspace=12 src="http://staff.newtelligence.net/clemensv/content/binary/image0091.png" width=442 align=right&gt;can
also be composed into other pipelines. Reusable pipelines are declared as pipeline-types
in configuration files. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7.5pt; BORDER-TOP: medium none; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: medium none; WIDTH: 6.15in; PADDING-TOP: 7.5pt; BORDER-BOTTOM: medium none" valign=top width=590&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipelineType&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;name&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="myPipelineType"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="myHandlerType"&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;mycfg:data&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt;:&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;mycfg&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="&amp;#8230;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;mycfg:data&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="otherHandlerType"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="yetAnotherHandlerType"/&amp;gt;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipelineType&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
To compose a pipeline-type into another pipeline-type, you refer to it with the &lt;i&gt;pipeline&lt;/i&gt; element.
&lt;/p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 6.15in; PADDING-TOP: 0in; BORDER-BOTTOM: medium none" valign=top width=590&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7.5pt; BORDER-TOP: medium none; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: medium none; WIDTH: 431.25pt; PADDING-TOP: 7.5pt; BORDER-BOTTOM: medium none" valign=top width=575&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipelineType&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="myPipelineType"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="myHandlerType"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipeline&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="otherPipelineType"/&amp;gt; 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="otherHandlerType"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="yetAnotherHandlerType"/&amp;gt;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipelineType&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
If you want to use the built-in pipeline composition rules, you need to use the &lt;i&gt;endpoint &lt;/i&gt;element
in the pipeline that marks the &amp;#8220;middle&amp;#8221; of the pipeline and the anchor
for composing pipelines. The name &amp;#8220;endpoint&amp;#8221; seems a bit odd, but that
element also serves to declare a single handler within the pipeline that acts in a
request/response way (this is the facility to dispatch to &amp;#8220;normal code&amp;#8221;
that doesn&amp;#8217;t work in a one-way fashion). In that case, the endpoint element
may refer to a handlerType. The name &amp;#8220;endpoint&amp;#8221; simply stems from the
fact that that handler is considered to be the final destination for an incoming message
and that it yields a new message as a result. 
&lt;/p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7.5pt; BORDER-TOP: medium none; PADDING-LEFT: 7.5pt; PADDING-BOTTOM: 7.5pt; BORDER-LEFT: medium none; WIDTH: 6.15in; PADDING-TOP: 7.5pt; BORDER-BOTTOM: medium none" valign=top width=590&gt;
&lt;p&gt;
&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipelineType&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;name&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;=&amp;#8221;P1&amp;#8221;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="A"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;endpoint&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt; 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="B"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="C"/&amp;gt;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipelineType&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;br&gt;
...&lt;br&gt;
&amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipeline&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="P1" &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;composition&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="inside"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="D"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;endpoint
/&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt; 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="E"/&amp;gt;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipelineType&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;br&gt;
&amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipelineType&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="P1" &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;composition&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="outside"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="D"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;endpoint &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;/&amp;gt; 
&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;handler&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;type&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="E"/&amp;gt;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;pipelineType&lt;/span&gt;&lt;span lang=DA style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
With the composition rules, you can wrap a predefined pipeline (pipeline-type) or
place your own handlers inside a predefined pipeline. The first pipeline in the above
example (inside) yields the sequence D&amp;gt;A&amp;gt;B&amp;gt;C&amp;gt;E, the second (outside) yields
the sequence A&amp;gt;D&amp;gt;E&amp;gt;B&amp;gt;C. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Next stop: Node-types and nodes.
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=1a502fa5-83db-4c43-bb33-b79bb2133713" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,1a502fa5-83db-4c43-bb33-b79bb2133713.aspx</comments>
      <category>Architecture</category>
      <category>Talks/TechEd Europe</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=a5dcc55e-7f14-4232-8f41-e3c8e08228c3</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,a5dcc55e-7f14-4232-8f41-e3c8e08228c3.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,a5dcc55e-7f14-4232-8f41-e3c8e08228c3.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=a5dcc55e-7f14-4232-8f41-e3c8e08228c3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We have one regular session:
</p>
        <ul>
          <li>
Architecture Overview Session (<span class="code">ARC405</span>) with <a href="http://www.mseventseurope.com/teched/content/speakers.aspx?speaker=2829">Arvindra
Sehmi</a> and myself: <span class="timeslot">Wed, Jun 30 12:00 - 13:15</span><span class="room">Room:
9b</span></li>
        </ul>
        <p>
          <span class="room">along with a Hands-On-Lab and a Chalk-Talk </span>
        </p>
        <ul>
          <li>
Internals Chalk Talk (<span class="code">CHT019</span>) with <a href="http://www.mseventseurope.com/teched/content/speakers.aspx?speaker=2829">Arvindra
Sehmi</a> (I will try to make it there. Thursday is very busy): <font size="2">Thu,
Jul 1 10:15 - 11:30 Room: U </font></li>
          <li>
            <font size="2">Hands-On Lab (<span class="code">ARC-IL01</span>) with newtelligence's <a href="http://www.mseventseurope.com/teched/content/speakers.aspx?speaker=2731">Achim
Oellers</a> and <a href="http://www.mseventseurope.com/teched/content/speakers.aspx?speaker=2730">Jörg Freiberger</a>:
Tue-Thu throughout the day, Room: O</font>
            <font size="2">
            </font>
          </li>
        </ul>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=a5dcc55e-7f14-4232-8f41-e3c8e08228c3" />
      </body>
      <title>FABRIQ at TechEd Europe</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,a5dcc55e-7f14-4232-8f41-e3c8e08228c3.aspx</guid>
      <link>http://vasters.com/clemensv/2004/06/22/FABRIQ+At+TechEd+Europe.aspx</link>
      <pubDate>Tue, 22 Jun 2004 10:59:05 GMT</pubDate>
      <description>&lt;p&gt;
We have one regular session:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Architecture Overview Session (&lt;span class=code&gt;ARC405&lt;/span&gt;) with &lt;a href="http://www.mseventseurope.com/teched/content/speakers.aspx?speaker=2829"&gt;Arvindra
Sehmi&lt;/a&gt; and myself: &lt;span class=timeslot&gt;Wed, Jun 30 12:00 - 13:15&lt;/span&gt; &lt;span class=room&gt;Room:
9b&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;span class=room&gt;along with a Hands-On-Lab and a Chalk-Talk&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Internals Chalk Talk (&lt;span class=code&gt;CHT019&lt;/span&gt;) with &lt;a href="http://www.mseventseurope.com/teched/content/speakers.aspx?speaker=2829"&gt;Arvindra
Sehmi&lt;/a&gt;&amp;nbsp;(I will try to make it there. Thursday is very busy): &lt;font size=2&gt;Thu,
Jul 1 10:15 - 11:30 Room: U &lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;font size=2&gt;Hands-On Lab (&lt;span class=code&gt;ARC-IL01&lt;/span&gt;) with newtelligence's &lt;a href="http://www.mseventseurope.com/teched/content/speakers.aspx?speaker=2731"&gt;Achim
Oellers&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.mseventseurope.com/teched/content/speakers.aspx?speaker=2730"&gt;J&amp;#246;rg&amp;nbsp;Freiberger&lt;/a&gt;:
Tue-Thu throughout the day, Room: O&lt;/font&gt;&lt;font size=2&gt;
&lt;/li&gt;
&lt;/ul&gt;
&gt;&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=a5dcc55e-7f14-4232-8f41-e3c8e08228c3" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,a5dcc55e-7f14-4232-8f41-e3c8e08228c3.aspx</comments>
      <category>Architecture</category>
      <category>Talks/TechEd Europe</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=7da0d5f9-2876-47f4-b621-3ae66ed10343</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,7da0d5f9-2876-47f4-b621-3ae66ed10343.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,7da0d5f9-2876-47f4-b621-3ae66ed10343.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=7da0d5f9-2876-47f4-b621-3ae66ed10343</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p>
For the impatient, here are two config snippets. The first one is the <i>in-the-box</i> “baseConfig”
that maps the built-in handlers into a config fragment that can be reused by all configuration
files via import:
</p>
          <p>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;?</span>
            <span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">xml</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">version</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="1.0"?&gt;<br />
&lt;</span>
            <span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">fabriq</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">xmlns</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">:</span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">xsd</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="http://www.w3.org/2001/XMLSchema"</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">xmlns</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">:</span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">xsi</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="http://www.w3.org/2001/XMLSchema-instance"</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
              <br />
        </span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">configuration</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="baseConfig"</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">version</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="1.0"</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
              <br />
        </span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">xmlns</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="urn:fabriq-europe-microsoft-com:2004-06:fabriq-configuration"&gt;<br /></span>
            <span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'">  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handlerType</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="fabriqMessageForwarderType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">class</span><span style="COLOR: blue">="Microsoft.Fabriq.Core.FabriqMessageForwarder,
Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handlerType</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="fabriqMessageMapperType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">class</span><span style="COLOR: blue">="Microsoft.Fabriq.Core.FabriqMessageMapper,
Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handlerType</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="fabriqContentRouterType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">class</span><span style="COLOR: blue">="Microsoft.Fabriq.Core.FabriqContentRouter,
Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handlerType</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="fabriqTrackerHandlerType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">class</span><span style="COLOR: blue">="Microsoft.Fabriq.Core.FabriqTrackerHandler,
Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">pipelineType</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="fabriqTrackerPipelineType"&gt;<br /></span>     <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">endpoint</span><span style="COLOR: blue">/&gt;<br /></span>     <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handler</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="fabriqTrackerHandlerType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>  <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">pipelineType</span><span style="COLOR: blue">&gt;<br /></span>  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">pipelineType</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="fabriqSimplePipelineType"&gt;<br /></span>     <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">endpoint</span><span style="COLOR: blue">/&gt;<br /></span>     <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">handler</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="fabriqMessageForwarderType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>  <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">pipelineType</span><span style="COLOR: blue">&gt;<br /></span>  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">nodeType</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="fabriqTrackerNodeType"&gt;<br /></span>    <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">actions</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">action</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="anyMessage"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">match</span><span style="COLOR: blue">="*"&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">input</span><span style="COLOR: blue">&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">message</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="xsd:anyType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">input</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">pipeline</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="fabriqTrackerPipelineType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">action</span><span style="COLOR: blue">&gt;<br /></span>    <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">actions</span><span style="COLOR: blue">&gt;<br /></span>  <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">nodeType</span><span style="COLOR: blue">&gt;<br /></span>  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">nodeType</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="fabriqSimpleNodeType"&gt;<br /></span>    <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">actions</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">action</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="anyMessage"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">match</span><span style="COLOR: blue">="*"&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">input</span><span style="COLOR: blue">&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">message</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="xsd:anyType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">input</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">pipeline</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="fabriqSimplePipelineType"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">action</span><span style="COLOR: blue">&gt;<br /></span>    <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">actions</span><span style="COLOR: blue">&gt;<br /></span>  <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">nodeType</span><span style="COLOR: blue">&gt;<br />
&lt;/</span><span style="COLOR: maroon">fabriq</span><span style="COLOR: blue">&gt;</span></span>
          </p>
          <p>
This simple configuration file builds on those base definitions for a very simple
network with two nodes:
</p>
          <p>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">&lt;?</span>
            <span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">xml</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">version</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="1.0"</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">?&gt;<br />
&lt;</span>
            <span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">fabriq</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">xmlns</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">:</span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">xsd</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="http://www.w3.org/2001/XMLSchema"</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'">xmlns</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">:</span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">xsi</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="http://www.w3.org/2001/XMLSchema-instance"<br /></span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">  </span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">configuration</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="twoSimpleNodes"</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">version</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="2.15"</span>
            <span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'">
            </span>
            <span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'">xmlns</span>
            <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'">="urn:fabriq-europe-microsoft-com:2004-06:fabriq-configuration"&gt;<br /></span>
            <span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'">  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">import</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">location</span><span style="COLOR: blue">="baseConfig.xml"</span><span style="COLOR: fuchsia"></span><span style="COLOR: blue">/&gt;<br /></span>  <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">network</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="twoSimpleNodes"&gt;<br /></span>    <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">node</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">host</span><span style="COLOR: blue">="*"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="FirstNode"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="fabriqSimpleNodeType"&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">ports</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wsa</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/ws/2004/03/addressing"&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;</span>msmq://localhost/private$/fabriqport/twoSimpleNodes/FirstNode<span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">ports</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">output</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">route</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">to</span><span style="COLOR: blue">="*"&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">destination</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">priority</span><span style="COLOR: blue">="1"&gt;<br /></span>            <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wsa</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/ws/2004/03/addressing"&gt;<br /></span>              <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;</span>fabriq://twoSimpleNodes/SecondNode<span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;<br /></span>            <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: blue">&gt;<br /></span>          <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">destination</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">route</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">output</span><span style="COLOR: blue">&gt;<br /></span>    <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">node</span><span style="COLOR: blue">&gt;<br /></span>    <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">node</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">host</span><span style="COLOR: blue">="*"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">name</span><span style="COLOR: blue">="SecondNode"</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">type</span><span style="COLOR: blue">="fabriqSimpleNodeType"&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">ports</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: fuchsia"></span><span style="COLOR: maroon">xmlns</span><span style="COLOR: fuchsia">:</span><span style="COLOR: red">wsa</span><span style="COLOR: blue">="http://schemas.xmlsoap.org/ws/2004/03/addressing"&gt;<br /></span>          <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;</span>msmq://localhost/private$/fabriqport/twoSimpleNodes/SecondNode<span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:Address</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">wsa:EndpointReference</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">ports</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">output</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">route</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">to</span><span style="COLOR: blue">="*"&gt;<br /></span>           <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">destination</span><span style="COLOR: fuchsia"></span><span style="COLOR: red">priority</span><span style="COLOR: blue">="1"&gt;<br /></span>               <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">replyTo</span><span style="COLOR: blue">/&gt;<br /></span>          <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">destination</span><span style="COLOR: blue">&gt;<br /></span>        <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">route</span><span style="COLOR: blue">&gt;<br /></span>      <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">output</span><span style="COLOR: blue">&gt;<br /></span>    <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">node</span><span style="COLOR: blue">&gt;<br /></span>  <span style="COLOR: blue">&lt;/</span><span style="COLOR: maroon">network</span><span style="COLOR: blue">&gt;<br />
&lt;/</span><span style="COLOR: maroon">fabriq</span><span style="COLOR: blue">&gt;</span></span>
            <span style="FONT-SIZE: 8pt">
              <br />
              <br />
            </span>A quick lap around this particular config:
</p>
          <p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>Defines
two nodes <i>fabriq://twoSimpleNodes/FirstNode</i> and <i>fabriq://twoSimpleNodes/SecondNode</i></p>
          <p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>Both
nodes will be hosted at any host that processes this config (node/@host=‘*’)
</p>
          <p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>The
primary transport address for both nodes is set to be a private MSMQ queue named “private$/fabriqport”
hosted on the local machine (ports section). So this network is really designed to
run on just a single box. 
</p>
          <p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>Both
nodes use the “fabriqSimpleNodeType” from the imported “baseConfig”
definition. That nodeType accepts any message with any action and runs it through
the “fabriqMessageForwarderType” handler (which merely maps wsa:MessageID
to wsa:RelatesTo)
</p>
          <p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
            <i>fabriq://twoSimpleNodes/FirstNode</i> routes
any resulting message to <i>fabriq://twoSimpleNodes/SecondNode</i> using a logical
URI. That’s then internally mapped to the preferred transport address that <i>fabriq://twoSimpleNodes/SecondNode</i> declares
for itself in its &lt;ports&gt; section.
</p>
          <p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
            <i>fabriq://twoSimpleNodes/SecondNode</i> routes
any resulting message to the wsa:ReplyTo destination contained in the original message
that was submitted from the outside to <i>fabriq://twoSimpleNodes/FirstNode</i>. The
ReplyTo header is carried through the entire network until such a &lt;replyTo&gt;
destination is reached. That’s FABRIQ’s concept of getting back to the
sender. 
</p>
        </div>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=7da0d5f9-2876-47f4-b621-3ae66ed10343" />
      </body>
      <title>A simple FABRIQ config file</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,7da0d5f9-2876-47f4-b621-3ae66ed10343.aspx</guid>
      <link>http://vasters.com/clemensv/2004/06/22/A+Simple+FABRIQ+Config+File.aspx</link>
      <pubDate>Tue, 22 Jun 2004 10:28:21 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
&lt;p&gt;
For the impatient, here are two config snippets. The first one is the &lt;i&gt;in-the-box&lt;/i&gt; &amp;#8220;baseConfig&amp;#8221;
that maps the built-in handlers into a config fragment that can be reused by all configuration
files via import:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;xml&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;version&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="1.0"?&amp;gt;&lt;br&gt;
&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;fabriq&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;xsd&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;xsi&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;configuration&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="baseConfig"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;version&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="1.0"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="urn:fabriq-europe-microsoft-com:2004-06:fabriq-configuration"&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handlerType&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqMessageForwarderType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;class&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Microsoft.Fabriq.Core.FabriqMessageForwarder,
Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handlerType&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqMessageMapperType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;class&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Microsoft.Fabriq.Core.FabriqMessageMapper,
Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handlerType&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqContentRouterType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;class&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Microsoft.Fabriq.Core.FabriqContentRouter,
Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handlerType&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqTrackerHandlerType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;class&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Microsoft.Fabriq.Core.FabriqTrackerHandler,
Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipelineType&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqTrackerPipelineType"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;endpoint&lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handler&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqTrackerHandlerType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipelineType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipelineType&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqSimplePipelineType"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;endpoint&lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;handler&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqMessageForwarderType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipelineType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;nodeType&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqTrackerNodeType"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;actions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;action&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="anyMessage"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;match&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="*"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;input&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;message&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="xsd:anyType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;input&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipeline&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqTrackerPipelineType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;action&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;actions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;nodeType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;nodeType&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqSimpleNodeType"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;actions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;action&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="anyMessage"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;match&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="*"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;input&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;message&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="xsd:anyType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;input&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;pipeline&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqSimplePipelineType"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;action&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;actions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;nodeType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;fabriq&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
This simple configuration file builds on those base definitions for a very simple
network with two nodes:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;xml&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;version&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="1.0"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;?&amp;gt;&lt;br&gt;
&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;fabriq&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;xsd&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;xsi&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="http://www.w3.org/2001/XMLSchema-instance"&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;configuration&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="twoSimpleNodes"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;version&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="2.15"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: fuchsia; FONT-FAMILY: 'Lucida Console'"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Lucida Console'"&gt;xmlns&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;="urn:fabriq-europe-microsoft-com:2004-06:fabriq-configuration"&amp;gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;import&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;location&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="baseConfig.xml"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;network&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="twoSimpleNodes"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;node&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;host&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="*"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="FirstNode"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqSimpleNodeType"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;ports&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wsa&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/ws/2004/03/addressing"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;msmq://localhost/private$/fabriqport/twoSimpleNodes/FirstNode&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;ports&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;output&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;route&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;to&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="*"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;destination&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;priority&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wsa&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/ws/2004/03/addressing"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;fabriq://twoSimpleNodes/SecondNode&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;destination&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;route&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;output&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;node&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;node&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;host&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="*"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="SecondNode"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="fabriqSimpleNodeType"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;ports&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;wsa&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.xmlsoap.org/ws/2004/03/addressing"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;msmq://localhost/private$/fabriqport/twoSimpleNodes/SecondNode&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:Address&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;wsa:EndpointReference&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;ports&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;output&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;route&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;to&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="*"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;destination&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;priority&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;replyTo&lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;destination&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;route&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;output&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;node&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; &lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;network&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;fabriq&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;A quick lap around this particular config:
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Defines
two nodes &lt;i&gt;fabriq://twoSimpleNodes/FirstNode&lt;/i&gt; and &lt;i&gt;fabriq://twoSimpleNodes/SecondNode&lt;/i&gt;
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Both
nodes will be hosted at any host that processes this config (node/@host=&amp;#8216;*&amp;#8217;)
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;The
primary transport address for both nodes is set to be a private MSMQ queue named &amp;#8220;private$/fabriqport&amp;#8221;
hosted on the local machine (ports section). So this network is really designed to
run on just a single box. 
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Both
nodes use the &amp;#8220;fabriqSimpleNodeType&amp;#8221; from the imported &amp;#8220;baseConfig&amp;#8221;
definition. That nodeType accepts any message with any action and runs it through
the &amp;#8220;fabriqMessageForwarderType&amp;#8221; handler (which merely maps wsa:MessageID
to wsa:RelatesTo)
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;i&gt;fabriq://twoSimpleNodes/FirstNode&lt;/i&gt; routes
any resulting message to &lt;i&gt;fabriq://twoSimpleNodes/SecondNode&lt;/i&gt; using a logical
URI. That&amp;#8217;s then internally mapped to the preferred transport address that &lt;i&gt;fabriq://twoSimpleNodes/SecondNode&lt;/i&gt; declares
for itself in its &amp;lt;ports&amp;gt; section.
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;i&gt;fabriq://twoSimpleNodes/SecondNode&lt;/i&gt; routes
any resulting message to the wsa:ReplyTo destination contained in the original message
that was submitted from the outside to &lt;i&gt;fabriq://twoSimpleNodes/FirstNode&lt;/i&gt;. The
ReplyTo header is carried through the entire network until such a &amp;lt;replyTo&amp;gt;
destination is reached. That&amp;#8217;s FABRIQ&amp;#8217;s concept of getting back to the
sender. 
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=7da0d5f9-2876-47f4-b621-3ae66ed10343" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,7da0d5f9-2876-47f4-b621-3ae66ed10343.aspx</comments>
      <category>Architecture</category>
      <category>Talks/TechEd Europe</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=4f25000d-2951-496f-99c7-815fee54b3e8</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,4f25000d-2951-496f-99c7-815fee54b3e8.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,4f25000d-2951-496f-99c7-815fee54b3e8.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=4f25000d-2951-496f-99c7-815fee54b3e8</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Before I can get into explaining how the FABRIQ works and how to configure it, I need
to explain a bit of the terminology we use:
</p>
        <ul>
          <li>
A <strong>network</strong> is the FABRIQ term that's rougly equivalent to an "application".
A network consists of an arbitrary number of network-distributed <em>nodes</em> that
are running inside the scope of the network. The network creates a common namespace
for all of these nodes. Networks are configured using a single XML configuration document
that is submitted (or routed via another network) to all hosts that shall host the
network's <em><strong>nodes</strong></em>.</li>
          <li>
A <strong>node</strong> is the FABRIQ term that is roughly equivalent to a "service"
or "component". A node is the smallest addressable unit. Every node has a "relative
node URI" that is composed of the <em>network</em> name and the node's own name into
{network/node}. This relative node URI can be composed with absolute, transport dependent
URIs such as <em>http://server/vdir/network/node</em> or <em>msmq://machine/queuename/network/node. </em>Within a
network, the runtime is also capable of resolving logical addresses of the form <em>fabriq://network/node</em> and
automatically map them to physical addresses. At runtime, a node accepts messages
and dispatches them into one of one or more <em><strong>action
pipelines</strong></em>. Each node may be guarded by a set of <a href="http://msdn.microsoft.com/library/en-us/dnglobspec/html/ws-policy.asp?frame=true">WS-Policy</a> assertions,
including Kerberos and X.509 cert authentication and authorization claims. A node
may be hosted on a dedicated machine, one a well defined set of machines or on "any"
machine within a cluster.</li>
          <li>
An<strong> action pipeline</strong> is a <strong><em>pipeline</em></strong> that
is associated with an action identifier and is roughly equivalent to a "method". An
action identifier is a URI as per <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws-addressing.asp">WS-Addressing</a>'s definition
of wsa:Action and is mapped to SOAPAction: whenever we go through HTTP. A node must
host at least one action pipeline with no limit on the number of action pipelines it
can support. An action may declare a set of message schema-types that it understands
and those message definitions may be used for validation inbound messages. An action
has one or more outbound message <em>routes </em>that are matched against the result
message action or destination. Multiple routes may match a message, which causes the
message flow to fork. For each route exist one or multiple prioritized routing destinations.
If multiple destinations have the same priority, the engine will balance calls across
those, otherwise the engine will use the ones with lower priority as backup routes.
At the end of each action pipeline is a <em>sender port</em> that sends resulting
messages out to their destinations, which may be other FABRIQ nodes or any other external
endpoint that understands the respective one-way message being sent. 
</li>
          <li>
A <strong>pipeline</strong> is a composition of a sequence of <strong><em>handlers</em></strong> or
nested pipelines. Pipelines can be nested in arbitrary depth. Pipelines are strictly unidirectional
message processors that have no concept of a "response" on the same thread analogous
to a return value (hence all actions are one-way only). A pipeline may or may not
be based on a predefinable <strong>pipeline-type. </strong>Pipeline-types allow
the definition of reusable pipelines that can be reused within the same network or
(via import) in multiple networks. 
</li>
          <li>
A <strong>handler</strong> refers to a software component (a CLR class) implementing
a set of interfaces that allow it to be composed into and hosted in a pipeline. Handlers should
be designed to perform only very primitive operations that can then be composed into
pipelines to implement specific functionality. Built-in handlers include a content-based
routing handler and an XSLT transformation handler. Custom handlers may contain any
type of logic. A handler receives messages and may consume them, evaluate and annotate
them and yield any number of resulting messages. The definition of a handler
embeds an XML fragment that allows the handler to configure itself. The actual reference
to the CLR class implementing the handler is defined in a <strong>handler-type.</strong></li>
          <li>
A <strong>handler-type</strong> associates a CLR class with a name that can be used
to define handlers within a configuration file. It also allows the declaration of
a code-base URL for the CLR class. This feature allows the installation of "virgin"
FABRIQ runtimes in a cluster and have the runtimes auto-download all the required
code for hosting a node from a central code store and therefore dramatically eases
deployment and dynamic reconfiguration of a FABRIQ cluster.</li>
        </ul>
        <p>
In the next couple of postings I will map these terms to concrete config files. 
</p>
        <p>
The interesting bit about config is that FABRIQ's configuration mechanism uses
the FABRIQ itself. FABRIQ has a predefined (extensible, configurable) network "fabriq"
with a node "configuration" that currently defines a single action "configure". The
pipeline for that action consists of a single handler (the FabriqConfigurationHandler)
and that expects and accepts the configuration files I'll describe over the next days
as the body of a message. With that, the configuration mechanism can be secured with
policy, or can be embedded into a larger network that does preprocessing or even performs
automatic assembly of configuration, or that automatically distributes configuration
from a single point across a large cluster of machines.
</p>
        <p>
To be continued ...
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=4f25000d-2951-496f-99c7-815fee54b3e8" />
      </body>
      <title>FABRIQ Terminology</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,4f25000d-2951-496f-99c7-815fee54b3e8.aspx</guid>
      <link>http://vasters.com/clemensv/2004/06/22/FABRIQ+Terminology.aspx</link>
      <pubDate>Tue, 22 Jun 2004 09:53:29 GMT</pubDate>
      <description>&lt;p&gt;
Before I can get into explaining how the FABRIQ works and how to configure it, I need
to explain a bit of the terminology we use:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
A &lt;strong&gt;network&lt;/strong&gt; is the FABRIQ term that's rougly equivalent to an "application".
A network consists of an arbitrary number of network-distributed&amp;nbsp;&lt;em&gt;nodes&lt;/em&gt; that
are running inside the scope of the&amp;nbsp;network. The network creates a common namespace
for all of these nodes. Networks are configured using a single XML configuration document
that is submitted (or routed via another network) to all hosts that shall host the
network's &lt;em&gt;&lt;strong&gt;nodes&lt;/strong&gt;&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
A &lt;strong&gt;node&lt;/strong&gt; is the FABRIQ term that is roughly equivalent to a "service"
or "component". A node is the smallest addressable unit. Every node has a "relative
node URI" that is composed of the &lt;em&gt;network&lt;/em&gt; name and the node's own name into
{network/node}. This relative node URI can be composed with absolute, transport dependent
URIs such as &lt;em&gt;http://server/vdir/network/node&lt;/em&gt; or &lt;em&gt;msmq://machine/queuename/network/node. &lt;/em&gt;Within&amp;nbsp;a
network, the runtime is also capable of resolving logical addresses of the form &lt;em&gt;fabriq://network/node&lt;/em&gt; and
automatically map them to physical addresses. At runtime, a node accepts messages
and&amp;nbsp;dispatches them into one&amp;nbsp;of&amp;nbsp;one or more&amp;nbsp;&lt;em&gt;&lt;strong&gt;action
pipelines&lt;/strong&gt;&lt;/em&gt;. Each node&amp;nbsp;may be guarded by a&amp;nbsp;set of &lt;a href="http://msdn.microsoft.com/library/en-us/dnglobspec/html/ws-policy.asp?frame=true"&gt;WS-Policy&lt;/a&gt; assertions,
including Kerberos and X.509 cert authentication and authorization claims. A node
may be hosted on a dedicated machine, one a well defined set of machines or on "any"
machine within a cluster.&lt;/li&gt;
&lt;li&gt;
An&lt;strong&gt; action pipeline&lt;/strong&gt; is a&amp;nbsp;&lt;strong&gt;&lt;em&gt;pipeline&lt;/em&gt;&lt;/strong&gt; that
is associated with an action identifier and is roughly equivalent to a "method". An
action identifier&amp;nbsp;is a&amp;nbsp;URI&amp;nbsp;as per &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws-addressing.asp"&gt;WS-Addressing&lt;/a&gt;'s&amp;nbsp;definition
of wsa:Action and is mapped to SOAPAction: whenever we go through HTTP. A node&amp;nbsp;must
host at least one action pipeline with no limit on the number of action pipelines&amp;nbsp;it
can support. An action may declare a set of message schema-types that it understands
and those message definitions may be used for validation inbound messages. An action
has one or more outbound message &lt;em&gt;routes &lt;/em&gt;that are matched against the result
message action or destination. Multiple routes may match a message, which causes the
message flow to fork. For each route exist one or multiple prioritized routing destinations.
If multiple destinations have the same priority, the engine will balance calls across
those, otherwise the engine will use the ones with lower priority as backup routes.
At the end of each action pipeline is a &lt;em&gt;sender port&lt;/em&gt; that sends resulting
messages out to their destinations, which may be other FABRIQ nodes or&amp;nbsp;any other&amp;nbsp;external
endpoint that understands the&amp;nbsp;respective one-way message being sent. 
&lt;/li&gt;
&lt;li&gt;
A &lt;strong&gt;pipeline&lt;/strong&gt; is a composition of a sequence of&amp;nbsp;&lt;strong&gt;&lt;em&gt;handlers&lt;/em&gt;&lt;/strong&gt; or
nested pipelines. Pipelines can be nested in arbitrary depth.&amp;nbsp;Pipelines are strictly&amp;nbsp;unidirectional
message processors that have no concept of a "response" on the same thread analogous
to a return value (hence all actions are one-way only). A pipeline may or may not
be based on a predefinable &lt;strong&gt;pipeline-type. &lt;/strong&gt;Pipeline-types&amp;nbsp;allow
the definition of reusable pipelines that can be reused within the same network or
(via import)&amp;nbsp;in multiple networks. 
&lt;/li&gt;
&lt;li&gt;
A &lt;strong&gt;handler&lt;/strong&gt; refers to&amp;nbsp;a software component (a CLR class) implementing
a set of interfaces that allow it to be composed into and hosted in a pipeline. Handlers&amp;nbsp;should
be designed to perform only very primitive operations that can then be composed into
pipelines to implement specific functionality. Built-in handlers include a content-based
routing handler and an XSLT transformation handler. Custom handlers&amp;nbsp;may contain&amp;nbsp;any
type of logic. A handler receives messages and may consume them, evaluate and annotate
them&amp;nbsp;and yield any number of resulting messages. The definition of a handler
embeds an XML fragment that allows the handler to configure itself. The actual reference
to the CLR class implementing the handler is defined in a &lt;strong&gt;handler-type.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
A &lt;strong&gt;handler-type&lt;/strong&gt; associates a CLR class with a name that can be used
to define handlers within a configuration file. It also allows the declaration of
a code-base URL for the CLR class. This feature allows the installation of "virgin"
FABRIQ runtimes in a cluster and have the runtimes auto-download all the required
code for hosting a node from a central code store and therefore dramatically eases
deployment and dynamic reconfiguration of a FABRIQ cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
In the next couple of postings I will map these terms to concrete config files. 
&lt;/p&gt;
&lt;p&gt;
The interesting bit about&amp;nbsp;config is that FABRIQ's configuration mechanism uses
the FABRIQ itself. FABRIQ has a predefined (extensible, configurable) network "fabriq"
with a node "configuration" that currently defines a single action "configure". The
pipeline for that action consists of a single handler (the FabriqConfigurationHandler)
and that expects and accepts the configuration files I'll describe over the next days
as the body of a message. With that, the configuration mechanism can be secured with
policy, or can be embedded into a larger network that does preprocessing or even performs
automatic assembly of configuration, or that automatically distributes configuration
from a single point across a large cluster of machines.
&lt;/p&gt;
&lt;p&gt;
To be continued ...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=4f25000d-2951-496f-99c7-815fee54b3e8" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,4f25000d-2951-496f-99c7-815fee54b3e8.aspx</comments>
      <category>Architecture</category>
      <category>Talks/TechEd Europe</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=7eb75a87-bfaa-4ec1-b496-f2c59bc06777</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,7eb75a87-bfaa-4ec1-b496-f2c59bc06777.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,7eb75a87-bfaa-4ec1-b496-f2c59bc06777.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=7eb75a87-bfaa-4ec1-b496-f2c59bc06777</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Achim and myself are currently in a series of very quick rev-cycles for the
first public release of the Microsoft/newtelligence <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=b1d34986-f53b-49c1-a56b-81c5fc042f32">FABRIQ</a> project
that we did with and for Microsoft EMEA HQ and that was conceived,
driven and brillantly managed by my architect colleague <a href="http://msdn.microsoft.com/architecture/community/newsletter/default.aspx#Profile">Arvindra
Sehmi</a>, who gave me the lead architect role for this project.
</p>
        <p>
[<em>Reminder/Disclaimer: this is not a product, but rather a pretty elaborate "how-to"
architecture example that comes with an implementation. Hence it's not a supported
Microsoft or newtelligence "framework" or an attempt at some general, definitive
guidance on how to write services. FABRIQ is an optimized architecture for fast, one-way,
message processing within network-distributed nodes consisting of sequences
of dynamically composed primitive processing steps. This isn't even trying to get
anywhere near the guidance aspirations of <a href="http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=9c29a963-594e-4e7a-9c45-576198df8058">Shadowfax</a>,
or let alone <a href="http://blogs.msdn.com/richturner666/archive/2004/03/05/84834.aspx">all
the</a><a href="http://msdn.microsoft.com/longhorn/understanding/pillars/indigo/migratevideo/">guidance </a>we're
getting from the <a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx">Indigo</a> team
or even the parallel work I've been doing for MS by building <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=68872086-b344-431b-a6fa-9b358aa386e1">Proseware</a>.</em>]
</p>
        <p>
We've settled on build 1.0.4173 (yesterday) to be the TechEd version, but we still
found a last minute issue where we weren't using WSE 2.0 correctly (not
setting the SoapEnvelope.Context.Destination property for use with a bare WSE2 Pipeline in
the presence of policy) and when I reassembled the distribution I didn't reset
an option that I use for debugging on my machine and that caused installation hiccups over
at Achim's machine. Achim commented the hour-long bug hunt with "Ah, you gotta love
software!". 
</p>
        <p>
There will be <strong>hands-on labs</strong> at TechEd Europe led by Achim and Jörg
that let you play with what we (very much including our friends at Microsoft Argentina
and Microsoft EMEA) have built. And even if you don't have a proper use
for a one-way queuing network architecture, it actually turned into a fun thing
to play with. 
</p>
        <p>
I'll be starting to explain aspects of the spec over the upcoming days and will explain
how the architecture works, how you configure it and what its potential
uses are. Already posted is some relevant information about the great idea
of an <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=4eda9fe7-e36e-4e64-b170-2f29a88621dd">XmlReader-based
message design</a> (which I designed inspired by the Indigo PDC
build) and our use of <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=45606a61-10a0-4790-8938-be3c22787a35">lightweight
transactions</a>. 
</p>
        <p>
I am in the boot phase for the next software project right now (proprietary work)
and I have identified very many good uses for the FABRIQ model in there already (<a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=154">hint</a>).
</p>
        <p>
Once all parties involved are giving their "thumbs up", we'll also make the source
code drop and the binaries available to the public (you) and from there we're looking
forward to your input (and contributions?).
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=7eb75a87-bfaa-4ec1-b496-f2c59bc06777" />
      </body>
      <title>Wrapping up the FABRIQ</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,7eb75a87-bfaa-4ec1-b496-f2c59bc06777.aspx</guid>
      <link>http://vasters.com/clemensv/2004/06/22/Wrapping+Up+The+FABRIQ.aspx</link>
      <pubDate>Tue, 22 Jun 2004 07:34:36 GMT</pubDate>
      <description>&lt;p&gt;
Achim and myself are&amp;nbsp;currently in a series of very quick rev-cycles for&amp;nbsp;the
first public release of the Microsoft/newtelligence &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=b1d34986-f53b-49c1-a56b-81c5fc042f32"&gt;FABRIQ&lt;/a&gt; project
that we did with and for&amp;nbsp;Microsoft&amp;nbsp;EMEA HQ&amp;nbsp;and that was conceived,
driven&amp;nbsp;and brillantly managed by&amp;nbsp;my architect colleague&amp;nbsp;&lt;a href="http://msdn.microsoft.com/architecture/community/newsletter/default.aspx#Profile"&gt;Arvindra
Sehmi&lt;/a&gt;, who gave me the lead architect role for this project.
&lt;/p&gt;
&lt;p&gt;
[&lt;em&gt;Reminder/Disclaimer: this is not a product, but rather a pretty elaborate "how-to"
architecture example that comes with an implementation.&amp;nbsp;Hence it's not a supported
Microsoft or newtelligence "framework" or an attempt at some&amp;nbsp;general, definitive
guidance on how to write services. FABRIQ is an optimized architecture for fast, one-way,
message processing&amp;nbsp;within network-distributed&amp;nbsp;nodes consisting of&amp;nbsp;sequences
of dynamically composed primitive processing steps. This isn't even trying to get
anywhere near the guidance aspirations of &lt;a href="http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=9c29a963-594e-4e7a-9c45-576198df8058"&gt;Shadowfax&lt;/a&gt;,
or let alone &lt;a href="http://blogs.msdn.com/richturner666/archive/2004/03/05/84834.aspx"&gt;all
the&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/longhorn/understanding/pillars/indigo/migratevideo/"&gt;guidance &lt;/a&gt;we're
getting from the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx"&gt;Indigo&lt;/a&gt;&amp;nbsp;team
or even the parallel work I've been doing for&amp;nbsp;MS by building &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=68872086-b344-431b-a6fa-9b358aa386e1"&gt;Proseware&lt;/a&gt;.&lt;/em&gt;]
&lt;/p&gt;
&lt;p&gt;
We've settled on build 1.0.4173 (yesterday) to be the TechEd version, but we still
found&amp;nbsp;a last minute&amp;nbsp;issue where we weren't using WSE 2.0 correctly (not
setting the SoapEnvelope.Context.Destination property for use with a bare WSE2 Pipeline&amp;nbsp;in
the presence of&amp;nbsp;policy) and when I reassembled the distribution I didn't reset
an option that I use for debugging on my machine and that caused installation hiccups&amp;nbsp;over
at&amp;nbsp;Achim's machine. Achim commented the hour-long bug hunt with "Ah, you gotta&amp;nbsp;love
software!". 
&lt;/p&gt;
&lt;p&gt;
There will be &lt;strong&gt;hands-on labs&lt;/strong&gt; at TechEd Europe led by Achim and J&amp;#246;rg
that let you play with what we (very much including our friends at Microsoft Argentina
and Microsoft EMEA)&amp;nbsp;have built. And&amp;nbsp;even if you don't have a proper use
for a one-way queuing network architecture, it actually turned into a fun&amp;nbsp;thing
to play with.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I'll be starting to explain aspects of the spec over the upcoming days and will explain
how the&amp;nbsp;architecture&amp;nbsp;works, how you configure it&amp;nbsp;and what its potential
uses are. Already posted is some relevant information about&amp;nbsp;the&amp;nbsp;great idea
of an &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=4eda9fe7-e36e-4e64-b170-2f29a88621dd"&gt;XmlReader-based
message design&lt;/a&gt;&amp;nbsp;(which I&amp;nbsp;designed&amp;nbsp;inspired by&amp;nbsp;the Indigo PDC
build) and our use of &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=45606a61-10a0-4790-8938-be3c22787a35"&gt;lightweight
transactions&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
I am in the boot phase for the next software project right now (proprietary work)
and I have identified very many good uses for the FABRIQ model in there already (&lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=154"&gt;hint&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Once all parties involved are giving&amp;nbsp;their "thumbs up", we'll also make the source
code drop and the binaries available to the public (you) and from there we're looking
forward to your input (and contributions?).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=7eb75a87-bfaa-4ec1-b496-f2c59bc06777" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,7eb75a87-bfaa-4ec1-b496-f2c59bc06777.aspx</comments>
      <category>Architecture</category>
      <category>Talks/TechEd Europe</category>
      <category>Technology</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=68872086-b344-431b-a6fa-9b358aa386e1</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,68872086-b344-431b-a6fa-9b358aa386e1.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,68872086-b344-431b-a6fa-9b358aa386e1.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=68872086-b344-431b-a6fa-9b358aa386e1</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p dir="ltr">
The <a href="http://www.mseventseurope.com/teched/content/sessionsearch.aspx">TechEd
Europe</a> session search tool starts to reveal what I am up to in Amsterdam
...
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p dir="ltr">
            <em>
              <strong>CTS308 Building Proseware, Inc. – a non-trivial service-oriented
system </strong>(just me)</em>
          </p>
          <p>
            <em>Proseware, Inc. is an online bookseller. A big one. They have warehouses all over
Europe, have millions of customers, sell millions of different items and process tens
of thousands of orders every day. So imagine they came around to you and asked you
to build a system for them. What would you do? In this session, we explain what we
would do and what we did. The Proseware Services Demo consists of 14 autonomous, collaborating
services, designed with best-practice architecture principles and implemented on Windows
Server 2003. Proseware leverages the power of technologies such as Enterprise Services,
ASP.NET Web Services, the Microsoft Message Queue, Microsoft Web Services Enhancements
2.0 to implement a large scale, robust, secure and scalable service oriented system
that shows how all these technologies can be put to work effectively and that reflects
the complexity of real-life enterprise applications.</em>
          </p>
        </blockquote>
        <p dir="ltr">
And this is going to be great fun, too:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <strong>ARC230 The Nerd, the Suit and the Fortune Teller </strong>(sharing the stage
with Pat Helland and Rafal Lukawiecki)
</p>
          <p>
Object Orientation promised to deliver us from all IT evil and to ensure longevity
and reuse of software. With today’s business requirements changing faster than
it takes to compile an application and an ever-present call for integration, even
that approach does not seem to work. However, it seems that Service Oriented Architecture
(SOA), Operational Service Orientation of IT departments (MOF, ITIL), Service-Based
Interoperability (WS-Guidelines) and Service-Based User Interfaces (messenger, wizards)
are quietly converging onto a new paradigm in IT. For the lack of a better name, we
call it “Service Oriented Convergence”. Come to this session and see if
this concept has any merit and value to you. Rather than endure a typical PowerPoint
presentation, you will observe a discussion between: an experienced developer, an
unforgiving businessman in charge of IT and a visionary technology innovator. On your
behalf, they will battle out their differing points of view and leave you with useful
guidance on ways to handle this very important issue that will affect your job, work
and future. Oh, and we hope this session is unlikely to be boring.
</p>
        </blockquote>
        <p dir="ltr" align="left">
There is also an updated sessions on the FABRIQ (ARC405, with Arvindra Sehmi)
and even a hands-on lab where you can play with the FABRIQ yourself (ARC-IL01,
led by newtelligence instructors Achim Oellers and Jörg Freiberger). 
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=68872086-b344-431b-a6fa-9b358aa386e1" />
      </body>
      <title>TechEd Europe: CTS308, ARC230, ARC405, ARC-IL01</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,68872086-b344-431b-a6fa-9b358aa386e1.aspx</guid>
      <link>http://vasters.com/clemensv/2004/06/01/TechEd+Europe+CTS308+ARC230+ARC405+ARCIL01.aspx</link>
      <pubDate>Tue, 01 Jun 2004 14:54:28 GMT</pubDate>
      <description>&lt;p dir=ltr&gt;
The &lt;a href="http://www.mseventseurope.com/teched/content/sessionsearch.aspx"&gt;TechEd
Europe&lt;/a&gt; session search tool starts to reveal&amp;nbsp;what I am up to in Amsterdam
...
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p dir=ltr&gt;
&lt;em&gt;&lt;strong&gt;CTS308 Building Proseware, Inc. &amp;#8211; a non-trivial service-oriented
system &lt;/strong&gt;(just me)&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Proseware, Inc. is an online bookseller. A big one. They have warehouses all over
Europe, have millions of customers, sell millions of different items and process tens
of thousands of orders every day. So imagine they came around to you and asked you
to build a system for them. What would you do? In this session, we explain what we
would do and what we did. The Proseware Services Demo consists of 14 autonomous, collaborating
services, designed with best-practice architecture principles and implemented on Windows
Server 2003. Proseware leverages the power of technologies such as Enterprise Services,
ASP.NET Web Services, the Microsoft Message Queue, Microsoft Web Services Enhancements
2.0 to implement a large scale, robust, secure and scalable service oriented system
that shows how all these technologies can be put to work effectively and that reflects
the complexity of real-life enterprise applications.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr&gt;
And this is going to be great fun, too:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;strong&gt;ARC230 The Nerd, the Suit and the Fortune Teller &lt;/strong&gt;(sharing the stage
with Pat Helland and Rafal&amp;nbsp;Lukawiecki)
&lt;/p&gt;
&lt;p&gt;
Object Orientation promised to deliver us from all IT evil and to ensure longevity
and reuse of software. With today&amp;#8217;s business requirements changing faster than
it takes to compile an application and an ever-present call for integration, even
that approach does not seem to work. However, it seems that Service Oriented Architecture
(SOA), Operational Service Orientation of IT departments (MOF, ITIL), Service-Based
Interoperability (WS-Guidelines) and Service-Based User Interfaces (messenger, wizards)
are quietly converging onto a new paradigm in IT. For the lack of a better name, we
call it &amp;#8220;Service Oriented Convergence&amp;#8221;. Come to this session and see if
this concept has any merit and value to you. Rather than endure a typical PowerPoint
presentation, you will observe a discussion between: an experienced developer, an
unforgiving businessman in charge of IT and a visionary technology innovator. On your
behalf, they will battle out their differing points of view and leave you with useful
guidance on ways to handle this very important issue that will affect your job, work
and future. Oh, and we hope this session is unlikely to be boring.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr align=left&gt;
There&amp;nbsp;is also an updated sessions on the FABRIQ (ARC405, with Arvindra Sehmi)
and&amp;nbsp;even a hands-on lab where you can play with the FABRIQ yourself (ARC-IL01,
led by newtelligence instructors Achim Oellers and J&amp;#246;rg Freiberger). 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=68872086-b344-431b-a6fa-9b358aa386e1" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,68872086-b344-431b-a6fa-9b358aa386e1.aspx</comments>
      <category>Talks/TechEd Europe</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=d12b4ab8-d615-4c6c-90ed-5e77a830e6ea</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,d12b4ab8-d615-4c6c-90ed-5e77a830e6ea.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,d12b4ab8-d615-4c6c-90ed-5e77a830e6ea.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=d12b4ab8-d615-4c6c-90ed-5e77a830e6ea</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am back home from San Diego now. About 3 more hours of jet-lag to work on. This
will be a very busy two weeks until I make a little excursion to the <a href="http://www.microsoft.com/middleeast/southgulf/events/pdc/">Pakistan
Developer Conference</a> in Karachi and then have another week to do the final preparations
for <a href="http://www.microsoft.com/europe/teched/">TechEd Europe</a>. 
</p>
        <p>
One of the three realy cool talks I'll do at TechEd Europe is called "Building <em>Proseware</em>"
and explains the the scenario, architecture, and core implementation techniques of <em>Proseware, </em>an
industrial-strength, robust, service-oriented example application that newtelligence has
designed and implemented for Microsoft over the past 2 months. 
</p>
        <p>
The second talk is one that I have been looking forward to for a long
time: Rafal Lukawiecki and myself are going to co-present a session. And if that weren't
enough: The moderator of our little on-stage banter about services is nobody else
than <a href="http://blogs.msdn.com/pathelland">Pat Helland</a>.
</p>
        <p>
And lastly, I'll likely sign-off on the first public version of the <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=b1d34986-f53b-49c1-a56b-81c5fc042f32">FABRIQ</a> later
this week (we had been waiting for WSE 2.0 to come out), which means that Arvindra
Sehmi and myself can not only repeat our FABRIQ talk in Amsterdam but have shipping
bits to show this time. There will even be a hands-on lab on FABRIQ led by newtelligence
instructors Achim Oellers and Jörg Freiberger. The plan is to launch the bits
before the show, so watch this space for "when and where".
</p>
        <p>
Overall, and as much as I like meeting all my friends in the U.S. and appreciate the
efforts of the TechEd team over there, I think that for the last 4 years TechEd Europe
consistently has been and will be again the better of the two TechEd events from
a developer perspective. In Europe, we have <a href="http://www.microsoft.com/europe/teched/">TechEd</a> and <a href="http://www.microsoft.com/europe/msitforum/">IT
Forum</a>, whereby TechEd is more developer focused and IT Forum is for
the operations side of the house. Hence, TechEd Europe can go and does go a lot deeper into
developer topics than TechEd US. 
</p>
        <p>
There's a lot of work ahead so don't be surprised if the blog falls silent again until
I unleash the information avalanche on Proseware and FABRIQ.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=d12b4ab8-d615-4c6c-90ed-5e77a830e6ea" />
      </body>
      <title>And now ... getting ready for TechEd Europe</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,d12b4ab8-d615-4c6c-90ed-5e77a830e6ea.aspx</guid>
      <link>http://vasters.com/clemensv/2004/05/31/And+Now+Getting+Ready+For+TechEd+Europe.aspx</link>
      <pubDate>Mon, 31 May 2004 09:11:16 GMT</pubDate>
      <description>&lt;p&gt;
I am back home from San Diego now. About 3 more hours of jet-lag to work on. This
will be a very busy two weeks until I make a little excursion to the &lt;a href="http://www.microsoft.com/middleeast/southgulf/events/pdc/"&gt;Pakistan
Developer Conference&lt;/a&gt; in Karachi and then have another week to do the final preparations
for &lt;a href="http://www.microsoft.com/europe/teched/"&gt;TechEd Europe&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
One of the&amp;nbsp;three realy cool talks I'll do at TechEd Europe is called&amp;nbsp;"Building &lt;em&gt;Proseware&lt;/em&gt;"
and explains the the scenario, architecture, and core implementation techniques of &lt;em&gt;Proseware, &lt;/em&gt;an
industrial-strength, robust,&amp;nbsp;service-oriented example application that&amp;nbsp;newtelligence&amp;nbsp;has
designed and&amp;nbsp;implemented for Microsoft over the past 2 months. 
&lt;/p&gt;
&lt;p&gt;
The second talk is&amp;nbsp;one that I&amp;nbsp;have been&amp;nbsp;looking forward to for a long
time: Rafal Lukawiecki and myself are going to co-present a session. And if that weren't
enough: The moderator of our little on-stage banter about services is nobody else
than &lt;a href="http://blogs.msdn.com/pathelland"&gt;Pat Helland&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
And lastly, I'll likely sign-off on the first public version of the &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=b1d34986-f53b-49c1-a56b-81c5fc042f32"&gt;FABRIQ&lt;/a&gt; later
this week (we had been waiting for WSE 2.0 to come out), which means that Arvindra
Sehmi and myself can not only repeat our FABRIQ talk in Amsterdam but have shipping
bits to show this time. There will even be a hands-on lab on FABRIQ led by newtelligence
instructors Achim Oellers and J&amp;#246;rg Freiberger. The plan is to launch the bits
before the show, so watch this space for "when and where".
&lt;/p&gt;
&lt;p&gt;
Overall, and as much as I like meeting all my friends in the U.S. and appreciate the
efforts of the TechEd team over there, I think that for the last 4 years TechEd Europe
consistently has been and will be again the better of the two&amp;nbsp;TechEd events from
a developer perspective. In Europe, we have &lt;a href="http://www.microsoft.com/europe/teched/"&gt;TechEd&lt;/a&gt; and &lt;a href="http://www.microsoft.com/europe/msitforum/"&gt;IT
Forum&lt;/a&gt;,&amp;nbsp;whereby TechEd is&amp;nbsp;more developer focused and IT Forum is for
the operations side of the house. Hence, TechEd Europe can go and does go a lot deeper&amp;nbsp;into
developer topics than TechEd US. 
&lt;/p&gt;
&lt;p&gt;
There's a lot of work ahead so don't be surprised if the blog falls silent again until
I unleash the information avalanche on Proseware and FABRIQ.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=d12b4ab8-d615-4c6c-90ed-5e77a830e6ea" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,d12b4ab8-d615-4c6c-90ed-5e77a830e6ea.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Talks</category>
      <category>Talks/TechEd Europe</category>
      <category>Talks/TechEd US</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=3b781b79-51b3-4945-bfa7-9293a7407bfc</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,3b781b79-51b3-4945-bfa7-9293a7407bfc.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,3b781b79-51b3-4945-bfa7-9293a7407bfc.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=3b781b79-51b3-4945-bfa7-9293a7407bfc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am getting ready for the Longhorn Developer Preview <a href="/clemensv/PermaLink.aspx?guid=48af790c-877b-4889-a248-e887c5f46ec9">tour</a>. Now
that the whole notebook ordeal is hopefully over, I have been and still am polishing
slides and we'll have an online rehearsal today during the day. Furthermore, we're
working with Microsoft EMEA on a two day workshop about writing service oriented applications
that consolidates all the thinking that I've been blogging about in the past year.
The "sample" around which the workshop will center is, not very surprisingly, the <a href="/clemensv/PermaLink.aspx?guid=b1d34986-f53b-49c1-a56b-81c5fc042f32">FABRIQ</a>. 
</p>
        <p>
I really need to get back into a "blogging mood".
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=3b781b79-51b3-4945-bfa7-9293a7407bfc" />
      </body>
      <title>Getting ready for the tour</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,3b781b79-51b3-4945-bfa7-9293a7407bfc.aspx</guid>
      <link>http://vasters.com/clemensv/2004/01/20/Getting+Ready+For+The+Tour.aspx</link>
      <pubDate>Tue, 20 Jan 2004 08:04:56 GMT</pubDate>
      <description>&lt;p&gt;
I am getting ready for the Longhorn Developer Preview &lt;a href="/clemensv/PermaLink.aspx?guid=48af790c-877b-4889-a248-e887c5f46ec9"&gt;tour&lt;/a&gt;.&amp;nbsp;Now
that the whole notebook ordeal is hopefully over, I have been and still am polishing
slides and we'll have an online&amp;nbsp;rehearsal today during the day. Furthermore,&amp;nbsp;we're
working with Microsoft EMEA on a two day workshop&amp;nbsp;about writing service oriented&amp;nbsp;applications
that consolidates all the thinking that I've been blogging about in the past year.
The "sample" around which the workshop will center is, not very surprisingly, the &lt;a href="/clemensv/PermaLink.aspx?guid=b1d34986-f53b-49c1-a56b-81c5fc042f32"&gt;FABRIQ&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
I really need to get back into a "blogging mood".
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=3b781b79-51b3-4945-bfa7-9293a7407bfc" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,3b781b79-51b3-4945-bfa7-9293a7407bfc.aspx</comments>
      <category>newtelligence</category>
      <category>Talks</category>
      <category>Talks/EMEA Longhorn Preview</category>
      <category>Technology/FABRIQ</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=45606a61-10a0-4790-8938-be3c22787a35</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,45606a61-10a0-4790-8938-be3c22787a35.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,45606a61-10a0-4790-8938-be3c22787a35.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=45606a61-10a0-4790-8938-be3c22787a35</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p>
            <img height="451" hspace="12" src="/clemensv/content/binary/image005.png" width="541" align="right" />Slowly,
slowly I am seeing some light at the end of the tunnel designing the <a href="/clemensv/PermaLink.aspx?guid=b1d34986-f53b-49c1-a56b-81c5fc042f32">FABRIQ</a>.
It’s a very challenging project and although I am having a lot of fun, it’s
really much harder work than I initially thought.
</p>
          <p>
Today I’d like to share some details with you on how I am employing the <a href="/clemensv/PermaLink.aspx?guid=b598b91f-bb97-4aad-9404-bceb3aff08c9">lightweight
transaction coordinator</a> “WorkSet” that <a href="http://www.stevesw.com/blog/">Steve
Swartz</a> and I wrote during this year’s Scalable Applications tour inside
the FABRIQ.
</p>
          <p>
The obvious problem with one-way pipeline processing (and a problem with the composition
of independent cross-cutting concerns in general) is that failure management is pretty
difficult. Once one of the pipeline components fails, other components may already
have done work that might not be valid if the processing fails further down through
the pipeline. The simplest example of that is, of course, logging. If you log a message
as the first stage of a pipeline and a subsequent stage fails, do you want the log
entry to remain where it is? The problem is: it depends. So although you might need
to see the message before it is being processed by stages further down the pipeline,
you can only find out whether it is flagged as success or failure once processing
is complete or you may want to discard the log entry altogether on failure.
</p>
          <p>
Before I go into details, I’ll clarify some of the terminology I am using:
</p>
          <p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>A <b>message
handler</b> is an object that typically implements a <b>ProcessMessage()</b> method
and a property <b>Next</b> pointing to the handler that immediately follows it in
a chain of handlers.
</p>
          <p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>A <b>pipeline</b> hosts
a chain of message handlers and has a “head” and a “tail”
message handler which link the pipeline with that chain of handlers. The pipeline
itself is a message handler itself, so that pipelines can be nested inside pipelines.
The <b><i>FabriqPipeline</i></b> is a concrete implementation of such a pipeline that
has, amongst other things, support for the mechanism described here.
</p>
          <p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>A <b>message</b> is
an object representing a SOAP message and has a collection of headers, a body (as
an XmlReader) and a transient collection of message properties that are only valid
as long as the message is in memory.
</p>
          <p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>A <b>work
set</b> is a lightweight, in-memory 2PC transaction that provides really only the
“atomicity” and “consistency” properties out of the well-known
“ACID” transaction property set. “Durability” is not a goal
here and “isolation” sort of guaranteed, because messages are not shared
resources. If external resources are touched, isolation needs to be guaranteed by
the enlisted workers. A <b>worker</b> is a lightweight resource manager that can enlist
into a work set and provides Prepare/Commit/Abort entry points. 
</p>
          <p>
Whenever a new message arrives at a <b><i>FabriqPipeline</i></b>, a new work set is
created that governs the fault management for processing the respective message. The
work set is associated with the message by creating a <b><i>“@WorkSet”</i></b> property
on the message that references the WorkSet object. The pipeline itself maintains no
immediate reference to the work set – it is message-bound.
</p>
          <div align="right">
            <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 6.75pt; BORDER-LEFT: medium none; MARGIN-RIGHT: 6.75pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" align="right" border="1">
              <tbody>
                <tr>
                  <td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top">
                    <p align="left">
                      <span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'">public</span>
                      <span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'">
                        <span style="COLOR: blue">class</span> FabriqWorker
: IWorker<br />
{<br />
   <span style="COLOR: blue">private</span> Message msg;<br />
   <span style="COLOR: blue">private</span> FabriqMessageHandler handler;<br />
        
<br />
    <span style="COLOR: blue">public</span> FabriqWorker(Message msg,
FabriqMessageHandler handler)<br />
    {<br />
         msg = msg;<br />
         handler = handler;<br />
    }<br />
        
<br />
     <span style="COLOR: blue">bool</span> IWorker.Prepare(<span style="COLOR: blue">bool</span> vote)<br />
    {<br />
      <span style="COLOR: blue">return</span> handler.Prepare(vote,
msg );<br />
    }<br /><br />
    <span style="COLOR: blue">void</span> IWorker.Abort()<br />
    {<br />
       handler.Abort( msg );<br />
    }<br /><br />
    <span style="COLOR: blue">void</span> IWorker.Commit()<br />
    {<br />
       handler.Commit( msg );<br />
    }<br />
}</span>
                    </p>
                    <p>
 
</p>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
          <p>
The <b><i>FabriqPipeline</i></b> does not enlist any workers into the work set directly.
Instead, message handlers enlist their workers into the work set as the message flows
through the pipeline. A “worker” is an implementation of the <i>IWorker </i>interface
that can be enlisted into a work set as a participant. Because the pipeline instance
along with all message handler instances shall be reusable and shall be capable of
processing several messages concurrently, the worker is not implemented on the handler
itself. Instead, workers are implemented as a separate helper class (FabriqWorker).
Instances of these worker classes are enlisted into the message’s work set.
The worker instance gets a reference to the message it deals with and to the handler
which enlisted it into the work set; once the worker is called during the 2 phase
commit protocol phases, it calls the message handler’s implementation of Prepare/Abort/Commit. 
</p>
          <p>
This way, we can have one “all in one place” implementation of all message-handling
on the message handler, but are keeping the transaction dependent state in a very
lightweight object; therefore we can share the entire (likely complex) pipeline and
handlers for many concurrent transactions, because none of the pipeline is made dependent
on the message or transaction state. 
</p>
          <table class="MsoTableGrid" style="MARGIN-LEFT: 6.75pt; MARGIN-RIGHT: 6.75pt; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" align="left" border="0">
            <tbody>
              <tr>
                <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm" valign="top">
                  <p>
                    <span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'">public abstract class FabriqMessageHandler
: 
<br />
   IMessageHandler<br />
{<br />
   IMessageHandler next = null;<br />
   public FabriqMessageHandler()<br />
   {<br />
   }<br />
   
<br />
   public virtual IMessageHandler Next  <br />
   { get { return next; } set { next = value; }}<br />
   
<br />
   bool IMessageHandler.Process(Message msg)<br />
   {<br />
      bool result = this.Preprocess(msg);<br />
      WorkSet workSet = msg.Properties["@WorkSet"] as WorkSet;<br />
      if ( workSet != null )<br />
      {<br />
          workSet.Register(new FabriqWorker(
msg, this ) );<br />
      }<br />
      return result;            
<br />
   }<br /><br />
   protected bool Forward( Message msg )<br />
   {<br />
      if ( next != null )<br />
      {<br />
         return next.Process( msg );<br />
      }<br />
      else 
<br />
      {<br />
         return false;<br />
      }<br />
   }<br /><br />
   public virtual bool Preprocess( Message msg )<br />
   {<br />
       return false;<br />
   }<br /><br />
   public abstract bool Prepare( bool vote, Message msg );<br /><br />
   public virtual void Commit( Message msg )<br />
   {<br />
   }<br /><br />
   public virtual void Abort( Message msg )<br />
   {<br />
   }<br />
}</span>
                  </p>
                  <p>
 
</p>
                </td>
              </tr>
            </tbody>
          </table>
          <p>
 
</p>
          <p>
 
</p>
          <p>
When a message flows into the pipeline, all a transactional message handler does when
it gets called in <b><i>ProcessMessage()</i></b> is to enlist its worker and return.
If the handler is not transactional, it must never fail (such things exist), can ignore
the whole work set story and simply forward the message to the <b><i>Next</i></b> handler.
So, in fact, a transactional message handler will never forward the message in the
(non-transactional) <b><i>ProcessMessage()</i></b> method.
</p>
          <p>
One problem that the dependencies between message handlers create is that it may be
impossible to forward a message to the next message handler in the chain before the
message is processed; at least you can’t make a <b><i>Prepare==true</i></b> promise
for the transaction outcome until you’ve done most work on the message and have
verified that all resultant work will very likely succeed. Messages may even be transformed
into new messages or split into multiple messages inside the pipeline, so that you
can’t do anything meaningful until you are at least preparing.
</p>
          <p>
The resulting contradiction is that a transaction participant cannot perform all work
resulting from on a message before it is asked to commit work, but that message handlers
following in the sequence may not have received the resulting message until then and
may not even be enlisted into the transaction.
</p>
          <p>
To resolve this problem, the FABRIQ pipeline’s transaction management is governed
by some special transaction handling rules that are more liberal than those of traditional
transaction coordinators.
</p>
          <p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>During
the first (prepare) phase of the 2-phase commit protocol, workers may still enlist
into the transaction. This allows a message handler to forward messages to a not-yet-enlisted
message handler during the prepare phase. The worker(s) that is/are enlisted by a
subsequent handler because the currently preparing message handler is forwarding one
(or multiple) messages to it, is/are appended to the list of workers in the work set
and asked to prepare their work once the current message handler is done preparing.
We call this method a <b>“rolling enlistment”</b> during prepare.
</p>
          <p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>Inside
the pipeline, messages are considered to be transient data. Therefore, they may be
manipulated and passed on during the Prepare phase, independent of the overall transaction
outcome. The tail of the transaction controller pipeline (which is the outermost pipeline
object) always enlists a worker into the transaction that will <b>only forward messages
to outside parties on <i>Commit()</i></b>and therefore takes care of hiding the transaction
work to guarantee isolation.
</p>
          <p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>Changes
to any resources external to the message (so, anything that is not contained in message
properties or message headers) <b>must</b> be guarded by the transaction workers.
This means that all usual rules about guarding intermediate transaction state and
transaction resources apply: The ability to make changes must be verified by tentative
actions during <i>Prepare()</i> and changes may only be finally performed in <i>Commit()</i>.
In case the external resources do not permit tentative actions, the <i>Abort()</i> method
must take the necessary steps to undo actions performed during <i>Prepare()</i>.
</p>
          <p>
Whenever new messages get created during processing, the message properties (which
hold the reference to the work set and, hence, to the current transaction) may be
pro<img height="451" hspace="12" src="/clemensv/content/binary/image006.png" width="541" align="right" />pagated
into the newly created message, which causes the processing of these messages to be
enlisted in the transaction, or a new or no <b>work set</b> can be created so that
further processing of these messages is separate from the ongoing transaction. That’s
what we do for failure messages. 
</p>
          <p>
During prepare, participants can log failure information to a message property called
“@FaultInfo” that contains a collection of FaultInfo objects. If message
processing fails, this information is logged and is, if possible, relayed to the message
sender’s WS Addressing wsa:FaultTo, wsa:ReplyTo or wsa:From destination (in
that order of preference) in a SOAP fault message. 
</p>
          <p>
For integration with “real” transactions, the entire work set may act
as a DTC resource manager. If that’s so, the 2PC management is done by DTC and
the work set acts as an aggregating proxy for the workers toward DTC. It collects
its vote from its own enlistments and forwards the Commit/Abort to its enlistments.
</p>
        </div>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=45606a61-10a0-4790-8938-be3c22787a35" />
      </body>
      <title>Lightweight Transactions in the FABRIQ Pipeline</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,45606a61-10a0-4790-8938-be3c22787a35.aspx</guid>
      <link>http://vasters.com/clemensv/2003/12/18/Lightweight+Transactions+In+The+FABRIQ+Pipeline.aspx</link>
      <pubDate>Thu, 18 Dec 2003 11:31:51 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
&lt;p&gt;
&lt;img height=451 hspace=12 src="/clemensv/content/binary/image005.png" width=541 align=right&gt;Slowly,
slowly I am seeing some light at the end of the tunnel designing the &lt;a href="/clemensv/PermaLink.aspx?guid=b1d34986-f53b-49c1-a56b-81c5fc042f32"&gt;FABRIQ&lt;/a&gt;.
It&amp;#8217;s a very challenging project and although I am having a lot of fun, it&amp;#8217;s
really much harder work than I initially thought.
&lt;/p&gt;
&lt;p&gt;
Today I&amp;#8217;d like to share some details with you on how I am employing the &lt;a href="/clemensv/PermaLink.aspx?guid=b598b91f-bb97-4aad-9404-bceb3aff08c9"&gt;lightweight
transaction coordinator&lt;/a&gt; &amp;#8220;WorkSet&amp;#8221; that &lt;a href="http://www.stevesw.com/blog/"&gt;Steve
Swartz&lt;/a&gt; and I wrote during this year&amp;#8217;s Scalable Applications tour inside
the FABRIQ.
&lt;/p&gt;
&lt;p&gt;
The obvious problem with one-way pipeline processing (and a problem with the composition
of independent cross-cutting concerns in general) is that failure management is pretty
difficult. Once one of the pipeline components fails, other components may already
have done work that might not be valid if the processing fails further down through
the pipeline. The simplest example of that is, of course, logging. If you log a message
as the first stage of a pipeline and a subsequent stage fails, do you want the log
entry to remain where it is? The problem is: it depends. So although you might need
to see the message before it is being processed by stages further down the pipeline,
you can only find out whether it is flagged as success or failure once processing
is complete or you may want to discard the log entry altogether on failure.
&lt;/p&gt;
&lt;p&gt;
Before I go into details, I&amp;#8217;ll clarify some of the terminology I am using:
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;A &lt;b&gt;message
handler&lt;/b&gt; is an object that typically implements a &lt;b&gt;ProcessMessage()&lt;/b&gt; method
and a property &lt;b&gt;Next&lt;/b&gt; pointing to the handler that immediately follows it in
a chain of handlers.
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;A &lt;b&gt;pipeline&lt;/b&gt; hosts
a chain of message handlers and has a &amp;#8220;head&amp;#8221; and a &amp;#8220;tail&amp;#8221;
message handler which link the pipeline with that chain of handlers. The pipeline
itself is a message handler itself, so that pipelines can be nested inside pipelines.
The &lt;b&gt;&lt;i&gt;FabriqPipeline&lt;/i&gt;&lt;/b&gt; is a concrete implementation of such a pipeline that
has, amongst other things, support for the mechanism described here.
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;A &lt;b&gt;message&lt;/b&gt; is
an object representing a SOAP message and has a collection of headers, a body (as
an XmlReader) and a transient collection of message properties that are only valid
as long as the message is in memory.
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;A &lt;b&gt;work
set&lt;/b&gt; is a lightweight, in-memory 2PC transaction that provides really only the
&amp;#8220;atomicity&amp;#8221; and &amp;#8220;consistency&amp;#8221; properties out of the well-known
&amp;#8220;ACID&amp;#8221; transaction property set. &amp;#8220;Durability&amp;#8221; is not a goal
here and &amp;#8220;isolation&amp;#8221; sort of guaranteed, because messages are not shared
resources. If external resources are touched, isolation needs to be guaranteed by
the enlisted workers. A &lt;b&gt;worker&lt;/b&gt; is a lightweight resource manager that can enlist
into a work set and provides Prepare/Commit/Abort entry points. 
&lt;/p&gt;
&lt;p&gt;
Whenever a new message arrives at a &lt;b&gt;&lt;i&gt;FabriqPipeline&lt;/i&gt;&lt;/b&gt;, a new work set is
created that governs the fault management for processing the respective message. The
work set is associated with the message by creating a &lt;b&gt;&lt;i&gt;&amp;#8220;@WorkSet&amp;#8221;&lt;/i&gt;&lt;/b&gt; property
on the message that references the WorkSet object. The pipeline itself maintains no
immediate reference to the work set &amp;#8211; it is message-bound.
&lt;/p&gt;
&lt;div align=right&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 6.75pt; BORDER-LEFT: medium none; MARGIN-RIGHT: 6.75pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 align=right border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign=top&gt;
&lt;p align=left&gt;
&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; FabriqWorker
: IWorker&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; Message msg;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; FabriqMessageHandler handler;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; FabriqWorker(Message msg,
FabriqMessageHandler handler)&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; msg = msg;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; handler = handler;&lt;br&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IWorker.Prepare(&lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; vote)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; handler.Prepare(vote,
msg );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; IWorker.Abort()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; handler.Abort( msg );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; IWorker.Commit()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; handler.Commit( msg );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;
The &lt;b&gt;&lt;i&gt;FabriqPipeline&lt;/i&gt;&lt;/b&gt; does not enlist any workers into the work set directly.
Instead, message handlers enlist their workers into the work set as the message flows
through the pipeline. A &amp;#8220;worker&amp;#8221; is an implementation of the &lt;i&gt;IWorker &lt;/i&gt;interface
that can be enlisted into a work set as a participant. Because the pipeline instance
along with all message handler instances shall be reusable and shall be capable of
processing several messages concurrently, the worker is not implemented on the handler
itself. Instead, workers are implemented as a separate helper class (FabriqWorker).
Instances of these worker classes are enlisted into the message&amp;#8217;s work set.
The worker instance gets a reference to the message it deals with and to the handler
which enlisted it into the work set; once the worker is called during the 2 phase
commit protocol phases, it calls the message handler&amp;#8217;s implementation of Prepare/Abort/Commit. 
&lt;/p&gt;
&lt;p&gt;
This way, we can have one &amp;#8220;all in one place&amp;#8221; implementation of all message-handling
on the message handler, but are keeping the transaction dependent state in a very
lightweight object; therefore we can share the entire (likely complex) pipeline and
handlers for many concurrent transactions, because none of the pipeline is made dependent
on the message or transaction state. 
&lt;/p&gt;
&lt;table class=MsoTableGrid style="MARGIN-LEFT: 6.75pt; MARGIN-RIGHT: 6.75pt; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 align=left border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm" valign=top&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;public abstract class FabriqMessageHandler
: 
&lt;br&gt;
&amp;nbsp;&amp;nbsp; IMessageHandler&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp; IMessageHandler next = null;&lt;br&gt;
&amp;nbsp;&amp;nbsp; public FabriqMessageHandler()&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp; public virtual IMessageHandler Next &amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp; { get { return next; } set { next = value; }}&lt;br&gt;
&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp; bool IMessageHandler.Process(Message msg)&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;bool result = this.Preprocess(msg);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;WorkSet workSet = msg.Properties["@WorkSet"] as WorkSet;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;if ( workSet != null )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workSet.Register(new FabriqWorker(
msg, this ) );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;return result;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; protected bool Forward( Message msg )&lt;br&gt;
&amp;nbsp; &amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;if ( next != null )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;return next.Process( msg );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;else 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; public virtual bool Preprocess( Message msg )&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; public abstract bool Prepare( bool vote, Message msg );&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; public virtual void Commit( Message msg )&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; public virtual void Abort( Message msg )&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
When a message flows into the pipeline, all a transactional message handler does when
it gets called in &lt;b&gt;&lt;i&gt;ProcessMessage()&lt;/i&gt;&lt;/b&gt; is to enlist its worker and return.
If the handler is not transactional, it must never fail (such things exist), can ignore
the whole work set story and simply forward the message to the &lt;b&gt;&lt;i&gt;Next&lt;/i&gt;&lt;/b&gt; handler.
So, in fact, a transactional message handler will never forward the message in the
(non-transactional) &lt;b&gt;&lt;i&gt;ProcessMessage()&lt;/i&gt;&lt;/b&gt; method.
&lt;/p&gt;
&lt;p&gt;
One problem that the dependencies between message handlers create is that it may be
impossible to forward a message to the next message handler in the chain before the
message is processed; at least you can&amp;#8217;t make a &lt;b&gt;&lt;i&gt;Prepare==true&lt;/i&gt;&lt;/b&gt; promise
for the transaction outcome until you&amp;#8217;ve done most work on the message and have
verified that all resultant work will very likely succeed. Messages may even be transformed
into new messages or split into multiple messages inside the pipeline, so that you
can&amp;#8217;t do anything meaningful until you are at least preparing.
&lt;/p&gt;
&lt;p&gt;
The resulting contradiction is that a transaction participant cannot perform all work
resulting from on a message before it is asked to commit work, but that message handlers
following in the sequence may not have received the resulting message until then and
may not even be enlisted into the transaction.
&lt;/p&gt;
&lt;p&gt;
To resolve this problem, the FABRIQ pipeline&amp;#8217;s transaction management is governed
by some special transaction handling rules that are more liberal than those of traditional
transaction coordinators.
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;During
the first (prepare) phase of the 2-phase commit protocol, workers may still enlist
into the transaction. This allows a message handler to forward messages to a not-yet-enlisted
message handler during the prepare phase. The worker(s) that is/are enlisted by a
subsequent handler because the currently preparing message handler is forwarding one
(or multiple) messages to it, is/are appended to the list of workers in the work set
and asked to prepare their work once the current message handler is done preparing.
We call this method a &lt;b&gt;&amp;#8220;rolling enlistment&amp;#8221;&lt;/b&gt; during prepare.
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Inside
the pipeline, messages are considered to be transient data. Therefore, they may be
manipulated and passed on during the Prepare phase, independent of the overall transaction
outcome. The tail of the transaction controller pipeline (which is the outermost pipeline
object) always enlists a worker into the transaction that will &lt;b&gt;only forward messages
to outside parties on &lt;i&gt;Commit()&lt;/i&gt; &lt;/b&gt;and therefore takes care of hiding the transaction
work to guarantee isolation.
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;
&lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Changes
to any resources external to the message (so, anything that is not contained in message
properties or message headers) &lt;b&gt;must&lt;/b&gt; be guarded by the transaction workers.
This means that all usual rules about guarding intermediate transaction state and
transaction resources apply: The ability to make changes must be verified by tentative
actions during &lt;i&gt;Prepare()&lt;/i&gt; and changes may only be finally performed in &lt;i&gt;Commit()&lt;/i&gt;.
In case the external resources do not permit tentative actions, the &lt;i&gt;Abort()&lt;/i&gt; method
must take the necessary steps to undo actions performed during &lt;i&gt;Prepare()&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
Whenever new messages get created during processing, the message properties (which
hold the reference to the work set and, hence, to the current transaction) may be
pro&lt;img height=451 hspace=12 src="/clemensv/content/binary/image006.png" width=541 align=right&gt;pagated
into the newly created message, which causes the processing of these messages to be
enlisted in the transaction, or a new or no &lt;b&gt;work set&lt;/b&gt; can be created so that
further processing of these messages is separate from the ongoing transaction. That&amp;#8217;s
what we do for failure messages. 
&lt;/p&gt;
&lt;p&gt;
During prepare, participants can log failure information to a message property called
&amp;#8220;@FaultInfo&amp;#8221; that contains a collection of FaultInfo objects. If message
processing fails, this information is logged and is, if possible, relayed to the message
sender&amp;#8217;s WS Addressing wsa:FaultTo, wsa:ReplyTo or wsa:From destination (in
that order of preference) in a SOAP fault message. 
&lt;/p&gt;
&lt;p&gt;
For integration with &amp;#8220;real&amp;#8221; transactions, the entire work set may act
as a DTC resource manager. If that&amp;#8217;s so, the 2PC management is done by DTC and
the work set acts as an aggregating proxy for the workers toward DTC. It collects
its vote from its own enlistments and forwards the Commit/Abort to its enlistments.
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=45606a61-10a0-4790-8938-be3c22787a35" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,45606a61-10a0-4790-8938-be3c22787a35.aspx</comments>
      <category>Architecture</category>
      <category>Technology/FABRIQ</category>
    </item>
  </channel>
</rss>