<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.opennetcf.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Compact Framework</title><subtitle type="html" /><id>http://community.opennetcf.com/articles/cf/atom.aspx</id><link rel="alternate" type="text/html" href="http://community.opennetcf.com/articles/cf/default.aspx" /><link rel="self" type="application/atom+xml" href="http://community.opennetcf.com/articles/cf/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20611.960">Community Server</generator><updated>2007-08-10T19:13:00Z</updated><entry><title>Determining Form and Process Changes in Windows CE</title><link rel="alternate" type="text/html" href="http://community.opennetcf.com/articles/cf/archive/2008/08/13/determining-form-and-process-changes-in-windows-ce.aspx" /><id>http://community.opennetcf.com/articles/cf/archive/2008/08/13/determining-form-and-process-changes-in-windows-ce.aspx</id><published>2008-08-13T21:41:00Z</published><updated>2008-08-13T21:41:00Z</updated><content type="html">





&lt;div class="Section1"&gt;


&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;August 2008&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Christopher Tacke&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;OpenNETCF Consulting, LLC&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;img src="http://community.opennetcf.com/blogs/cf/CSharp.PNG" alt="" align="middle" border="0" /&gt;&lt;a href="http://community.opennetcf.com/blogs/cf/200808/WindowWatcher/WindowWatcher.zip"&gt;Download the Source&lt;/a&gt;&lt;span class=""&gt;&lt;/span&gt;&lt;br /&gt;
&lt;font color="#0066cc"&gt;&lt;img src="http://community.opennetcf.com/blogs/cf/Adobe.PNG" alt="" align="middle" border="0" height="30" /&gt;&amp;nbsp;&lt;/font&gt;
&lt;a href="http://community.opennetcf.com/blogs/cf/200805/GDI_Performance.pdf" class="" title="Download the PDF" target="_blank"&gt;
&lt;/a&gt;&lt;a href="http://community.opennetcf.com/blogs/cf/200808/WindowWatcher/Determining_Form_and_Process_Changes_in_Windows_CE.pdf"&gt;&lt;font color="#0066cc"&gt;Download the PDF&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;


&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p class="MsoNormal"&gt;Windows CE, and especially Windows Mobile devices have a UI
paradigm that’s quite a bit different than the desktop.  As a general rule, only
one application, and indeed only one Form is typically ever in front of all
other applications because there usually isn’t enough real estate to show
multiple forms and MDI layout isn’t supported in CE.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;One of the things that this paradigm pushes us toward is
knowing either when the visible Form changes or when the user changes
applications completely.  We can use this for tracking state or even
implementing an application authentication scheme.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Unfortunately the Windows CE operating system simply doesn’t
provide us any kind of event to tell us when a Form has changed or when the
process has changed.  Sure, within our application we can watch things like the
Deactivate event on a Form, but when our Form gets deactivated, how do we
determine what’s on top now?  Is it another Form in our application, or another
application altogether?&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;In this article we’ll take a look at a simple utility class
called WindowWatcher than can provide us feedback for these state changes
through a very simple managed event interface. &lt;/p&gt;

&lt;h1&gt;Window Handles and Process IDs&lt;/h1&gt;

&lt;p class="MsoNormal"&gt;The key to our solution is the fact that all Forms are
Window and all Windows have a unique identifier called a Handle, or hWnd, and
that all processed have a unique identifier called a process identifier, or
PID.  There are Win32 APIs to retrieve these identifiers, and while there are
no corresponding managed-code methods that call them, a little P/Invoke gets us
there easily.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;The Win32 APIs we’re going to be interested in are:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;table class="MsoTableGrid" style="border:medium none;margin-left:36.9pt;border-collapse:collapse;" cellpadding="0" cellspacing="0"&gt;
 
&lt;tr&gt;
  
&lt;td style="border:1pt solid black;padding:0in 5.4pt;width:202.5pt;"&gt;
  
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Win32 Method&lt;/p&gt;
  &lt;/td&gt;
  
&lt;td style="border-style:solid solid solid none;border-color:black black black -moz-use-text-color;border-width:1pt 1pt 1pt medium;padding:0in 5.4pt;width:193.5pt;"&gt;
  
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Function&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 
&lt;tr&gt;
  
&lt;td style="border-style:none solid solid;border-color:-moz-use-text-color black black;border-width:medium 1pt 1pt;padding:0in 5.4pt;width:202.5pt;"&gt;
  
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;GetForegroundWindow&lt;/p&gt;
  &lt;/td&gt;
  
&lt;td style="border-style:none solid solid none;border-color:-moz-use-text-color black black -moz-use-text-color;border-width:medium 1pt 1pt medium;padding:0in 5.4pt;width:193.5pt;"&gt;
  
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Gets the handle, or hWnd, of the current topmost, visible Window&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 
&lt;tr&gt;
  
&lt;td style="border-style:none solid solid;border-color:-moz-use-text-color black black;border-width:medium 1pt 1pt;padding:0in 5.4pt;width:202.5pt;"&gt;
  
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;GetProcessID&lt;/p&gt;
  &lt;/td&gt;
  
&lt;td style="border-style:none solid solid none;border-color:-moz-use-text-color black black -moz-use-text-color;border-width:medium 1pt 1pt medium;padding:0in 5.4pt;width:193.5pt;"&gt;
  
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Gets the process identifier, or PID, of the calling process&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 
&lt;tr&gt;
  
&lt;td style="border-style:none solid solid;border-color:-moz-use-text-color black black;border-width:medium 1pt 1pt;padding:0in 5.4pt;width:202.5pt;"&gt;
  
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;GetWindowThreadProcessId&lt;/p&gt;
  &lt;/td&gt;
  
&lt;td style="border-style:none solid solid none;border-color:-moz-use-text-color black black -moz-use-text-color;border-width:medium 1pt 1pt medium;padding:0in 5.4pt;width:193.5pt;"&gt;
  
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Gets the PID that owns a specific hWnd&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;With just these three APIs we can determine when the
foreground Window has changed because the return value from GetForegroundWindow
will change, and we can determine if the new foreground Window is in a new
process because the PID retrieved from GetWindowThreadProcessId will change.&lt;/p&gt;

&lt;h1&gt;A Simple Solution&lt;/h1&gt;

&lt;p class="MsoNormal"&gt;So armed with these APIs, and a general idea of how we can
determine the state changes we want, we can create a simple class that
encapsulates our logic.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;First we need to define a couple delegates for our events:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;div style="border:1pt solid windowtext;padding:1pt 4pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;margin-left:0.5in;margin-right:0.5in;"&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;delegate&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; &lt;span&gt;WindowChangedHandler&lt;/span&gt;(&lt;span style="color:blue;"&gt;bool&lt;/span&gt; processChanged, &lt;span style="color:blue;"&gt;bool&lt;/span&gt;
inMyProcess);&lt;/p&gt;

&lt;/div&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;An event of this type will be raised any time the foreground
Window changes, and if the owner of the new Window is a new process, processChanged
will be true. In either case inMyProcess will tell us if the new foreground
Window is in the process that created our WindowWatcher class.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Now we implement the logic.  The core of the logic will be a
background thread that periodically checks the current foreground window.  To
be nice, we’ll make the interval adjustable.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;div style="border:1pt solid windowtext;padding:1pt 4pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;margin-left:0.5in;margin-right:0.5in;"&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; Interval {
&lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/p&gt;

&lt;/div&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Next we define some variables that we’ll maintain at class
scope to keep track of state between checks and initialize them in the class
constructor plus define the event of our delegate type:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;div style="border:1pt solid windowtext;padding:1pt 4pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;margin-left:0.5in;margin-right:0.5in;"&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt;
m_enabled;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt;
m_stopThread;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span&gt;IntPtr&lt;/span&gt;
m_lastForeWindow;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt;
m_lastPID;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; m_myPID;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;event&lt;/span&gt; &lt;span&gt;WindowChangedHandler&lt;/span&gt; WindowChanged;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; WindowWatcher()&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; 
m_enabled = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; 
m_lastForeWindow = &lt;span&gt;IntPtr&lt;/span&gt;.Zero;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; 
m_lastPID = 0;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  &lt;span style="color:green;"&gt;// call the SDF because it&amp;#39;s not a P/Invoke - it&amp;#39;s a kcall
and this is less code&lt;/span&gt;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; 
m_myPID = (&lt;span style="color:blue;"&gt;uint&lt;/span&gt;)OpenNETCF.Diagnostics.&lt;span&gt;ProcessHelper&lt;/span&gt;.GetCurrentProcessID();&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; 
Interval = 100;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;}&lt;/p&gt;

&lt;/div&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;You’ll notice here that to get the current process ID I’m
not just calling a P/Invoke, but instead calling into the Smart Device
Framework (SDF).  The reason for this is that GetCurrentProcessID isn’t a true
API, but is instead a macro that’s defined in the CE headers, and the value it
returns depends on the processor architecture of the device.  Rather than lay
out all of the code needed to determine this it’s a lot easier to just call a
function in the SDF.  Keeps the code smaller and less confusing.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;While we’re thinking about P/Invokes, we might as well
define the other two we do need:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;div style="border:1pt solid windowtext;padding:1pt 4pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;margin-left:0.5in;margin-right:0.5in;"&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[&lt;span&gt;DllImport&lt;/span&gt;(&lt;span&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;,
SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;)]&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span&gt;IntPtr&lt;/span&gt;
GetForegroundWindow();&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[&lt;span&gt;DllImport&lt;/span&gt;(&lt;span&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;,
SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;)]&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt;
GetWindowThreadProcessId(&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;    &lt;/span&gt;&lt;span&gt;IntPtr&lt;/span&gt; hwnd, &lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt;
lpdwProcessId);&lt;/p&gt;

&lt;/div&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;To start and stop our watcher, we’ll expose a simple Enabled
property.  It’s job will be to start or stop our background worker thread.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;div style="border:1pt solid windowtext;padding:1pt 4pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;margin-left:0.5in;margin-right:0.5in;"&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public
bool Enabled&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  get
{ return m_enabled; }&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  set&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  {&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    if
(value == m_enabled) return;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    if
(value)&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    {&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
&lt;span&gt;Thread&lt;/span&gt; thread = new &lt;span&gt;Thread&lt;/span&gt;(WatcherThreadProc);&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
thread.IsBackground = true;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
thread.Start();&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    }&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    else&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    {&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
m_stopThread = true;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    }&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  }&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;}&lt;/p&gt;

&lt;/div&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;The only thing remaining is to implement the actual logic engine
of this class that does all of the work, which is all in a single method
running as the background thread:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;div style="border:1pt solid windowtext;padding:1pt 4pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;margin-left:0.5in;margin-right:0.5in;"&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt;
WatcherThreadProc()&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  &lt;span style="color:green;"&gt;// initialize some values&lt;/span&gt;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; 
m_stopThread = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; 
m_lastForeWindow = GetForegroundWindow();&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; 
GetWindowThreadProcessId(m_lastForeWindow, &lt;span style="color:blue;"&gt;out&lt;/span&gt;
m_lastPID);&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  &lt;span style="color:blue;"&gt;while&lt;/span&gt; (!m_stopThread)&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  {&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    &lt;span&gt;IntPtr&lt;/span&gt; currentForeWindow = GetForegroundWindow();&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    &lt;span style="color:blue;"&gt;if&lt;/span&gt; (currentForeWindow != m_lastForeWindow)&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    {&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
&lt;span style="color:blue;"&gt;uint&lt;/span&gt; pid;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
GetWindowThreadProcessId(currentForeWindow, &lt;span style="color:blue;"&gt;out&lt;/span&gt;
pid);&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
&lt;span style="color:green;"&gt;// window has changed - is it a new process?&lt;/span&gt;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
&lt;span style="color:blue;"&gt;bool&lt;/span&gt; newProcess = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
&lt;span style="color:blue;"&gt;if&lt;/span&gt; (pid != m_lastPID)&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
{&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;       
newProcess = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;       
m_lastPID = pid;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
}&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
&lt;span style="color:blue;"&gt;bool&lt;/span&gt; inMyProcess = (pid == m_myPID);&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
&lt;span style="color:blue;"&gt;if&lt;/span&gt; (WindowChanged != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
{&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;       
WindowChanged(newProcess, inMyProcess);&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
}&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;     
m_lastForeWindow = currentForeWindow;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    }&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    &lt;span&gt;Thread&lt;/span&gt;.Sleep(Interval);&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  }&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt; 
m_enabled = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;}&lt;/p&gt;

&lt;/div&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;You can see that it runs on the period determined by the
Interval property.  Ever Interval, it checks the foreground Window.  If it has
changed, it then determines if the new foreground Window is in the same process
as the last.  Next it determines if the process that owns the foreground Window
is the same process that created the watcher class itself and finally it fires
off an event of there are any subscribers.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;That’s all there is to it.  Using the new class is very,
very simple.  It looks like this:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;div style="border:1pt solid windowtext;padding:1pt 4pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;margin-left:0.5in;margin-right:0.5in;"&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;WindowWatcher
watcher = &lt;span style="color:blue;"&gt;new&lt;/span&gt; WindowWatcher();&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;watcher.WindowChanged
+= WindowChangedHandler;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;…&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; WindowChangedHandler(&lt;span style="color:blue;"&gt;bool&lt;/span&gt;
processChanged, &lt;span style="color:blue;"&gt;bool&lt;/span&gt; inMyProcess)&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  &lt;span style="color:blue;"&gt;if&lt;/span&gt;(processChanged)&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  {&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    Debug.WriteLine(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;       
&lt;span&gt;&amp;quot;Window and Process changed - we {0} in our
app&amp;quot;&lt;/span&gt;, &lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span&gt;        &lt;/span&gt;inMyProcess ? &lt;span&gt;&amp;quot;are&amp;quot;&lt;/span&gt;
: &lt;span&gt;&amp;quot;are not&amp;quot;&lt;/span&gt;));&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  }&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  &lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  {&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    Debug.WriteLine(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;       
&lt;span&gt;&amp;quot;Window changed - we {0} in our app&amp;quot;&lt;/span&gt;,
&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;span&gt;        &lt;/span&gt;inMyProcess ? &lt;span&gt;&amp;quot;are&amp;quot;&lt;/span&gt;
: &lt;span&gt;&amp;quot;are not&amp;quot;&lt;/span&gt;));&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;  }&lt;/p&gt;

&lt;p class="Code" style="margin:0in 0in 0.0001pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;}&lt;/p&gt;

&lt;/div&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p class="MsoNormal"&gt;As Compact Framework developers, and really even as general
mobile and embedded device developers, we have to get used to the fact that
Microsoft can’t reasonably think of every possible use-case or business challenge
we might face. What’s important is that they’ve generally provided us the tools
to implement solutions to just about any problem we run into.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;In this case we needed to know information about not just
application state, but overall device state, and in less than 100 lines of code
we came up with a reasonable solution that didn’t require any onerous coding or
framework that we’d have to inject into all of our Forms.  As with many
problems like this, understanding the Win32 API and thinking outside the
managed-code box can usually get you a fairly simple solution.&lt;/p&gt;

&lt;/div&gt;&lt;img src="http://community.opennetcf.com/aggbug.aspx?PostID=65787" width="1" height="1"&gt;</content><author><name>ctacke</name><uri>http://community.opennetcf.com/members/ctacke.aspx</uri></author></entry><entry><title>Exchanging Data using Windows Mobile, Windows Communication Foundation, .NET Compact Framework and Exchange 2007</title><link rel="alternate" type="text/html" href="http://community.opennetcf.com/articles/cf/archive/2008/06/09/exchanging-data-using-windows-mobile-windows-communication-foundation-net-compact-framework-and-exchange-2007.aspx" /><id>http://community.opennetcf.com/articles/cf/archive/2008/06/09/exchanging-data-using-windows-mobile-windows-communication-foundation-net-compact-framework-and-exchange-2007.aspx</id><published>2008-06-09T15:05:00Z</published><updated>2008-06-09T15:05:00Z</updated><content type="html">




&lt;div class="Section1"&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;Mark Arteaga&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;OpenNETCF
Consulting&lt;/p&gt;

&lt;p class="MsoNormal"&gt;June 2008&lt;/p&gt;
&lt;div class="Section1"&gt;&amp;nbsp;

&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;img src="http://community.opennetcf.com/blogs/cf/CSharp.PNG" alt="" align="middle" border="0" /&gt;&lt;a href="http://community.opennetcf.com/blogs/cf/200806/WCF%20Windows%20Mobile%20Exchange%20and%20NETCF_files/Sample%20Code.zip"&gt;Download the Source&lt;/a&gt;&lt;span class=""&gt;&lt;/span&gt;&lt;br /&gt;
&lt;font color="#0066cc"&gt;&lt;img src="http://community.opennetcf.com/blogs/cf/Adobe.PNG" alt="" align="middle" border="0" height="30" /&gt;&amp;nbsp;&lt;/font&gt;
&lt;a href="http://community.opennetcf.com/blogs/cf/200805/GDI_Performance.pdf" class="" title="Download the PDF" target="_blank"&gt;
&lt;/a&gt;&lt;font color="#0066cc"&gt;&lt;a href="http://community.opennetcf.com/blogs/cf/200806/WCF%20Windows%20Mobile%20Exchange%20and%20NETCF_files/WCF%20Windows%20Mobile%20Exchange%20and%20NETCF.pdf"&gt;Download the PDF&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:16pt;line-height:115%;"&gt;Introduction&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Several new features have been added to .NET Compact
Framework 3.5that you as a developer can take advantage of in your applications. 
An overview of what is new is available on &lt;span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb397835.aspx"&gt;&lt;span&gt;MSDN&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;.
One such feature is Windows Communication Foundation (WCF).  For an
introduction to Windows Communication Foundation, you should read &lt;span&gt;&lt;a href="http://community.opennetcf.com/articles/cf/archive/2007/11/29/an-introduction-to-wcf-for-device-developers.aspx"&gt;&lt;span&gt;Chris Tacke’s article&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;.  This article will focus on
“Store and Forward messaging” using Exchange Server 2007.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;There are two sample applications accompanying this
article.  The first sample is a typical Line of Business (LOB) application
where a central dispatcher notifies field workers of a new customer request. 
The second sample is a peer-to-peer application where users can share photos
they have taken with their Windows Mobile device. The techniques used in the
second example could easily be used to share documents and other payloads in an
enterprise scenario.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:16pt;line-height:115%;"&gt;Prerequisites&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Visual Studio 2008&lt;/span&gt;&lt;span style="font-family:Symbol;"&gt;&lt;/span&gt;&lt;/li&gt;

&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Exchange 2007&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p class="MsoNormal"&gt;&lt;span&gt;For the device applications:&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;/span&gt;&lt;span&gt;.NET Compact Framework 3.5&lt;/span&gt;&lt;/li&gt;

&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;/span&gt;&lt;span&gt;Windows Mobile 5.0 or later&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p class="MsoNormal"&gt;&lt;span&gt;For the desktop application:&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;/span&gt;&lt;span&gt;.NET Framework 3.5&lt;/span&gt;&lt;/li&gt;

&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;/span&gt;&lt;span&gt;.NET Compact Framework 3.5 SDK&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:16pt;line-height:115%;"&gt;Why E-Mail?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;You are probably wondering “&lt;i&gt;why use email to transport
data?  Why not use an ASP.NET Web service and have the device connect to that
Web service?&lt;/i&gt;”The simple answer is addressability. Mobile devices are just
that – &lt;i&gt;mobile&lt;/i&gt;. They cannot guarantee a constant connection unless you
are within the walled garden of a corporate network, even then there may well
be connectivity black spots. Also, many enterprise scenarios leverage public
cellular networks, where not only is connectivity not guaranteed, but you face
the bigger challenges of uncontrollable DHCP leases and carrier network address
translation (NAT). In light of this, e-mail is a very compelling transport for
a number of reasons. Most people already use email and many enterprises have
already deployed Direct Push Email with Exchange so leveraging this mechanism
for custom applications requires no changes to existing infrastructure.  You
can assume that application data will be delivered to the user’s device using
Exchange Direct Push Email whether the user is behind the firewall or outside
the firewall.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:16pt;line-height:115%;"&gt;Getting Things Done&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;To use WCF with Exchange, all we do is add references to the
assemblies listed below to our device and desktop projects:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;/span&gt;Device Project&lt;/li&gt;&lt;/ul&gt;

&lt;ol style="margin-left:40px;"&gt;&lt;li&gt;Microsoft.ServiceModel.Channels.Mail
(.NET Compact Framework version)&lt;/li&gt;&lt;li&gt;Microsoft.ServiceModel.Channels.Mail.WindowsMobile&lt;/li&gt;&lt;li&gt;System.Runtime.Serialization&lt;/li&gt;&lt;li&gt;System.ServiceModel&lt;/li&gt;&lt;/ol&gt;







&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;/span&gt;Desktop Project&lt;/li&gt;&lt;/ul&gt;

&lt;ol style="margin-left:40px;"&gt;&lt;li&gt;Microsoft.ServiceModel.Channels.Mail
(.NET Framework version)&lt;/li&gt;&lt;li&gt;Microsoft.ServiceModel.Channels.Mail.ExchangeWebService&lt;/li&gt;&lt;li&gt;System.Runtime.Serialization&lt;/li&gt;&lt;li&gt;System.ServiceModel&lt;/li&gt;&lt;/ol&gt;







&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;One thing to note is that the
Microsoft.ServiceModel.Channels.Mail.dll assemblies in the above lists are two
separate assemblies - one for the device and one the desktop.  We discuss this
a bit more in the &lt;span&gt;&lt;a href="http://community.opennetcf.com/controlpanel/blogs/posteditor.aspx?SelectedNavItem=NewPost#_Sharing_Code_Between"&gt;&lt;span&gt;Sharing Code Between Platforms&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; section below.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;We have also created two helper classes to make it easier to
use the mail channel to be able to send data between devices and desktop. 
These two classes are &lt;span&gt;&lt;a href="http://community.opennetcf.com/controlpanel/blogs/posteditor.aspx?SelectedNavItem=NewPost#_WCFMessagingManager_Events"&gt;&lt;b&gt;&lt;span&gt;WCFMessagingManager&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;and &lt;span&gt;&lt;a href="http://community.opennetcf.com/controlpanel/blogs/posteditor.aspx?SelectedNavItem=NewPost#_XMLSerializerWrapper"&gt;&lt;b&gt;&lt;span&gt;XmlSerializerWrapper&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:16pt;line-height:115%;"&gt;XmlSerializerWrapper&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;To serialize and de-serialize your data, WCF requires an
object inherit from &lt;span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.xmlobjectserializer.aspx"&gt;&lt;b&gt;&lt;span&gt;XmlObjectSerializer&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;.  Desktop developers can
use &lt;span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx"&gt;&lt;b&gt;&lt;span&gt;DataContractSerializer&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;however this
class is not available in the .NET Compact Framework.  Instead, we will simply create
an &lt;b&gt;XmlSerializerWrapper &lt;/b&gt;class which inherits from XmlObjectSerializer
and has an internal XmlSerialzier member variable:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-bottom:6pt;line-height:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;public class&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; XmlSerializerWrapper&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; : &lt;span&gt;XmlObjectSerializer&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:6pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:6pt;text-indent:36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSerializer&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; m_serializer;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:6pt;text-indent:36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ....&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:6pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;br /&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;In the constructor, we create a new XmlSerializer of the
type we want to serialize as follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
XmlSerializerWrapper(&lt;span&gt;Type&lt;/span&gt; type)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;text-indent:36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_serializer = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;XmlSerializer&lt;/span&gt;(type);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;We also override the WriteObject() and ReadObject() methods
which WCF calls to serialize and de-serialize our object as follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; WriteObject(&lt;span&gt;XmlDictionaryWriter&lt;/span&gt;
writer, &lt;span style="color:blue;"&gt;object&lt;/span&gt; graph)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;text-indent:36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_serializer.Serialize(writer, graph);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;And to de-serialize as follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;public override object&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; ReadObject(&lt;span&gt;XmlDictionaryReader&lt;/span&gt;
reader)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;{&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
m_serializer.Deserialize(reader);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;}&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;If you want more information on this take a look at the
following article &lt;span&gt;&lt;a href="http://blogs.msdn.com/andrewarnottms/archive/2008/01/18/using-the-xmlserializer-as-an-xmlobjectserializer-with-wcf.aspx"&gt;&lt;span&gt;Using the XmlSerializer as an XmlObjectSerializer with WCF&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;a class="" title="_Toc200771317" name="_Toc200771317"&gt;&lt;/a&gt;&amp;nbsp;&lt;/h3&gt;

&lt;p class="MsoNormal"&gt;&lt;a class="" title="_Toc200772433" name="_Toc200772433"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size:16pt;line-height:115%;"&gt;WCFMessagingManager&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;WCFMessagingManager is a class that makes it easier for
developers to send and listen for messages using WCF.  It derives from the
Messaging class available in this &lt;span&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc164240.aspx"&gt;&lt;span&gt;MSDN
article&lt;/span&gt;&lt;/a&gt;,&lt;/span&gt; which outlines creating a mobile chat system using the
Compact Framework and Windows Mobile.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;The WCFMessagingManager class is a generic class that
provides the flexibility to accept any type of object to send.  With the
Dispatch Application we use the DispatchMessage type and with the Picture
Sharing application we use the PhotoData object.  We will discuss these classes
in more detail in the &lt;span&gt;&lt;a href="http://community.opennetcf.com/controlpanel/blogs/posteditor.aspx?SelectedNavItem=NewPost#_Dispatch_Application"&gt;&lt;span&gt;Dispatch Application&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; and &lt;span&gt;&lt;a href="http://community.opennetcf.com/controlpanel/blogs/posteditor.aspx?SelectedNavItem=NewPost#_Picture_Sharing_Application"&gt;&lt;span&gt;Picture Sharing
Application&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; sections.&lt;/p&gt;

&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:14pt;line-height:115%;"&gt;Creating
a WCFMessagingManager&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;To send our data objects we need to create our mail binding
objects.  On the desktop we create and ExchangeWebServiceMailBinding as
follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ExchangeWebServiceMailBinding&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; binding = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;ExchangeWebServiceMailBinding&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;Uri&lt;/span&gt;(Properties.&lt;span&gt;Settings&lt;/span&gt;.Default.ExchangeServer), &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;NetworkCredential&lt;/span&gt;(Email,
Password));&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;br /&gt;
And on the device we create a WindowsMobileMainBinding object as follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WindowsMobileMailBinding&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt; binding = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;WindowsMobileMailBinding&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;You will notice that on the desktop, you have to specify an
Exchange server address and your network credentials for the email account.  This
data is used to poll the mail box for any messages sent with the appropriate
channel names.  On the Windows Mobile side you don’t have to provide
credentials since WindowsMobileMailBindingmonitors the mail in the Outlook
inbox on the local device.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;To use the WCFMessagingManager class we create a new
instance of the object and pass in a few parameters as follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WCFMessagingManager&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;&lt;span&gt;PhotoData&lt;/span&gt;&amp;gt;
m_messagingManager;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_messagingManager = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;WCFMessagingManager&lt;/span&gt;&amp;lt;&lt;span&gt;PhotoData&lt;/span&gt;&amp;gt;(binding,&lt;span&gt;Settings&lt;/span&gt;.Default.IncomingChannel);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;When we create the WCFMessagingManager, we explicitly set
PhotoData as the type for the generic class and the for constructor parameters
we provide the MailBindingBase (which both WindowsMobileMailBinding and
ExchangeWebServiceMailBinding both inherit from) and the channel we would like
to listen on.The channel must be unique to every user using the application,
but you can share the same email address for sending messages.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;In the constructor of WCFMessagingManager we first build an
IChannelFactory using the mail bindings as follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Create a param collection for both the input channel and output
channel&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BindingParameterCollection&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt; param = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;BindingParameterCollection&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Build the channel factory&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_channelFactory
= m_mailBinding.BuildChannelFactory&amp;lt;&lt;span&gt;IOutputChannel&lt;/span&gt;&amp;gt;(param);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_channelFactory.Open();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;We build the IChannelFactory using the MailBindingBase
object passed in and open the IChannelFactory.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Once the IChannelFactory is created, we create a listener
channel so we can listen to incoming messages.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Build the channel listeners&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_channelListener
= m_mailBinding.BuildChannelListener&amp;lt;&lt;span&gt;IInputChannel&lt;/span&gt;&amp;gt;(&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MailUriHelper&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.CreateUri(m_channelNameListen, &lt;span&gt;&amp;quot;&amp;quot;&lt;/span&gt;), param);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;The channel name used is the channelNameListen parameter
passed in the constructor.&lt;/p&gt;

&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:14pt;line-height:115%;"&gt;Sending
Messages&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;WCFMessagingManager exposes a method to send data using e-mail
as the transport, which is defined as follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; Sends a message to the receiving end&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;param name=&amp;quot;recipient&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;param name=&amp;quot;body&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
SendMessage(&lt;span style="color:blue;"&gt;string&lt;/span&gt; recipient,&lt;span style="color:blue;"&gt;string&lt;/span&gt; channel, T body)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {...}&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;The
SendMessage method is fairly straightforward,requiring three parameters.  The
first one, recipient, is the destination email address that the message will be
going to.  The channel parameter is the channel the destination will be
listening on.  The body parameter is the object that will be sent to the
destination.  Notice that the body parameter is of a generic type, so in the
case of Photo Sharing application, we will be sending a PhotoData object.&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;The
implementation of SendMessage is also fairly straightforward:&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Use the channel factory to create an output channel&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IOutputChannel&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; outputChannel = m_channelFactory.CreateChannel(&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; new &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;EndpointAddress&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;(&lt;span&gt;MailUriHelper&lt;/span&gt;.Create(channel,
recipient)));&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Open the output channel&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; outputChannel.Open();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Create a message to send via the channel&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Message&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
message = &lt;span&gt;Message&lt;/span&gt;.CreateMessage(&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MessageVersion&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.Default, UrnInternal,&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; body, m_xmlSerializerWrapper);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Send the message&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; outputChannel.Send(message);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Close the oubput channel&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; outputChannel.Close();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:12pt 0cm 0.0001pt;"&gt;Using the IChannelFactory we created
in the constructor, we create a new IOutputChannel specifying an EndpointAddress.
The EndpointAddress requires an output channel (or the listening channel of the
destination) and the destination email address of the recipient.&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:12pt 0cm 0.0001pt;"&gt;Once the IOutputChannel is created,
we create a Message (defined in System.ServiceModel.Channels) using the static
Message.CreateMessage method.  Here we pass in a MessageVersion (which we set
to default), a Urn, the T body, and the XmlSerializerWrapper which will handle
serializing and deserializing our body.&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:12pt 0cm 0.0001pt;"&gt;When a message is sent, you will get
a message in your mail box with a cryptic subject as follows:&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:12pt 0cm 0.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:12pt 0cm 0.0001pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;SM:v=3.5;CN=treochannel;ID=cbb5d3c798c84af3b1daf7615b780fb3;SD=633472436040000000;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:12pt 0cm 0.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-top:12pt;"&gt;And the actual message will look
something like this&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-top:12pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;s:Envelope&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:red;"&gt;xmlns:a&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2005/08/addressing&lt;/span&gt;&amp;quot;&lt;span style="color:red;"&gt;xmlns:s&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2003/05/soap-envelope&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;s:Header&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;a:Action&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:red;"&gt;s:mustUnderstand&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;urn:photoMessage&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a:Action&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;a:To&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:red;"&gt;s:mustUnderstand&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;net.mail://treochannel/#marteaga@opennetcf.com&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a:To&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;s:Header&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;s:Body&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;s:Body&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;s:Envelope&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-top:12pt;"&gt;This XML is automatically created
by the System.ServiceModel.Channels.Message class.  In the case of a PhotoData
object it will be serialized and added in between the body tags:&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-top:12pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;PhotoData&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:red;"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;&amp;quot;&lt;span style="color:red;"&gt;xmlns:xsd&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;Id&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;9873fd22-189f-4525-97a5-4572dbcd7ad0&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;Id&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;FileName&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;/cf/200806/WCF Windows Mobile Exchange and NETCF_files/img002.jpg&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;FileName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;Latitude&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;43.6919&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;Latitude&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;Longitude&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;-79.5782&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;Longitude&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;FileSize&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;6776&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;FileSize&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;Base64Data&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;...&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;Base64Data&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;PhotoData&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:14pt;line-height:115%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:14pt;line-height:115%;"&gt;Listening
for Incoming Messages&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;WCFMessagingManagerexposes a BeginListening method which
starts a separate thread that listens for incoming messages in the background. 
The core implementation of the listening thread is as follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Open the listener channel&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_channelListener.Open();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Accept and open the inputCHannel&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_inputChannel
= m_channelListener.AcceptChannel();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_inputChannel.Open();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Message&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
message;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Calling IInputChannel.Receive will block until a message is
receive or until the inputChannel is closed&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
(&lt;span style="color:blue;"&gt;true&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; message = m_inputChannel.Receive();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
(message == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; T body = message.GetBody&amp;lt;T&amp;gt;(m_xmlSerializerWrapper);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OnIncomingMessage(body);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
(&lt;span&gt;Exception&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Raise the exception handler&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OnListenException(e);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;The first thing we do is open the IChannelListener we
created in the WCFMessagingManager constructor.  Using the IChannelListener we
create an IInputChannel using the AcceptChannel() method and then Open() the
IInputChannel.  Once all this is setup, we step into the while() loop and call
Receive() on the IInputChannel.  IInputChannel.Receive is a blocking call and
will not return until an incoming message is received or the IInputChannel.Close()
method is called.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;When a message is received, we get the Body of the message
using the GetBody method (passing in our XmlSerializerWrapper) and then raise
the IncomingMessage event.  If there is an error receiving the message, the
ListenException event is raised to notify the user that something has gone
wrong.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;To stop listening for incoming messages, WCFMessagingManager
exposes a StopListening method which will shut down all channels and threads.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;a class="" title="_WCFMessagingManager_Events" name="_WCFMessagingManager_Events"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size:14pt;line-height:115%;"&gt;WCFMessagingManager Events&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;WCFMessagingManager also comes with two events so a user can
be notified when a new message is received on the device or desktop
application.  These events are:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; Occurs when an incoming message is received&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public event &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;IncomingMessageEventHandler&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; IncomingMessage;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; Occurs when an error occurs in the listen thread&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public event &lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;ExceptionEventHandler&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
ListenException;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;These events are primarily called from the listening thread
discussed above.  These events are self explanatory and we will use them in the
sample applications discussed below.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;a class="" title="_Toc200772434" name="_Toc200772434"&gt;&lt;/a&gt;&lt;a class="" title="_Toc200771318" name="_Toc200771318"&gt;&lt;/a&gt;&lt;a class="" title="_Sharing_Code_Between" name="_Sharing_Code_Between"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size:16pt;line-height:115%;"&gt;­Sharing Code Between Platforms&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;A common way to share code between Windows Mobile and
Desktop applications is to build an assembly targeting the .NET Compact
Framework.  Since .NET Compact Framework assemblies are re-targetable, they can
be used in full .NET Framework applications without being recompiled. 
Unfortunately this is not the case with WCF because the .NET Framework
implementation of Microsoft.ServiceModel.Channels.Mail.dll is vastly different
to its .NET Compact Framework counterpart.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Luckily, the main source code files can be shared between the
desktop and device projects by adding the files as ‘Links’.  The following
image shows the files shared for the Photo Sharing application:&lt;/p&gt;

&lt;p class="MsoNormal" style="text-align:center;" align="center"&gt;&lt;img src="http://community.opennetcf.com/blogs/cf/200806/WCF%20Windows%20Mobile%20Exchange%20and%20NETCF_files/image001.jpg" border="0" height="229" width="169" alt="" /&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;a class="" title="_Toc200772436" name="_Toc200772436"&gt;&lt;/a&gt;&lt;a class="" title="_Toc200771320" name="_Toc200771320"&gt;&lt;/a&gt;&lt;a class="" title="_Toc200772435" name="_Toc200772435"&gt;&lt;/a&gt;&lt;a class="" title="_Dispatch_Application" name="_Dispatch_Application"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size:14pt;line-height:115%;"&gt;Dispatch Application&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size:14pt;line-height:115%;"&gt; Scenario&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;The Dispatch Application is used where a central dispatcher sends
out new requests to field service workers.  The solution consists of a desktop
application sending messages to and receiving messages from a Windows Mobile
application using Exchange Server 2007.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;a class="" title="_Toc200772437" name="_Toc200772437"&gt;&lt;/a&gt;&lt;a class="" title="_Toc200771321" name="_Toc200771321"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size:14pt;line-height:115%;"&gt;Desktop Implementation&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;The desktop application is the central dispatch controller and
sends new requests to the devices in the field.  The user interface is a very
simple implementation:&lt;/p&gt;

&lt;p class="MsoNormal" style="text-align:center;" align="center"&gt;&lt;img src="http://community.opennetcf.com/blogs/cf/200806/WCF%20Windows%20Mobile%20Exchange%20and%20NETCF_files/image002.jpg" id="Picture 12" border="0" height="300" width="366" alt="" /&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;To send a message to and from the device we define a class
that will represent the data we are sending back and forth.  We define the business
object using the DispatchMessage class as follows:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; Defines a dispatch message sent to field service workers&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; DispatchMessage&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; A unique identifier&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;Guid&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
Id { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;;
}&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; The current Status of the message&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;DispatchStatus&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; DispatchStatus { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; The customer name for the request&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public string&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
CustomerName { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;;
}&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; A description of the request&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public string&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
Request { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;;
}&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; The destination address of the request&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public string&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
Address { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;;
}&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;The DispatchMessage object will be added in between the &lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;Body&lt;/span&gt;
tags of the WCF message when sent and the XmlSerializerWrapper will handle
serializing and de-serializing the object.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;When the application loads, it creates a new
WCFMessagingManager and starts listening for messages.  When a new message is required,
the user fills in the appropriate fields and sends it off to the destination by
clicking on the “New Dispatch Message” button.  The code then dispatches the
message using the following code:&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;//Create
the dispatch message&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;DispatchMessage&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; dm = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;DispatchMessage&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;dm.Address =
txtAddress.Text;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;dm.CustomerName
= txtCustomerName.Text;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;dm.DispatchStatus
= &lt;span&gt;DispatchStatus&lt;/span&gt;.SentToServiceRep;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;dm.Id = &lt;span&gt;Guid&lt;/span&gt;.NewGuid();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;dm.Request =
txtRequest.Text;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;//Add
the dispatch message to the list&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;m_messagesSent.Add(dm);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;UpdateListbox();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 36pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;//Send
the message&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:36pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;m_messagingManager.SendMessage(txtServiceRep.Text,
&lt;span&gt;ChannelNames&lt;/span&gt;.ServerChannelName, dm);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:36pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;When the IncomingMessage event is raised, we update the
listbox on the main form with an update status from the device using the
following:&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt; void&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
m_messagingManager_IncomingMessage(&lt;span&gt;DispatchMessage&lt;/span&gt;
body)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.Invoke(&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;EventHandler&lt;/span&gt;(&lt;span style="color:blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color:blue;"&gt;object&lt;/span&gt;
sender, &lt;span&gt;EventArgs&lt;/span&gt; ea)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //find the message in the internal list&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
message = &lt;span style="color:blue;"&gt;from&lt;/span&gt; tmsg &lt;span style="color:blue;"&gt;in&lt;/span&gt;
m_messagesSent&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
tmsg.Id.Equals(body.Id)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; select&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
tmsg;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
(message.Count() == 1)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Update the dispatch status&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; message.First().DispatchStatus = body.DispatchStatus;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //add the item to the list&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; m_messagesSent.Add(body);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;  &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateListbox();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }));&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;a class="" title="_Toc200772438" name="_Toc200772438"&gt;&lt;/a&gt;&lt;a class="" title="_Toc200771322" name="_Toc200771322"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size:14pt;line-height:115%;"&gt;Windows Mobile Implementation&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;The Windows Mobile application listens for new customer
dispatch requests while out in the field.  The UI implementation again is very
simple and allows for the DispatchMessage object details to be displayed.&lt;/p&gt;

&lt;p class="MsoNormal" style="text-align:center;" align="center"&gt;&lt;img src="http://community.opennetcf.com/blogs/cf/200806/WCF%20Windows%20Mobile%20Exchange%20and%20NETCF_files/image003.jpg" id="Picture 15" border="0" height="320" width="241" alt="" /&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;When a message first arrives on the device, it will
automatically respond with a ‘DeviceConfirmReceipt’ status:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
m_messagingManager_IncomingMessage(&lt;span&gt;DispatchMessage&lt;/span&gt;
body)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.Invoke(&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span&gt;EventHandler&lt;/span&gt;(&lt;span style="color:blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color:blue;"&gt;object&lt;/span&gt;
sender, &lt;span&gt;EventArgs&lt;/span&gt; ea)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.statusBar1.Text
= &lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span&gt;&amp;quot;New
Message Received for {0}&amp;quot;&lt;/span&gt;,body.CustomerName);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Application&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.DoEvents();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;this&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.txtAddress.Text
= body.Address;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;this&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.txtCustomerName.Text
= body.CustomerName;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;this&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.txtRequest.Text
= body.Request;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;this&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.cmbStatus.Text
= body.DispatchStatus.ToString();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;this&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.txtId.Text
= body.Id.ToString();&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
(body.DispatchStatus