<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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/" version="2.0">
  <channel>
    <title>Scott's Breeze Blog - RFID, BizTalk </title>
    <link>http://blogs.breezetraining.com.au/scotts/</link>
    <description>...and everything in between</description>
    <language>en-us</language>
    <copyright>Breeze Training</copyright>
    <lastBuildDate>Wed, 12 Nov 2008 00:47:01 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.8.5223.2</generator>
    <managingEditor>scotts@breezetraining.com.au</managingEditor>
    <webMaster>scotts@breezetraining.com.au</webMaster>
    <item>
      <trackback:ping>http://blogs.breezetraining.com.au/scotts/Trackback.aspx?guid=d8f1597a-5701-49ad-9ef9-1d4cb2754d42</trackback:ping>
      <pingback:server>http://blogs.breezetraining.com.au/scotts/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,d8f1597a-5701-49ad-9ef9-1d4cb2754d42.aspx</pingback:target>
      <dc:creator>scotts@breezetraining.com.au (Scott Scovell)</dc:creator>
      <wfw:comment>http://blogs.breezetraining.com.au/scotts/CommentView,guid,d8f1597a-5701-49ad-9ef9-1d4cb2754d42.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.breezetraining.com.au/scotts/SyndicationService.asmx/GetEntryCommentsRss?guid=d8f1597a-5701-49ad-9ef9-1d4cb2754d42</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Putting together BizTalk integration solutions can be complex and tricky at times.
      Debugging them is an art in itself. While onsite recently, I found myself (on more
      than one occasion) having *words* with BizTalk.
   </p>
        <p>
      One example that tested our relationship (BizTalk and I) was an orchestration decision
      shape that appeared to be misbehaving. I had three branches in the decision shape,
      each branch testing the existence of a node in the message being processed using the
      xpath() function. For Example:
   </p>
        <blockquote>
          <p>
            <em>xpath(msgRequest, "string(count(/*[local-name()='root']/*[local-name()='parent']/*[local-name()='child'
      and code='some value']))") == "0"</em>
          </p>
        </blockquote>
        <blockquote>
          <p>
            <em>
              <strong>Tip</strong>: use </em>
            <a href="http://www.bizbert.com/bizbert/2007/11/25/DanSharp+XmlViewer.aspx" target="_blank">
              <em>Dan
      Sharp's Xml Viewer</em>
            </a>
            <em> to retrieve the correct xpath to use in these statements.
      BizTalk schemas will give you them to, but Dan's tool has some nice features thrown
      into the bargain <img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif" /></em>
          </p>
        </blockquote>
        <p>
      One branch rule tested for a zero node count, another for exactly one, and the Else
      rule branch to handle multiple occurrences of the node. During testing and debugging
      we found the else branch was always being used despite the messages satisfying one
      of the other rule conditions (over different tests). Repeated checks, breakpoints,
      and logging soaked up 20 minutes or more and had me demanding satisfaction by challenging
      BizTalk to a duel with pistols at dawn. <img alt="smile_angry" src="http://spaces.live.com/rte/emoticons/smile_angry.gif" /></p>
        <p>
      It was then, a bright beam of light breached the false ceiling above me and shone
      down in all is splendour. No, this was not a helping hand from god, but rather from
      a colleague working with me. Picking up on my frustrations, he calmly stood, moved
      over to me, and placing a soothing hand on my shoulder, utters two words that have
      changed my life...<strong>Kane Theory</strong>. I eagerly implemented a quick change
      (as guided by Kane Theory teachings) and my problem was solved! More cases arose during
      the project and each of them resolved with ease using this mystic and elegant theory.
   </p>
        <p>
      Ok. That's a bit dramatic, but I am considering a professional self-help book exploring
      the practical uses of Kane Theory and wanted to get some practice in.
   </p>
        <p>
          <u>So what is <strong>Kane Theory</strong>?</u>
        </p>
        <p>
      Although only a novice in its teachings, I am fortunate to receive guidance from the
      enlighten one himself. Kane Adams (his real name used here to <strike>protect</strike> reveal
      his identity)  explains it in terms of Yin &amp; Yang, Karma, and the Force.
      Reflecting on this I can best describe it as a derivative of keep it simple stupid
      (KISS).
   </p>
        <p>
      In the example above, we declared an orchestration variable (System.String) to store
      the result of the xpath function in an Expression shape before entering the Decision
      shape. We then used the variable in the rule expression for the comparison. Eg:
   </p>
        <blockquote>
          <p>
            <em>strNodeCount == "0"</em>
          </p>
        </blockquote>
        <p>
      By powers understood only to the enlighten one, this worked a treat and we could all
      break for a quick cup of the worst coffee ever brewed. (Sceptics might argue that
      it has to do with the way the XLANG engine performs explicit type conversions during
      the comparison operation...but they would say that wouldn't they!)
   </p>
        <p>
      As for the enlighten one himself:
   </p>
        <p>
          <strong>Some say</strong> he is a direct descent of John Adams, author of the mystical
      theory of political architecture and founding father of the new Empire (there's the
      link to the Force we needed).<br /><strong>Some say</strong>, he meditates to the haunting chants of mid-level public
      servants.<br />
      We know him as <strong>The Stig</strong>!
   </p>
        <p>
          <a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/KaneTheory_A316/thestig.jpg">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="109" alt="Author of the enlighted" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/KaneTheory_A316/thestig_thumb.jpg" width="109" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=d8f1597a-5701-49ad-9ef9-1d4cb2754d42" />
      </body>
      <title>Kane Theory</title>
      <guid>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,d8f1597a-5701-49ad-9ef9-1d4cb2754d42.aspx</guid>
      <link>http://blogs.breezetraining.com.au/scotts/2008/11/12/KaneTheory.aspx</link>
      <pubDate>Wed, 12 Nov 2008 00:47:01 GMT</pubDate>
      <description>&lt;p&gt;
   Putting together BizTalk integration solutions can be complex and tricky at times.
   Debugging them is an art in itself. While onsite recently, I found myself (on more
   than one occasion) having *words* with BizTalk.
&lt;/p&gt;
&lt;p&gt;
   One example that tested our relationship (BizTalk and I) was an orchestration decision
   shape that appeared to be misbehaving. I had three branches in the decision shape,
   each branch testing the existence of a node in the message being processed using the
   xpath() function. For Example:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
   &lt;em&gt;xpath(msgRequest, "string(count(/*[local-name()='root']/*[local-name()='parent']/*[local-name()='child'
   and code='some value']))") == "0"&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
   &lt;em&gt;&lt;strong&gt;Tip&lt;/strong&gt;: use &lt;/em&gt;&lt;a href="http://www.bizbert.com/bizbert/2007/11/25/DanSharp+XmlViewer.aspx" target="_blank"&gt;&lt;em&gt;Dan
   Sharp's Xml Viewer&lt;/em&gt;&lt;/a&gt;&lt;em&gt; to retrieve the correct xpath to use in these statements.
   BizTalk schemas will give you them to, but Dan's tool has some nice features thrown
   into the bargain &lt;img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif"&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   One branch rule tested for a zero node count, another for exactly one, and the Else
   rule branch to handle multiple occurrences of the node. During testing and debugging
   we found the else branch was always being used despite the messages satisfying one
   of the other rule conditions (over different tests). Repeated checks, breakpoints,
   and logging soaked up 20 minutes or more and had me demanding satisfaction by challenging
   BizTalk to a duel with pistols at dawn. &lt;img alt="smile_angry" src="http://spaces.live.com/rte/emoticons/smile_angry.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
   It was then, a bright beam of light breached the false ceiling above me and shone
   down in all is splendour. No, this was not a helping hand from god, but rather from
   a colleague working with me. Picking up on my frustrations, he calmly stood, moved
   over to me, and placing a soothing hand on my shoulder, utters two words that have
   changed my life...&lt;strong&gt;Kane Theory&lt;/strong&gt;. I eagerly implemented a quick change
   (as guided by Kane Theory teachings) and my problem was solved! More cases arose during
   the project and each of them resolved with ease using this mystic and elegant theory.
&lt;/p&gt;
&lt;p&gt;
   Ok. That's a bit dramatic, but I am considering a professional self-help book exploring
   the practical uses of Kane Theory and wanted to get some practice in.
&lt;/p&gt;
&lt;p&gt;
   &lt;u&gt;So what is &lt;strong&gt;Kane Theory&lt;/strong&gt;?&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
   Although only a novice in its teachings, I am fortunate to receive guidance from the
   enlighten one himself. Kane Adams (his real name used here to &lt;strike&gt;protect&lt;/strike&gt; reveal
   his identity)&amp;nbsp; explains it in terms of Yin &amp;amp; Yang, Karma, and the Force.
   Reflecting on this I can best describe it as a derivative of keep it simple stupid
   (KISS).
&lt;/p&gt;
&lt;p&gt;
   In the example above, we declared an orchestration variable (System.String) to store
   the result of the xpath function in an Expression shape before entering the Decision
   shape. We then used the variable in the rule expression for the comparison. Eg:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
   &lt;em&gt;strNodeCount == "0"&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   By powers understood only to the enlighten one, this worked a treat and we could all
   break for a quick cup of the worst coffee ever brewed. (Sceptics might argue that
   it has to do with the way the XLANG engine performs explicit type conversions during
   the comparison operation...but they would say that wouldn't they!)
&lt;/p&gt;
&lt;p&gt;
   As for the enlighten one himself:
&lt;/p&gt;
&lt;p&gt;
   &lt;strong&gt;Some say&lt;/strong&gt; he is a direct descent of John Adams, author of the mystical
   theory of political architecture and founding father of the new Empire (there's the
   link to the Force we needed).&lt;br&gt;
   &lt;strong&gt;Some say&lt;/strong&gt;, he meditates to the haunting chants of mid-level public
   servants.&lt;br&gt;
   We know him as &lt;strong&gt;The Stig&lt;/strong&gt;!
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/KaneTheory_A316/thestig.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="109" alt="Author of the enlighted" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/KaneTheory_A316/thestig_thumb.jpg" width="109" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=d8f1597a-5701-49ad-9ef9-1d4cb2754d42" /&gt;</description>
      <comments>http://blogs.breezetraining.com.au/scotts/CommentView,guid,d8f1597a-5701-49ad-9ef9-1d4cb2754d42.aspx</comments>
      <category>BizTalk General;Humour</category>
    </item>
    <item>
      <trackback:ping>http://blogs.breezetraining.com.au/scotts/Trackback.aspx?guid=1d53295f-f342-4e66-a33e-162ddb23aa51</trackback:ping>
      <pingback:server>http://blogs.breezetraining.com.au/scotts/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,1d53295f-f342-4e66-a33e-162ddb23aa51.aspx</pingback:target>
      <dc:creator>scotts@breezetraining.com.au (Scott Scovell)</dc:creator>
      <wfw:comment>http://blogs.breezetraining.com.au/scotts/CommentView,guid,1d53295f-f342-4e66-a33e-162ddb23aa51.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.breezetraining.com.au/scotts/SyndicationService.asmx/GetEntryCommentsRss?guid=1d53295f-f342-4e66-a33e-162ddb23aa51</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Had a strange error appear last week when using the WCF LOB Adapter for Oracle and
      spent an hour of my life I will never get back. When attempting to connect to an Oracle
      DB we kept getting the following error:
   </p>
        <blockquote>
          <p>
            <em>ORA-12154: TNS:could not resolve the connect identifier specified</em>
          </p>
        </blockquote>
        <p>
      This occurred when we:
   </p>
        <ol>
          <li>
         Tried to generate metadata in our BizTalk project using the Add Generated Items wizard.</li>
          <li>
         Tried to generate metadata in a Class Library project using the Add Adapter Service
         Reference wizard.</li>
          <li>
         Connect to an Oracle DB using the Oracle Explorer.</li>
        </ol>
        <p>
      We had all the latest versions/patches of the Oracle client and WCF LOB Adapter (Oh,
      yeah. Thanks Oracle for packaging patches in easy to consume 1GB downloads...love
      your work!!)
   </p>
        <p>
      We could however, connect to Oracle using the Oracle SQL Developer Tool. So we knew
      something was happening (or not happening inside of VS).
   </p>
        <p>
      It turns out the issue relates to the install directory of VS2005. In our case it
      was 
   </p>
        <blockquote>
          <p>
            <em>C:\Program Files (x86)\...</em>
          </p>
        </blockquote>
        <p>
      This triggers an *undocumented feature* in the Oracle Data Provider for .Net (ODP.NET)
      so that applications with a parenthesis in their (exe) path fail to connect to the
      server.
   </p>
        <p>
      The solution was to uninstall VS2005 and reinstall using a different install directory
      *one that did not have (x86) in it*.
   </p>
        <p>
          <img alt="smile_confused" src="http://spaces.live.com/rte/emoticons/smile_confused.gif" /> ...
      I know, I did not want to believe it either, but if you want to save yourself time
      and hair try this solution first.
   </p>
        <img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=1d53295f-f342-4e66-a33e-162ddb23aa51" />
      </body>
      <title>WCF LOB Adapter for Oracle on 64-bit OS</title>
      <guid>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,1d53295f-f342-4e66-a33e-162ddb23aa51.aspx</guid>
      <link>http://blogs.breezetraining.com.au/scotts/2008/09/22/WCFLOBAdapterForOracleOn64bitOS.aspx</link>
      <pubDate>Mon, 22 Sep 2008 13:31:09 GMT</pubDate>
      <description>&lt;p&gt;
   Had a strange error appear last week when using the WCF LOB Adapter for Oracle and
   spent an hour of my life I will never get back. When attempting to connect to an Oracle
   DB we kept getting the following error:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
   &lt;em&gt;ORA-12154: TNS:could not resolve the connect identifier specified&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   This occurred when we:
&lt;/p&gt;
&lt;ol&gt;
   &lt;li&gt;
      Tried to generate metadata in our BizTalk project using the Add Generated Items wizard.&lt;/li&gt;
   &lt;li&gt;
      Tried to generate metadata in a Class Library project using the Add Adapter Service
      Reference wizard.&lt;/li&gt;
   &lt;li&gt;
      Connect to an Oracle DB using the Oracle Explorer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
   We had all the latest versions/patches of the Oracle client and WCF LOB Adapter (Oh,
   yeah. Thanks Oracle for packaging patches in easy to consume 1GB downloads...love
   your work!!)
&lt;/p&gt;
&lt;p&gt;
   We could however, connect to Oracle using the Oracle SQL Developer Tool. So we knew
   something was happening (or not happening inside of VS).
&lt;/p&gt;
&lt;p&gt;
   It turns out the issue relates to the install directory of VS2005. In our case it
   was 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
   &lt;em&gt;C:\Program Files (x86)\...&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   This triggers an *undocumented feature* in the Oracle Data Provider for .Net (ODP.NET)
   so that applications with a parenthesis in their (exe) path fail to connect to the
   server.
&lt;/p&gt;
&lt;p&gt;
   The solution was to uninstall VS2005 and reinstall using a different install directory
   *one that did not have (x86) in it*.
&lt;/p&gt;
&lt;p&gt;
   &lt;img alt="smile_confused" src="http://spaces.live.com/rte/emoticons/smile_confused.gif"&gt; ...
   I know, I did not want to believe it either, but if you want to save yourself time
   and hair try this solution first.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=1d53295f-f342-4e66-a33e-162ddb23aa51" /&gt;</description>
      <comments>http://blogs.breezetraining.com.au/scotts/CommentView,guid,1d53295f-f342-4e66-a33e-162ddb23aa51.aspx</comments>
      <category>BizTalk General;WCF LOB Adapters</category>
    </item>
    <item>
      <trackback:ping>http://blogs.breezetraining.com.au/scotts/Trackback.aspx?guid=dc47ccf7-4577-4f56-ace3-ad02ae634a1f</trackback:ping>
      <pingback:server>http://blogs.breezetraining.com.au/scotts/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,dc47ccf7-4577-4f56-ace3-ad02ae634a1f.aspx</pingback:target>
      <dc:creator>scotts@breezetraining.com.au (Scott Scovell)</dc:creator>
      <wfw:comment>http://blogs.breezetraining.com.au/scotts/CommentView,guid,dc47ccf7-4577-4f56-ace3-ad02ae634a1f.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.breezetraining.com.au/scotts/SyndicationService.asmx/GetEntryCommentsRss?guid=dc47ccf7-4577-4f56-ace3-ad02ae634a1f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
      When developing applications, at some point in the dev cycle we want to know how the
      system will perform under load. In BizTalk RFID land it is no different. In fact,
      in BizTalk RFID implementations we often deal with devices capable of raising hundreds
      of reads every second. So how do we go about testing these?
   </p>
        <p>
      I'm a big fan of using physical devices during development rather than device emulation,
      but when it comes to load testing we need to present hundreds of tags to the reader
      and no matter what I try I just can't get the work experience kid to act fast enough!
      But instead of using a emulated device, what if we could raise tag read events programmatically
      and have our RFID Process consume them? Surely then we could get enough events to
      constitute a decent load test.
   </p>
        <p>
      So how do we go about pushing tag read events through our RFID process in code?
   </p>
        <p>
      We do this using the BizTalk RFID management API's, namely the <a href="http://msdn.microsoft.com/en-us/library/microsoft.sensorservices.rfid.management.processmanagerproxy.aspx" target="_blank">ProcessManagerProxy</a>.
      In just a few lines of code we can connect to the RFID process we want to test and
      "submit" a tag read event to the event pipeline. To get up and running with this you
      will need to add the following references to your project: (all can be found in %RFIDINSTALLDIR%\bin)
   </p>
        <ul>
          <li>
         Microsoft.Rfid.Design.dll</li>
          <li>
         Microsoft.Rfid.ManagementWebServiceProxies.dll</li>
          <li>
         Microsoft.Rfid.SpiSdk.dll</li>
          <li>
         Microsoft.Rfid.Util.dll</li>
        </ul>
        <p>
      Then, in three lines of code you can create your tag read event, connect to your process,
      and submit your event for processing;
   </p>
        <blockquote>
          <pre class="csharpcode">
            <span class="rem">// Create the tag read event
   to submit</span>
            <font color="#008080">TagReadEvent</font> tag = <span class="kwrd">new</span><font color="#008080">TagReadEvent</font>( <font color="#008080">HexUtilities</font>.HexDecode(strTagID), <font color="#008080">TagType</font>.EpcClass1Gen2, <font color="#008080">HexUtilities</font>.HexDecode(strTagData),
   strTagSource, <font color="#008080">DateTime</font>.Now, <span class="kwrd">null</span>, <span class="kwrd">null</span> ); <span class="rem">//
   Connect to the local RFID server</span><font color="#008080">ProcessManagerProxy</font> proxy
   = <span class="kwrd">new</span><font color="#008080">ProcessManagerProxy</font>(<span class="str">"localhost"</span>); <span class="rem">//
   Submit event to the event pipeline</span> proxy.AddEventToProcessPipeline( strRfidProcessName,
   tag, strLogicalDeviceName); </pre>
          <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        </blockquote>
        <p>
      And that's it.
   </p>
        <p>
      For my needs, I created a quick Win forms app that retrieved a list of registered
      tag id's from a SQL DB and submitted them to my RFID process at configured intervals:
   </p>
        <p>
          <a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/TestingBizTalkRFIDProcesses_FC9D/rfidprocesstester.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="174" alt="rfid process tester" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/TestingBizTalkRFIDProcesses_FC9D/rfidprocesstester_thumb.png" width="632" border="0" />
          </a>
        </p>
        <p>
      I added a few variables to adjust the interval between tag read events, the number
      of events to submit each interval, and the number of duplicates to send for each tag
      id. These variables (used when looping through the set of tag id's) combine to give
      me a good approximation to a real, high volume environment.
   </p>
        <p>
      Firing up good old <em>perfmon</em> and adding the <em>RFID:Process</em> counters,
      I ran through a number of test configurations to make sure my RFID process performs
      well under high load. (Note: the RFID process you are monitoring must be running before
      you can add the counters). Of most interest is the <em>Tags In Queue</em> counter.
      This tells me when my process is not performing well and tags are being queued up
      waiting to be processed (not good in real-time processing systems). We want this to
      be flat-lined most of the time.
   </p>
        <p>
          <a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/TestingBizTalkRFIDProcesses_FC9D/perfmon.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="332" alt="perfmon" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/TestingBizTalkRFIDProcesses_FC9D/perfmon_thumb.png" width="628" border="0" />
          </a>
        </p>
        <p>
      Another good idea is to use the SQL Sink EH component while testing. After running
      your tests you can simply and easily calculate event processing latency by executing
      the following T-SQL query against the <em>tagevents</em> table in the <em>RfidSink</em> DB.
   </p>
        <blockquote>
          <pre class="csharpcode">
            <span class="kwrd">SELECT</span>
            <span class="kwrd">
              <font color="#ff00ff">AVG</font>
            </span>(<font color="#ff00ff">DATEDIFF</font>(ms,
   sinktime, tagtime)) <span class="kwrd">FROM</span> tagevents;</pre>
          <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        </blockquote>
        <p>
      A while back, <a href="http://blogs.breezetraining.com.au/mickb/" target="_blank">Mick</a><a href="http://blogs.breezetraining.com.au/mickb/2008/05/21/BizTalkRFIDHowToClusteringForHighAvailability.aspx" target="_blank">posted</a> about
      a great article on MSDN around performance and capacity planning for BizTalk RFID.
      Some goodness in that article so check it out as well.
   </p>
        <img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=dc47ccf7-4577-4f56-ace3-ad02ae634a1f" />
      </body>
      <title>Testing BizTalk RFID Processes</title>
      <guid>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,dc47ccf7-4577-4f56-ace3-ad02ae634a1f.aspx</guid>
      <link>http://blogs.breezetraining.com.au/scotts/2008/07/17/TestingBizTalkRFIDProcesses.aspx</link>
      <pubDate>Thu, 17 Jul 2008 13:23:12 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   When developing applications, at some point in the dev cycle we want to know how the
   system will perform under load. In BizTalk RFID land it is no different. In fact,
   in BizTalk RFID implementations we often deal with devices capable of raising hundreds
   of reads every second. So how do we go about testing these?
&lt;/p&gt;
&lt;p&gt;
   I'm a big fan of using physical devices during development rather than device emulation,
   but when it comes to load testing we need to present hundreds of tags to the reader
   and no matter what I try I just can't get the work experience kid to act fast enough!
   But instead of using a emulated device, what if we could raise tag read events programmatically
   and have our RFID Process consume them? Surely then we could get enough events to
   constitute a decent load test.
&lt;/p&gt;
&lt;p&gt;
   So how do we go about pushing tag read events through our RFID process in code?
&lt;/p&gt;
&lt;p&gt;
   We do this using the BizTalk RFID management API's, namely the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sensorservices.rfid.management.processmanagerproxy.aspx" target="_blank"&gt;ProcessManagerProxy&lt;/a&gt;.
   In just a few lines of code we can connect to the RFID process we want to test and
   "submit" a tag read event to the event pipeline. To get up and running with this you
   will need to add the following references to your project: (all can be found in %RFIDINSTALLDIR%\bin)
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Microsoft.Rfid.Design.dll&lt;/li&gt;
   &lt;li&gt;
      Microsoft.Rfid.ManagementWebServiceProxies.dll&lt;/li&gt;
   &lt;li&gt;
      Microsoft.Rfid.SpiSdk.dll&lt;/li&gt;
   &lt;li&gt;
      Microsoft.Rfid.Util.dll&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Then, in three lines of code you can create your tag read event, connect to your process,
   and submit your event for processing;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Create the tag read event
to submit&lt;/span&gt; &lt;font color="#008080"&gt;TagReadEvent&lt;/font&gt; tag = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;font color="#008080"&gt;TagReadEvent&lt;/font&gt;( &lt;font color="#008080"&gt;HexUtilities&lt;/font&gt;.HexDecode(strTagID), &lt;font color="#008080"&gt;TagType&lt;/font&gt;.EpcClass1Gen2, &lt;font color="#008080"&gt;HexUtilities&lt;/font&gt;.HexDecode(strTagData),
strTagSource, &lt;font color="#008080"&gt;DateTime&lt;/font&gt;.Now, &lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;span class="kwrd"&gt;null&lt;/span&gt; ); &lt;span class="rem"&gt;//
Connect to the local RFID server&lt;/span&gt; &lt;font color="#008080"&gt;ProcessManagerProxy&lt;/font&gt; proxy
= &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;font color="#008080"&gt;ProcessManagerProxy&lt;/font&gt;(&lt;span class="str"&gt;"localhost"&lt;/span&gt;); &lt;span class="rem"&gt;//
Submit event to the event pipeline&lt;/span&gt; proxy.AddEventToProcessPipeline( strRfidProcessName,
tag, strLogicalDeviceName); &lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   And that's it.
&lt;/p&gt;
&lt;p&gt;
   For my needs, I created a quick Win forms app that retrieved a list of registered
   tag id's from a SQL DB and submitted them to my RFID process at configured intervals:
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/TestingBizTalkRFIDProcesses_FC9D/rfidprocesstester.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="174" alt="rfid process tester" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/TestingBizTalkRFIDProcesses_FC9D/rfidprocesstester_thumb.png" width="632" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
   I added a few variables to adjust the interval between tag read events, the number
   of events to submit each interval, and the number of duplicates to send for each tag
   id. These variables (used when looping through the set of tag id's) combine to give
   me a good approximation to a real, high volume environment.
&lt;/p&gt;
&lt;p&gt;
   Firing up good old &lt;em&gt;perfmon&lt;/em&gt; and adding the &lt;em&gt;RFID:Process&lt;/em&gt; counters,
   I ran through a number of test configurations to make sure my RFID process performs
   well under high load. (Note: the RFID process you are monitoring must be running before
   you can add the counters). Of most interest is the &lt;em&gt;Tags In Queue&lt;/em&gt; counter.
   This tells me when my process is not performing well and tags are being queued up
   waiting to be processed (not good in real-time processing systems). We want this to
   be flat-lined most of the time.
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/TestingBizTalkRFIDProcesses_FC9D/perfmon.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="332" alt="perfmon" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/TestingBizTalkRFIDProcesses_FC9D/perfmon_thumb.png" width="628" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
   Another good idea is to use the SQL Sink EH component while testing. After running
   your tests you can simply and easily calculate event processing latency by executing
   the following T-SQL query against the &lt;em&gt;tagevents&lt;/em&gt; table in the &lt;em&gt;RfidSink&lt;/em&gt; DB.
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;font color="#ff00ff"&gt;AVG&lt;/font&gt;&lt;/span&gt;(&lt;font color="#ff00ff"&gt;DATEDIFF&lt;/font&gt;(ms,
sinktime, tagtime)) &lt;span class="kwrd"&gt;FROM&lt;/span&gt; tagevents;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   A while back, &lt;a href="http://blogs.breezetraining.com.au/mickb/" target="_blank"&gt;Mick&lt;/a&gt; &lt;a href="http://blogs.breezetraining.com.au/mickb/2008/05/21/BizTalkRFIDHowToClusteringForHighAvailability.aspx" target="_blank"&gt;posted&lt;/a&gt; about
   a great article on MSDN around performance and capacity planning for BizTalk RFID.
   Some goodness in that article so check it out as well.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=dc47ccf7-4577-4f56-ace3-ad02ae634a1f" /&gt;</description>
      <comments>http://blogs.breezetraining.com.au/scotts/CommentView,guid,dc47ccf7-4577-4f56-ace3-ad02ae634a1f.aspx</comments>
      <category>BizTalk RFID</category>
    </item>
    <item>
      <trackback:ping>http://blogs.breezetraining.com.au/scotts/Trackback.aspx?guid=6c1561dd-81b6-461b-aafc-67bad10ddde3</trackback:ping>
      <pingback:server>http://blogs.breezetraining.com.au/scotts/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,6c1561dd-81b6-461b-aafc-67bad10ddde3.aspx</pingback:target>
      <dc:creator>scotts@breezetraining.com.au (Scott Scovell)</dc:creator>
      <wfw:comment>http://blogs.breezetraining.com.au/scotts/CommentView,guid,6c1561dd-81b6-461b-aafc-67bad10ddde3.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.breezetraining.com.au/scotts/SyndicationService.asmx/GetEntryCommentsRss?guid=6c1561dd-81b6-461b-aafc-67bad10ddde3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Ever seen some of those videos of mobile phones frying popcorn? Mick <a href="http://blogs.breezetraining.com.au/mickb/2008/06/26/MobilePhoneseverNeedAQuickFryUp.aspx" target="_blank">posted</a> some
      a few days ago and my wife and I thought we could use a snack while we watched a movie
      last night.
   </p>
        <p>
      We tried to "cook" a small number of popcorn kernels using two Sony Eriksson K610i's,
      a connected Bluetooth headset, and an old Motorola E386 (similar setup to that in
      the videos from Mick). The K610's have a SAR rating of 1.01 (as reported on the <a href="http://www.sarshield.com/english/radiationchart-sonyericsson.htm" target="_blank">SAR
      Shield web site</a>)
   </p>
        <p>
      The result...we went hungry. And we did leave the calls open for a minute or two,
      stopped and started calls, even sent picture messages from one handset to the next.
      I don't think they emit nearly enough RF to pop the kernels. It takes the microwave
      (895W) a few minutes to do the job, we would have to have the phones (~0.7W) in talk/data
      mode for over a day to get close to that amount.
   </p>
        <p>
      20 minutes wasted. Luckily we have one of those mobile plans were we get free calls
      between our phones.
   </p>
        <p>
      That got me thinking....we need more power.
   </p>
        <p>
          <a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/TheGreatPhoneFryupSwindle_9337/DSC00525.jpg">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="DSC00525" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/TheGreatPhoneFryupSwindle_9337/DSC00525_thumb.jpg" width="244" border="0" />
          </a>
        </p>
        <p>
      So I hooked up three UHF long range RFID antennas and placed some rather nervous looking
      kernels in the middle. At 2W each, it still would of taken around 5 hours to get some
      popcorn. These puppies can read tags at 10m (even through walls as I discovered) but
      excite a popcorn kernel, they can not...we need more power.
   </p>
        <p>
      What I need is one of those "lasers"
   </p>
        <p>
       <a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/TheGreatPhoneFryupSwindle_9337/drevil.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="drevil" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/TheGreatPhoneFryupSwindle_9337/drevil_thumb.jpg" width="153" border="0" /></a></p>
        <h2>Who wants steak!
   </h2>
        <img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=6c1561dd-81b6-461b-aafc-67bad10ddde3" />
      </body>
      <title>The Great Phone Fry-up Swindle</title>
      <guid>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,6c1561dd-81b6-461b-aafc-67bad10ddde3.aspx</guid>
      <link>http://blogs.breezetraining.com.au/scotts/2008/06/30/TheGreatPhoneFryupSwindle.aspx</link>
      <pubDate>Mon, 30 Jun 2008 05:11:19 GMT</pubDate>
      <description>&lt;p&gt;
   Ever seen some of those videos of mobile phones frying popcorn? Mick &lt;a href="http://blogs.breezetraining.com.au/mickb/2008/06/26/MobilePhoneseverNeedAQuickFryUp.aspx" target="_blank"&gt;posted&lt;/a&gt; some
   a few days ago and my wife and I thought we could use a snack while we watched a movie
   last night.
&lt;/p&gt;
&lt;p&gt;
   We tried to "cook" a small number of popcorn kernels using two Sony Eriksson K610i's,
   a connected Bluetooth headset, and an old Motorola E386 (similar setup to that in
   the videos from Mick). The K610's have a SAR rating of 1.01 (as reported on the &lt;a href="http://www.sarshield.com/english/radiationchart-sonyericsson.htm" target="_blank"&gt;SAR
   Shield web site&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
   The result...we went hungry. And we did leave the calls open for a minute or two,
   stopped and started calls, even sent picture messages from one handset to the next.
   I don't think they emit nearly enough RF to pop the kernels. It takes the microwave
   (895W) a few minutes to do the job, we would have to have the phones (~0.7W) in talk/data
   mode for over a day to get close to that amount.
&lt;/p&gt;
&lt;p&gt;
   20 minutes wasted. Luckily we have one of those mobile plans were we get free calls
   between our phones.
&lt;/p&gt;
&lt;p&gt;
   That got me thinking....we need more power.
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/TheGreatPhoneFryupSwindle_9337/DSC00525.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="DSC00525" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/TheGreatPhoneFryupSwindle_9337/DSC00525_thumb.jpg" width="244" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
   So I hooked up three UHF long range RFID antennas and placed some rather nervous looking
   kernels in the middle. At 2W each, it still would of taken around 5 hours to get some
   popcorn. These puppies can read tags at 10m (even through walls as I discovered) but
   excite a popcorn kernel, they can not...we need more power.
&lt;/p&gt;
&lt;p&gt;
   What I need is one of those "lasers"
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/TheGreatPhoneFryupSwindle_9337/drevil.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="drevil" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/TheGreatPhoneFryupSwindle_9337/drevil_thumb.jpg" width="153" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;Who wants steak!
&lt;/h2&gt;
&lt;img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=6c1561dd-81b6-461b-aafc-67bad10ddde3" /&gt;</description>
      <comments>http://blogs.breezetraining.com.au/scotts/CommentView,guid,6c1561dd-81b6-461b-aafc-67bad10ddde3.aspx</comments>
      <category>Humour</category>
    </item>
    <item>
      <trackback:ping>http://blogs.breezetraining.com.au/scotts/Trackback.aspx?guid=5f9bcff7-ac69-4286-996e-465441f4253d</trackback:ping>
      <pingback:server>http://blogs.breezetraining.com.au/scotts/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,5f9bcff7-ac69-4286-996e-465441f4253d.aspx</pingback:target>
      <dc:creator>scotts@breezetraining.com.au (Scott Scovell)</dc:creator>
      <wfw:comment>http://blogs.breezetraining.com.au/scotts/CommentView,guid,5f9bcff7-ac69-4286-996e-465441f4253d.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.breezetraining.com.au/scotts/SyndicationService.asmx/GetEntryCommentsRss?guid=5f9bcff7-ac69-4286-996e-465441f4253d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      While working on a BizTalk RFID project we (<a href="http://blogs.breezetraining.com.au/mickb/" target="_blank">Mick</a>, <a href="http://blogs.msdn.com/rgarg/default.aspx" target="_blank">Rahul</a>,
      and I) wanted to explore whether we could use Silverlight (SL) to display tag read
      events as they are captured. As usual in these scenarios, I started writing wonderfully
      creative cheque's my graphic design skills could not cash. Eventually I put together
      an acceptable looking SL page with a couple of animated user controls to represent
      the received tag read events and counters.
   </p>
        <p>
          <a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/SilverlightBeta2andDuplexWCFServices_E8DE/silverlightdisplayinaction.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="346" alt="silverlight display in action" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/SilverlightBeta2andDuplexWCFServices_E8DE/silverlightdisplayinaction_thumb.jpg" width="555" border="0" />
          </a>
        </p>
        <p>
      The trick was how do we notify the SL application of the tag read event. At first
      we went down the client polling route and that worked out fine, but we really wanted
      something akin to duplex communications in WCF. That is, we want the service to push
      data out to the client when the service receives the event.
   </p>
        <p>
      At the time we were working with SL 2 Beta 1 and quickly realised two constraining
      factors
   </p>
        <ol>
          <li>
         Silverlight only supports http based WCF bindings. 
      </li>
          <li>
         Security restrictions prevent the SL application from creating callback listeners.</li>
        </ol>
        <p>
      Luckily for us Tech.Ed 2008 in the US was running and the team at Microsoft announced
      Beta 2 with support for a polling duplex communications model. After decoding the
      beta documentation <img alt="smile_confused" src="http://spaces.live.com/rte/emoticons/smile_confused.gif" />,
      and some help from learned blogger's, we cracked that puppy and got a Silverlight
      2 Beta 2 version working. 
   </p>
        <p>
      Here is a outline of the WCF bits of the Silverlight solution.
   </p>
        <ul>
          <li>
         Create a new "Silverlight" flavoured WCF service containing both a service contract
         and a client callback contract (a duplex service).<br /><br /><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="339" alt="silverlight service contract" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/SilverlightBeta2andDuplexWCFServices_E8DE/silverlightservicecontract.jpg" width="498" border="0" /><br /></li>
          <li>
         Implement the SubscribeToEvents operation ensuring you set a reference to the client
         callback channel. This is how we send events back to the SL application.<br /><pre class="csharpcode"><span class="rem">// Obtain a reference to the client callback
         channel</span> _callback = OperationContext.Current.GetCallbackChannel&lt;IDuplexServiceCallback&gt;();</pre><style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style></li>
        </ul>
        <p>
          <br />
        </p>
        <ul>
          <li>
         Implement the client callback. In our case, when the WCF service receives a tag read
         event from BizTalk RFID, we create a new message instance containing the event data
         and invoke the client callback method NotifyEvent()<br /><pre class="csharpcode"><span class="rem">// Construct NotifyEvent message</span> Message
         message = Message.CreateMessage(MessageVersion.Soap11, <span class="str">"Silverlight/IDuplexService/NotifyEvent"</span>,
         xmlEventData); <span class="rem">// Push event to client</span> _callback.NotifyEvent(message);<br /><br /></pre></li>
        </ul>
        <ul>
          <li>
         Create your own service host and custom binding that uses the <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.pollingduplexhttpbinding(VS.95).aspx" target="_blank">PollingDuplexBindingElement</a> located
         in the new System.ServiceModel.PollingDuplex assembly in the SL 2 Beta 2 SDK (the
         one in the ..\Libraries\<strong>Server</strong>\Evaluation folder).<br /></li>
          <li>
         In the SL application we create a duplex polling receiver class (see the <a href="http://msdn.microsoft.com/en-us/library/cc645028(VS.95).aspx" target="_blank">Silverlight
         documentation</a> for details) and use the PollingDuplexHttpBinding class to create
         factory and channel objects to send a message to the service. We then start a message
         receive loop to listen for messages sent by the service. 
         <br /></li>
          <li>
         Received events are then routed to the SL Page class. In our SL Page class we create
         instances of user controls for each event received and update some running counters.</li>
        </ul>
        <p>
      I did feel some pain around the WCF message formats (see point 3 above). At first
      I got the message action wrong, but no exceptions were thrown at all warning me of
      this...the SL application just sat there waiting for the callback. You have to make
      sure the message action here matches the callback operation exactly. That is, <strong>&lt;ServiceContractNamespace&gt;/&lt;ServiceInterface&gt;/&lt;Operation&gt;</strong>.
   </p>
        <p>
      As this is just a POC, I'm sure it will completely change (more than once) as it matures
      into production ready code, but I thought I might share what we are doing around Silverlight,
      WCF, and BizTalk.
   </p>
        <p>
      Also, <a href="http://weblogs.asp.net/dwahlin/archive/2008/06/16/pushing-data-to-a-silverlight-client-with-wcf-duplex-service-part-i.aspx" target="_blank">Dan
      Wahlin</a> has a great post detailing how to push data to a Silverlight application
      using WCF duplex services. Much of his work was used to understand how to put all
      these Silverlight and WCF pieces together. Thanks heaps Dan. <img alt="beer" src="http://spaces.live.com/rte/emoticons/beer.gif" /></p>
        <img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=5f9bcff7-ac69-4286-996e-465441f4253d" />
      </body>
      <title>Silverlight 2 Beta 2 and Duplex WCF Services</title>
      <guid>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,5f9bcff7-ac69-4286-996e-465441f4253d.aspx</guid>
      <link>http://blogs.breezetraining.com.au/scotts/2008/06/28/Silverlight2Beta2AndDuplexWCFServices.aspx</link>
      <pubDate>Sat, 28 Jun 2008 00:15:38 GMT</pubDate>
      <description>&lt;p&gt;
   While working on a BizTalk RFID project we (&lt;a href="http://blogs.breezetraining.com.au/mickb/" target="_blank"&gt;Mick&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/rgarg/default.aspx" target="_blank"&gt;Rahul&lt;/a&gt;,
   and I) wanted to explore whether we could use Silverlight (SL) to display tag read
   events as they are captured. As usual in these scenarios, I started writing wonderfully
   creative cheque's my graphic design skills could not cash. Eventually I put together
   an acceptable looking SL page with a couple of animated user controls to represent
   the received tag read events and counters.
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/SilverlightBeta2andDuplexWCFServices_E8DE/silverlightdisplayinaction.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="346" alt="silverlight display in action" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/SilverlightBeta2andDuplexWCFServices_E8DE/silverlightdisplayinaction_thumb.jpg" width="555" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
   The trick was how do we notify the SL application of the tag read event. At first
   we went down the client polling route and that worked out fine, but we really wanted
   something akin to duplex communications in WCF. That is, we want the service to push
   data out to the client when the service receives the event.
&lt;/p&gt;
&lt;p&gt;
   At the time we were working with SL 2 Beta 1 and quickly realised two constraining
   factors
&lt;/p&gt;
&lt;ol&gt;
   &lt;li&gt;
      Silverlight only supports http based WCF bindings. 
   &lt;li&gt;
      Security restrictions prevent the SL application from creating callback listeners.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
   Luckily for us Tech.Ed 2008 in the US was running and the team at Microsoft announced
   Beta 2 with support for a polling duplex communications model. After decoding the
   beta documentation &lt;img alt="smile_confused" src="http://spaces.live.com/rte/emoticons/smile_confused.gif"&gt;,
   and some help from learned blogger's, we cracked that puppy and got a Silverlight
   2 Beta 2 version working. 
&lt;/p&gt;
&lt;p&gt;
   Here is a outline of the WCF bits of the Silverlight solution.
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Create a new "Silverlight" flavoured WCF service containing both a service contract
      and a client callback contract (a duplex service).&lt;br&gt;
      &lt;br&gt;
      &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="339" alt="silverlight service contract" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/SilverlightBeta2andDuplexWCFServices_E8DE/silverlightservicecontract.jpg" width="498" border="0"&gt; 
      &lt;br&gt;
   &lt;li&gt;
      Implement the SubscribeToEvents operation ensuring you set a reference to the client
      callback channel. This is how we send events back to the SL application.&lt;br&gt;
      &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Obtain a reference to the client callback
      channel&lt;/span&gt; _callback = OperationContext.Current.GetCallbackChannel&amp;lt;IDuplexServiceCallback&amp;gt;();&lt;/pre&gt;
      &lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
   &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;br&gt;
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Implement the client callback. In our case, when the WCF service receives a tag read
      event from BizTalk RFID, we create a new message instance containing the event data
      and invoke the client callback method NotifyEvent()&lt;br&gt;
      &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Construct NotifyEvent message&lt;/span&gt; Message
      message = Message.CreateMessage(MessageVersion.Soap11, &lt;span class="str"&gt;"Silverlight/IDuplexService/NotifyEvent"&lt;/span&gt;,
      xmlEventData); &lt;span class="rem"&gt;// Push event to client&lt;/span&gt; _callback.NotifyEvent(message);&lt;br&gt;
      &lt;br&gt;
      &lt;/pre&gt;
   &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
   &lt;li&gt;
      Create your own service host and custom binding that uses the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.pollingduplexhttpbinding(VS.95).aspx" target="_blank"&gt;PollingDuplexBindingElement&lt;/a&gt; located
      in the new System.ServiceModel.PollingDuplex assembly in the SL 2 Beta 2 SDK (the
      one in the ..\Libraries\&lt;strong&gt;Server&lt;/strong&gt;\Evaluation folder).&lt;br&gt;
   &lt;li&gt;
      In the SL application we create a duplex polling receiver class (see the &lt;a href="http://msdn.microsoft.com/en-us/library/cc645028(VS.95).aspx" target="_blank"&gt;Silverlight
      documentation&lt;/a&gt; for details) and use the PollingDuplexHttpBinding class to create
      factory and channel objects to send a message to the service. We then start a message
      receive loop to listen for messages sent by the service. 
      &lt;br&gt;
   &lt;li&gt;
      Received events are then routed to the SL Page class. In our SL Page class we create
      instances of user controls for each event received and update some running counters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   I did feel some pain around the WCF message formats (see point 3 above). At first
   I got the message action wrong, but no exceptions were thrown at all warning me of
   this...the SL application just sat there waiting for the callback. You have to make
   sure the message action here matches the callback operation exactly. That is, &lt;strong&gt;&amp;lt;ServiceContractNamespace&amp;gt;/&amp;lt;ServiceInterface&amp;gt;/&amp;lt;Operation&amp;gt;&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
   As this is just a POC, I'm sure it will completely change (more than once) as it matures
   into production ready code, but I thought I might share what we are doing around Silverlight,
   WCF, and BizTalk.
&lt;/p&gt;
&lt;p&gt;
   Also, &lt;a href="http://weblogs.asp.net/dwahlin/archive/2008/06/16/pushing-data-to-a-silverlight-client-with-wcf-duplex-service-part-i.aspx" target="_blank"&gt;Dan
   Wahlin&lt;/a&gt; has a great post detailing how to push data to a Silverlight application
   using WCF duplex services. Much of his work was used to understand how to put all
   these Silverlight and WCF pieces together. Thanks heaps Dan. &lt;img alt="beer" src="http://spaces.live.com/rte/emoticons/beer.gif"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=5f9bcff7-ac69-4286-996e-465441f4253d" /&gt;</description>
      <comments>http://blogs.breezetraining.com.au/scotts/CommentView,guid,5f9bcff7-ac69-4286-996e-465441f4253d.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://blogs.breezetraining.com.au/scotts/Trackback.aspx?guid=48d6f390-82cc-4eff-a6d7-d095eb1b7781</trackback:ping>
      <pingback:server>http://blogs.breezetraining.com.au/scotts/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,48d6f390-82cc-4eff-a6d7-d095eb1b7781.aspx</pingback:target>
      <dc:creator>scotts@breezetraining.com.au (Scott Scovell)</dc:creator>
      <wfw:comment>http://blogs.breezetraining.com.au/scotts/CommentView,guid,48d6f390-82cc-4eff-a6d7-d095eb1b7781.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.breezetraining.com.au/scotts/SyndicationService.asmx/GetEntryCommentsRss?guid=48d6f390-82cc-4eff-a6d7-d095eb1b7781</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I have been an advocate of VMware Server (v1.0) having used it for the past three
      or so years now as my virtual development platform. The performance, networking, and
      user experience have all been good enough. I have accumulated a decent library of
      platforms, server products, developer tools, and client environments that I can call
      upon whenever needed. I especially liked the USB support which came in handy when
      working with RFID devices.
   </p>
        <p>
      Recently I got around to installing the latest version (v2.0 beta) ...oh dear <img alt="smile_sad" src="http://spaces.live.com/rte/emoticons/smile_sad.gif" />.
   </p>
        <p>
      Ok, it was only beta but it lost all the attributes that I mentioned as good points
      above. Performance was noticeably poorer (perhaps beta related), the revamped networking
      might be ok after a training course, and most importantly the user experience was
      totally shite. VMware moved away from the remote console being a Rich UI application
      (that had its faults but got the job done well enough) to a browser-based console.
      Why? I thought the industry has have moved on from this already <img alt="smile_confused" src="http://spaces.live.com/rte/emoticons/smile_confused.gif" />.
   </p>
        <p>
      So, I have finally conceded to (and coped a few ha-ha's from colleagues) to move my
      virtualisation platform over to Windows Server 2008 Hyper-V. No small job as I will
      have to convert (rebuild) all my VM's. In the meantime, I am running Virtual Server
      2005 R2 on the laptop to "ease" myself into the new platform.
   </p>
        <p>
       
   </p>
        <p>
          <a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/R.I.PVMwareServer_8A1C/ripvmwaredone.jpg">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="240" alt="rip vmware done" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/R.I.PVMwareServer_8A1C/ripvmwaredone_thumb.jpg" width="180" border="0" />
          </a>
        </p>
        <p>
       
   </p>
   Good bye old friend.<img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=48d6f390-82cc-4eff-a6d7-d095eb1b7781" /></body>
      <title>R.I.P VMware Server</title>
      <guid>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,48d6f390-82cc-4eff-a6d7-d095eb1b7781.aspx</guid>
      <link>http://blogs.breezetraining.com.au/scotts/2008/06/20/RIPVMwareServer.aspx</link>
      <pubDate>Fri, 20 Jun 2008 23:49:57 GMT</pubDate>
      <description>&lt;p&gt;
   I have been an advocate of VMware Server (v1.0) having used it for the past three
   or so years now as my virtual development platform. The performance, networking, and
   user experience have all been good enough. I have accumulated a decent library of
   platforms, server products, developer tools, and client environments that I can call
   upon whenever needed. I especially liked the USB support which came in handy when
   working with RFID devices.
&lt;/p&gt;
&lt;p&gt;
   Recently I got around to installing the latest version (v2.0 beta) ...oh dear &lt;img alt="smile_sad" src="http://spaces.live.com/rte/emoticons/smile_sad.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
   Ok, it was only beta but it lost all the attributes that I mentioned as good points
   above. Performance was noticeably poorer (perhaps beta related), the revamped networking
   might be ok after a training course, and most importantly the user experience was
   totally shite. VMware moved away from the remote console being a Rich UI application
   (that had its faults but got the job done well enough) to a browser-based console.
   Why? I thought the industry has have moved on from this already &lt;img alt="smile_confused" src="http://spaces.live.com/rte/emoticons/smile_confused.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
   So, I have finally conceded to (and coped a few ha-ha's from colleagues) to move my
   virtualisation platform over to Windows Server 2008 Hyper-V. No small job as I will
   have to convert (rebuild) all my VM's. In the meantime, I am running Virtual Server
   2005 R2 on the laptop to "ease" myself into the new platform.
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/R.I.PVMwareServer_8A1C/ripvmwaredone.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="240" alt="rip vmware done" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/R.I.PVMwareServer_8A1C/ripvmwaredone_thumb.jpg" width="180" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
Good bye old friend.&lt;img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=48d6f390-82cc-4eff-a6d7-d095eb1b7781" /&gt;</description>
      <comments>http://blogs.breezetraining.com.au/scotts/CommentView,guid,48d6f390-82cc-4eff-a6d7-d095eb1b7781.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blogs.breezetraining.com.au/scotts/Trackback.aspx?guid=455b0d7f-fffd-4806-bf4a-5c040fa9b38a</trackback:ping>
      <pingback:server>http://blogs.breezetraining.com.au/scotts/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,455b0d7f-fffd-4806-bf4a-5c040fa9b38a.aspx</pingback:target>
      <dc:creator>scotts@breezetraining.com.au (Scott Scovell)</dc:creator>
      <wfw:comment>http://blogs.breezetraining.com.au/scotts/CommentView,guid,455b0d7f-fffd-4806-bf4a-5c040fa9b38a.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.breezetraining.com.au/scotts/SyndicationService.asmx/GetEntryCommentsRss?guid=455b0d7f-fffd-4806-bf4a-5c040fa9b38a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Recently I implemented a BizTalk web services interface that required the need to
      support SoapFault messages. I quickly fell into a common trap and received a compiler
      error:
   </p>
        <blockquote>
          <p>
            <code>error X2162: must receive before sending a fault message on an implemented port</code>
          </p>
        </blockquote>
        <p>
      (see <a href="http://www.traceofthought.net/2004/04/21/TheSucceededOperatorInBizTalk2004Orchestrations.aspx" target="_blank">Scott
      Colestock's post</a> that nicely outlines his experience with the same issue)
   </p>
        <p>
      As Scott describes, the solution involved using the <em>succeeded()</em> function
      to first test if a transaction scope had succeeded or not in order to send out my
      soap-fault correctly. I vaguely recalled this function but never used it in anger
      before. After having spent a hour or so I will never get back, I made a note-to-self
      to seek out and reacquaint myself with the other operators and functions available
      to use in expression shapes within an orchestration.
   </p>
        <p>
      Here is the full list taken from the <a href="http://msdn.microsoft.com/en-us/library/aa561847.aspx" target="_blank">online
      documentation</a>:
   </p>
        <form id="aspnetForm" name="aspnetForm" action="aa561847.aspx" method="post">
          <table style="width: 489pt; border-collapse: collapse" cellspacing="0" cellpadding="0" width="652" border="0">
            <colgroup>
              <font size="2">
                <col style="width: 62pt; mso-width-source: userset; mso-width-alt: 2998" width="82" />
                <col style="width: 122pt; mso-width-source: userset; mso-width-alt: 5961" width="163" />
                <col style="width: 305pt; mso-width-source: userset; mso-width-alt: 14884" width="407" />
              </font>
              <tbody>
                <tr style="height: 15.75pt" height="21">
                  <td class="xl65" style="border-right: medium none; border-top: #4f81bd 0.5pt solid; font-weight: 700; font-size: 8pt; border-left: medium none; width: 62pt; color: windowtext; border-bottom: #4f81bd 0.5pt solid; font-family: 'Trebuchet MS'; height: 15.75pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-background-source: auto; mso-pattern: auto" width="82" height="21">
                    <p>
                      <font size="2">Operator</font>
                    </p>
                  </td>
                  <td class="xl65" style="border-right: medium none; border-top: #4f81bd 0.5pt solid; font-weight: 700; font-size: 8pt; border-left: medium none; width: 122pt; color: windowtext; border-bottom: #4f81bd 0.5pt solid; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-background-source: auto; mso-pattern: auto" width="163">
                    <p>
                      <font size="2">Description</font>
                    </p>
                  </td>
                  <td class="xl65" style="border-right: medium none; border-top: #4f81bd 0.5pt solid; font-weight: 700; font-size: 8pt; border-left: medium none; width: 305pt; color: windowtext; border-bottom: #4f81bd 0.5pt solid; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-background-source: auto; mso-pattern: auto" width="407">
                    <p>
                      <font size="2">Example</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 27pt" height="36">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 27pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="36">
                    <p>
                      <font size="2">checked()</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">raise error on arithmetic overflow</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">checked(x = y * 1000)</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">unchecked()</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">ignore arithmetic overflow</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">unchecked(x = y * 1000)</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">new</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">create an instance of a class</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">myObject = new MyClass;</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">typeof</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">Type retrieval</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">myMapType = typeof(myMap)</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 40.5pt" height="54">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 40.5pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="54">
                    <p>
                      <font size="2">succeeded()</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">test for successful completion of transactional scope or orchestration</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">succeeded(&lt;transaction ID for child transaction of current scope
                        or service&gt;)</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 27pt" height="36">
                  <td class="xl66" style="width: 62pt; height: 27pt" width="82" height="36">
                    <p>
                      <font size="2">exists</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">test for the existence of a message context property</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">BTS.RetryCount exists Message_In</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">+</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">unary plus</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">+(int x)</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">-</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">unary minus</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">-(int x)</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">!</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">logical negation</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">!myBool</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">~</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">bitwise complement</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">x = ~y</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">()</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">cast</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">(bool) myInt</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">*</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">times</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">Weight = MyMsg.numOrders * 20</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">/</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">divided by</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">x / y</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">+</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">plus</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">x + y</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">-</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">minus</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">x - y</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">&lt;&lt;</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">shift left</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">x &lt;&lt; 2</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">&gt;&gt;</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">shift right</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">x &gt;&gt; 2</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">&lt;</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">less than</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">If (MyMsg.numOrders &lt; 10)...</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">&gt;</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">greater than</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">If (MyMsg.numOrders &gt; 10)...</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">&lt;=</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">less than or equal to</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">If (MyMsg.numOrders &lt;= 10)...</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">&gt;=</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">greater than or equal to</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">If (MyMsg.numOrders &gt;= 10)...</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">==</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">equal to</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">If (MyMsg.numOrders == 10)...</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">!=</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">not equal to</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">If (MyMsg.numOrders != 10)...</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">&amp;</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">and</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">If (myByte &amp; 255)...</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">^</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">exclusive or</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">If (myByte ^ 1)...</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">|</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">or</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">If (myByte | 1)...</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">&amp;&amp;</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">conditional and</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                    <p>
                      <font size="2">If (MyMsg.numOrders &gt; 10) &amp;&amp; (MyMsg.numOrders &lt; 100)</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20">
                    <p>
                      <font size="2">||</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 122pt" width="163">
                    <p>
                      <font size="2">conditional or</font>
                    </p>
                  </td>
                  <td class="xl66" style="width: 305pt" width="407">
                    <p>
                      <font size="2">If (MyMsg.numOrders &lt; 10) || (MyMsg.numOrders &gt; 100)</font>
                    </p>
                  </td>
                </tr>
                <tr style="height: 15pt" height="20">
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: #4f81bd 0.5pt solid; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20">
                    <p>
                      <font size="2">//</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: #4f81bd 0.5pt solid; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163">
                    <p>
                      <font size="2">commenting</font>
                    </p>
                  </td>
                  <td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: #4f81bd 0.5pt solid; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407">
                  </td>
                </tr>
              </tbody>
            </colgroup>
          </table>
        </form>
        <p>
        </p>
        <form id="aspnetForm" name="aspnetForm" action="aa561847.aspx" method="post">
          <font size="2">//This is the comment</font>
        </form>
        <form id="aspnetForm" name="aspnetForm" action="aa561847.aspx" method="post">
          <font size="2">
          </font>
        </form>
        <p>
      Since then, this little exercise has helped in a few occasions, particularly the need
      for the <em>exists</em> function when working with optional property schema fields.
   </p>
        <p>
      I knew I should of read the manufacturers instructions <img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif" /></p>
        <img width="0" height="0" src="http://blogs.breezetraining.com.au/scotts/aggbug.ashx?id=455b0d7f-fffd-4806-bf4a-5c040fa9b38a" />
      </body>
      <title>List of functions and operators used in Orchestrations</title>
      <guid>http://blogs.breezetraining.com.au/scotts/PermaLink,guid,455b0d7f-fffd-4806-bf4a-5c040fa9b38a.aspx</guid>
      <link>http://blogs.breezetraining.com.au/scotts/2008/06/05/ListOfFunctionsAndOperatorsUsedInOrchestrations.aspx</link>
      <pubDate>Thu, 05 Jun 2008 14:42:47 GMT</pubDate>
      <description>&lt;p&gt;
   Recently I implemented a BizTalk web services interface that required the need to
   support SoapFault messages. I quickly fell into a common trap and received a compiler
   error:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
   &lt;code&gt;error X2162: must receive before sending a fault message on an implemented port&lt;/code&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   (see &lt;a href="http://www.traceofthought.net/2004/04/21/TheSucceededOperatorInBizTalk2004Orchestrations.aspx" target="_blank"&gt;Scott
   Colestock's post&lt;/a&gt; that nicely outlines his experience with the same issue)
&lt;/p&gt;
&lt;p&gt;
   As Scott describes, the solution involved using the &lt;em&gt;succeeded()&lt;/em&gt; function
   to first test if a transaction scope had succeeded or not in order to send out my
   soap-fault correctly. I vaguely recalled this function but never used it in anger
   before. After having spent a hour or so I will never get back, I made a note-to-self
   to seek out and reacquaint myself with the other operators and functions available
   to use in expression shapes within an orchestration.
&lt;/p&gt;
&lt;p&gt;
   Here is the full list taken from the &lt;a href="http://msdn.microsoft.com/en-us/library/aa561847.aspx" target="_blank"&gt;online
   documentation&lt;/a&gt;:
&lt;/p&gt;
&lt;form id="aspnetForm" name="aspnetForm" action="aa561847.aspx" method="post"&gt;
   &lt;table style="width: 489pt; border-collapse: collapse" cellspacing="0" cellpadding="0" width="652" border="0"&gt;
      &lt;colgroup&gt;
         &lt;font size="2"&gt; 
         &lt;col style="width: 62pt; mso-width-source: userset; mso-width-alt: 2998" width="82"&gt;
         &lt;col style="width: 122pt; mso-width-source: userset; mso-width-alt: 5961" width="163"&gt;
         &lt;col style="width: 305pt; mso-width-source: userset; mso-width-alt: 14884" width="407"&gt;
         &lt;/font&gt; 
         &lt;tbody&gt;
            &lt;tr style="height: 15.75pt" height="21"&gt;
               &lt;td class="xl65" style="border-right: medium none; border-top: #4f81bd 0.5pt solid; font-weight: 700; font-size: 8pt; border-left: medium none; width: 62pt; color: windowtext; border-bottom: #4f81bd 0.5pt solid; font-family: 'Trebuchet MS'; height: 15.75pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-background-source: auto; mso-pattern: auto" width="82" height="21"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;Operator&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl65" style="border-right: medium none; border-top: #4f81bd 0.5pt solid; font-weight: 700; font-size: 8pt; border-left: medium none; width: 122pt; color: windowtext; border-bottom: #4f81bd 0.5pt solid; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-background-source: auto; mso-pattern: auto" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;Description&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl65" style="border-right: medium none; border-top: #4f81bd 0.5pt solid; font-weight: 700; font-size: 8pt; border-left: medium none; width: 305pt; color: windowtext; border-bottom: #4f81bd 0.5pt solid; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-background-source: auto; mso-pattern: auto" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;Example&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 27pt" height="36"&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 27pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="36"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;checked()&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;raise error on arithmetic overflow&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;checked(x = y * 1000)&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;unchecked()&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 122pt" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;ignore arithmetic overflow&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 305pt" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;unchecked(x = y * 1000)&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;new&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;create an instance of a class&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;myObject = new MyClass;&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;typeof&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 122pt" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;Type retrieval&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 305pt" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;myMapType = typeof(myMap)&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 40.5pt" height="54"&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 40.5pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="54"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;succeeded()&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;test for successful completion of transactional scope or orchestration&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;succeeded(&amp;lt;transaction ID for child transaction of current scope
                     or service&amp;gt;)&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 27pt" height="36"&gt;
               &lt;td class="xl66" style="width: 62pt; height: 27pt" width="82" height="36"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;exists&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 122pt" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;test for the existence of a message context property&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 305pt" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;BTS.RetryCount exists Message_In&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;+&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;unary plus&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;+(int x)&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;-&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 122pt" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;unary minus&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 305pt" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;-(int x)&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;!&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;logical negation&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;!myBool&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;~&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 122pt" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;bitwise complement&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 305pt" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;x = ~y&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;()&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;cast&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;(bool) myInt&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;*&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 122pt" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;times&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 305pt" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;Weight = MyMsg.numOrders * 20&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;/&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;divided by&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;x / y&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;+&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 122pt" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;plus&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 305pt" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;x + y&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;-&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;minus&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 305pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;x - y&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="width: 62pt; height: 15pt" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;&amp;lt;&amp;lt;&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 122pt" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;shift left&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="width: 305pt" width="407"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;x &amp;lt;&amp;lt; 2&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style="height: 15pt" height="20"&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 62pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; height: 15pt; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="82" height="20"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;&amp;gt;&amp;gt;&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; background: #dbe5f1; border-left: medium none; width: 122pt; color: windowtext; border-bottom: medium none; font-family: 'Trebuchet MS'; text-decoration: none; text-underline-style: none; text-line-through: none; mso-pattern: #dbe5f1 none" width="163"&gt;
                  &lt;p&gt;
                     &lt;font size="2"&gt;shift right&lt;/font&gt;
                  &lt;/p&gt;
               &lt;/td&gt;
               &lt;td class="xl66" style="border-right: medium none; border-top: medium none; font-weight: 400; font-size: 8pt; ba