<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET Compact Framework Team : Author: Andrew Arnott</title><link>http://blogs.msdn.com/netcfteam/archive/tags/Author_3A00_+Andrew+Arnott/default.aspx</link><description>Tags: Author: Andrew Arnott</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Why .NET Compact Framework fails to call some HTTPS web servers</title><link>http://blogs.msdn.com/netcfteam/archive/2007/11/21/why-net-compact-framework-fails-to-call-some-https-web-servers.aspx</link><pubDate>Wed, 21 Nov 2007 19:57:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6457766</guid><dc:creator>andarno</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/netcfteam/comments/6457766.aspx</comments><wfw:commentRss>http://blogs.msdn.com/netcfteam/commentrss.aspx?PostID=6457766</wfw:commentRss><description>&lt;p&gt;On his blog, Andrew discusses &lt;a href="http://blogs.msdn.com/andrewarnottms/archive/2007/11/19/why-net-compact-framework-fails-to-call-some-https-web-servers.aspx"&gt;an HTTPS bug in NetCF that causes NetCF to throw a WebException&lt;/a&gt; when connecting to some servers, and its possible workarounds.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6457766" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/netcfteam/archive/tags/Author_3A00_+Andrew+Arnott/default.aspx">Author: Andrew Arnott</category></item><item><title>Reflections on having multiple versions of NetCF on your device</title><link>http://blogs.msdn.com/netcfteam/archive/2007/09/08/reflections-on-having-multiple-versions-of-netcf-on-your-device.aspx</link><pubDate>Sat, 08 Sep 2007 03:08:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4818704</guid><dc:creator>andarno</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/netcfteam/comments/4818704.aspx</comments><wfw:commentRss>http://blogs.msdn.com/netcfteam/commentrss.aspx?PostID=4818704</wfw:commentRss><description>&lt;p&gt;Andrew Arnott discusses &lt;a href="http://blogs.msdn.com/andrewarnottms/archive/2007/08/27/Reflections-on-having-multiple-versions-of-netcf-on-your-device.aspx"&gt;which versions of the .NET Compact Framework can be side-by-side installed, and which version will run your NetCF app&lt;/a&gt; on his blog.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4818704" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/netcfteam/archive/tags/Author_3A00_+Andrew+Arnott/default.aspx">Author: Andrew Arnott</category></item><item><title>The WCF subset supported by NetCF</title><link>http://blogs.msdn.com/netcfteam/archive/2007/09/08/the-wcf-subset-supported-by-netcf.aspx</link><pubDate>Sat, 08 Sep 2007 03:05:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4818665</guid><dc:creator>andarno</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/netcfteam/comments/4818665.aspx</comments><wfw:commentRss>http://blogs.msdn.com/netcfteam/commentrss.aspx?PostID=4818665</wfw:commentRss><description>&lt;p&gt;Andrew Arnott details &lt;a href="http://blogs.msdn.com/andrewarnottms/archive/2007/08/21/the-wcf-subset-supported-by-netcf.aspx"&gt;the features of WCF that are and are not supported by NetCF&lt;/a&gt; on his blog.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4818665" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/netcfteam/archive/tags/Author_3A00_+Andrew+Arnott/default.aspx">Author: Andrew Arnott</category></item><item><title>Why your NetCF apps fail to call some web services</title><link>http://blogs.msdn.com/netcfteam/archive/2007/02/01/why-your-netcf-apps-fail-to-call-some-web-services.aspx</link><pubDate>Thu, 01 Feb 2007 15:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1575797</guid><dc:creator>NetCFTeam</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/netcfteam/comments/1575797.aspx</comments><wfw:commentRss>http://blogs.msdn.com/netcfteam/commentrss.aspx?PostID=1575797</wfw:commentRss><description>&lt;P&gt;Here's the scenario: You are writing an NetCF app and trying to call a web service from that app.&amp;nbsp; You generated the code for the client proxy class using Visual Studio's "Add Web Reference" command.&amp;nbsp; Code is generated, you call into it, and you run your app.&amp;nbsp; The call fails with a cryptic error from the web service saying something about a malformed message.&amp;nbsp; If you try the same thing from a desktop app it works perfectly.&amp;nbsp; Sound familiar?&amp;nbsp; Read on for the reason and solution.&lt;/P&gt;
&lt;P&gt;I'll address the common cause of xml element mis-ordering here.&lt;/P&gt;
&lt;H1&gt;Background&lt;/H1&gt;
&lt;H2&gt;Web services and serializers&lt;/H2&gt;
&lt;P&gt;Calling web services involves serializing objects and sending the resulting xml to the web service, and deserializing the xml response back into objects.&amp;nbsp; This is usually totally transparent to the developer, who just invokes a method and the magic happens behind the scenes.&amp;nbsp; The serialized objects come from classes that are usually generated for you by Visual Studio or command-line tools like wsdl.exe or svcutil.exe.&amp;nbsp; They are constructed based on the service WSDL in such a way that their serialized format matches what the service is expecting, and such that they can be deserialized from the xml the service will respond with.&amp;nbsp; These classes are called "client proxy classes."&lt;/P&gt;
&lt;P&gt;Both the desktop .NET Framework and the .NET Compact Framework use the XmlSerializer class for serializing and deserializing these objects.&amp;nbsp; When using the WCF stack, the desktop framework will use their recently added DataContractSerializer instead of the XmlSerializer.&amp;nbsp; Both of these serializers rely on reflection to query the generated client proxy classes and to generate the required xml.&amp;nbsp; &lt;/P&gt;
&lt;H2&gt;Reflection&lt;/H2&gt;
&lt;P&gt;The .NET runtime does not ever care about the order a given type's elements are declared.&amp;nbsp; For example, the class:&lt;/P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Fruit {
   &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; seeds;
   &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; color;
}&lt;/PRE&gt;
&lt;P&gt;Is equivalent to &lt;/P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Fruit {
   &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; color;
   &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; seeds;
}&lt;/PRE&gt;
&lt;P&gt;This makes sense.&amp;nbsp; Unfortunately though, because of this when you use reflection to query the members of a type, the order of those members is &lt;A href="http://dotnetjunkies.com/WebLog/johnwood/archive/2005/06/28/128723.aspx" mce_href="http://dotnetjunkies.com/WebLog/johnwood/archive/2005/06/28/128723.aspx"&gt;not guaranteed to be in declaration order&lt;/A&gt;, or even to be consistent as you switch between versions of the .NET Framework.&amp;nbsp; In fact, the order in which reflection returns members did in fact change between versions 1.1 and 2.0 of the framework.&amp;nbsp; &lt;/P&gt;
&lt;H2&gt;How non-deterministic ordering affects web services&lt;/H2&gt;
&lt;P&gt;Because the serializers in .NET rely on reflection, they are affected by the non-deterministic ordering of members that reflection provides.&amp;nbsp; The order of elements serialized will change with whatever order reflection provides members in.&lt;/P&gt;
&lt;P&gt;The .NET designers anticipated this problem, and provided a way to force a specific ordering of serialized elements.&amp;nbsp; The xml serializer attributes that you can decorate your serializable classes with support an Order attribute that you can use to guarantee some desired ordering of elements.&amp;nbsp; For example, you could force the Fruit class used earlier to put &amp;lt;seeds&amp;gt; before &amp;lt;color&amp;gt; no matter what order reflection provides by changing the class to read like this:&lt;/P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Fruit {
   [XmlElementAttribute(Order=1)] &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; seeds;
   [XmlElementAttribute(Order=2)] &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; color;
}&lt;/PRE&gt;
&lt;P&gt;The attributes will retain the Order property's value regardless of reflection order, and that information can be used within the serializer to keep the order to the way the app developer intended.&lt;/P&gt;
&lt;H1&gt;The problem: why it "works" on desktop's framework&amp;nbsp;and not on NetCF&lt;/H1&gt;
&lt;P&gt;Although neither desktop nor NetCF's framework guarantees ordering, it so happens that desktop's serializer&amp;nbsp;preserves the order better than NetCF's.&amp;nbsp; Desktop's serializer isn't perfect either, but it's predictable enough that developers take its order for granted and then wonder why NetCF's serializer doesn't behave the same way.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Unfortunately, the wsdl.exe and Visual Studio IDE developers were among those developers that seem to have forgotten that ordering is not guaranteed unless explicitly defined, and so neither generate the code in the client proxy classes to set the Order properties necessary to guarantee the correct ordering.&amp;nbsp; It seems they assumed that declaration order is the default, since the desktop framework (mostly) works that way.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The wsdl.exe tool does offer an "/order" switch that will set order explicitly, but unfortunately this command line tool generates code that won't compile on NetCF projects because of the limited API exposed by NetCF.&amp;nbsp; &lt;/P&gt;
&lt;H1&gt;The workaround&lt;/H1&gt;
&lt;P&gt;So until the code is fixed in Visual Studio and/or wsdl.exe, you have a couple of options to get your NetCF projects to call these web services that require specific order:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Use &lt;STRONG&gt;wsdl.exe /order&lt;/STRONG&gt; to generate your client proxy class, and then remove all the code not supported by NetCF until your project compiles.&amp;nbsp; 
&lt;LI&gt;Use Visual Studio to generate your client proxy class, then run &lt;STRONG&gt;wsdl.exe /order&lt;/STRONG&gt; in some other directory, and copy just those lines of source code from the resulting class into your project source file that give the explicit ordering.&lt;/LI&gt;&lt;/OL&gt;
&lt;H1&gt;The ultimate fix&lt;/H1&gt;
&lt;P&gt;There are a few fixes I'm personally working on to help alleviate this inconvenience for app developers.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;I'm trying to get Visual Studio Orcas to include explicit ordering for all generated proxy client classes. 
&lt;LI&gt;I have changed NetCF's XmlSerializer to preserve declaration order serialization as closely as possible (still not guaranteed).&amp;nbsp; You'll have to be running on NetCF 2.0 SP2 or later to get this fix.&amp;nbsp; 
&lt;LI&gt;The svcutil.exe tool (which deprecates wsdl.exe) automatically generates explicit ordering code where required with no extra steps for the app developer.&lt;/LI&gt;&lt;/OL&gt;
&lt;H1&gt;Summary&lt;/H1&gt;
&lt;P&gt;The XmlSerializer cannot guarantee&amp;nbsp;element order&amp;nbsp;either on desktop .NET Framework or the .NET Compact Framework unless the developer gives the order explicitly, although in some cases the "default" ordering will behave as you expect and in some cases it won't.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The bottom line: where element order is important, &lt;STRONG&gt;use XmlElementAttribute.Order&lt;/STRONG&gt;, XmlArrayAttribute.Order, and the other ordering attributes as necessary.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1575797" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/netcfteam/archive/tags/Author_3A00_+Andrew+Arnott/default.aspx">Author: Andrew Arnott</category></item><item><title>NetCF 3.5's Finalizer Log</title><link>http://blogs.msdn.com/netcfteam/archive/2006/12/18/NetCF-3.5_2700_s-Finalizer-Log.aspx</link><pubDate>Mon, 18 Dec 2006 22:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:781103</guid><dc:creator>NetCFTeam</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/netcfteam/comments/781103.aspx</comments><wfw:commentRss>http://blogs.msdn.com/netcfteam/commentrss.aspx?PostID=781103</wfw:commentRss><description>The .NET Compact Framework has had several loggers (error, interop, loader, and networking) in previous versions.  NetCF 3.5 introduces the finalizer logger, which is useful for performance tuning your app by identifying which objects are not being Dispose()'d before being discarded for the garbage collector.  This post discusses this logger, how to enable it, use it, and it's file format....(&lt;a href="http://blogs.msdn.com/netcfteam/archive/2006/12/18/NetCF-3.5_2700_s-Finalizer-Log.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=781103" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/netcfteam/archive/tags/Author_3A00_+Andrew+Arnott/default.aspx">Author: Andrew Arnott</category></item><item><title>Platform detection III: How to detect a touch screen on Windows CE in .NET CF</title><link>http://blogs.msdn.com/netcfteam/archive/2006/10/02/Platform-detection-III_3A00_-How-to-detect-a-touch-screen-on-Windows-CE-in-.NET-CF.aspx</link><pubDate>Mon, 02 Oct 2006 20:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:781094</guid><dc:creator>NetCFTeam</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/netcfteam/comments/781094.aspx</comments><wfw:commentRss>http://blogs.msdn.com/netcfteam/commentrss.aspx?PostID=781094</wfw:commentRss><description>Pocket PC's have touch screens.  Smartphones don't.  While it is straightforward to determine which of these a Windows Mobile device is, there are Windows CE devices that are neither.  Some may offer touch screens while others don't.  Since a touch screen is really what you may be after (to determine whether you can expect a user to click somewhere on the screen, for example), the better long-term solution would be to check for the touch screen itself.  We can't assume that a future version of Windows Mobile won't change the distinctions that currently exist.  Here I will discuss ways you can do your own detection....(&lt;a href="http://blogs.msdn.com/netcfteam/archive/2006/10/02/Platform-detection-III_3A00_-How-to-detect-a-touch-screen-on-Windows-CE-in-.NET-CF.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=781094" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/netcfteam/archive/tags/Author_3A00_+Andrew+Arnott/default.aspx">Author: Andrew Arnott</category></item><item><title>Platform detection II: Is your app running on Smartphone or Pocket PC?</title><link>http://blogs.msdn.com/netcfteam/archive/2006/09/22/766343.aspx</link><pubDate>Fri, 22 Sep 2006 19:24:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:766343</guid><dc:creator>NetCFTeam</dc:creator><slash:comments>28</slash:comments><comments>http://blogs.msdn.com/netcfteam/comments/766343.aspx</comments><wfw:commentRss>http://blogs.msdn.com/netcfteam/commentrss.aspx?PostID=766343</wfw:commentRss><description>&lt;p&gt;While both Smartphones and Pocket PCs are based on Windows Mobile, there are some very important differences for developers who are targeting both platforms.&amp;nbsp; Not the least of which are lack of LinkButtons and other clickable elements on Smartphones (since they have no touch screen).&amp;nbsp; In this post I show how to detect whether your app is running on a Smartphone or a Pocket PC style Windows Mobile device.&lt;/p&gt; &lt;p&gt;It is a simple call to SystemParametersInfo to find whether you are running on a Smartphone or a Pocket PC.&amp;nbsp; You need a few constants defined and the P/Invoke marshaling code to make it work from managed code however.&lt;/p&gt; &lt;p&gt;This post builds on the &lt;a href="https://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx"&gt;first post in the Platform Detection series&lt;/a&gt;.&amp;nbsp; You'll need to build on the code from that post for this post to compile and run.&amp;nbsp; Like the last post, this code uses partial classes, so you can copy and paste the previous post's code into one file and this code into another (removing the first post's Main method) and your project will compile and run.&lt;/p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Win32;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; PlatformDetection
{
    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PInvoke
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetPlatformType()
        {
            StringBuilder platformType = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(50);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (SystemParametersInfo4Strings((&lt;span class="kwrd"&gt;uint&lt;/span&gt;)SystemParametersInfoActions.SPI_GETPLATFORMTYPE,
                (&lt;span class="kwrd"&gt;uint&lt;/span&gt;)platformType.Capacity, platformType, 0) == 0)
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Error getting platform type."&lt;/span&gt;);
            &lt;span class="kwrd"&gt;return&lt;/span&gt; platformType.ToString();
        }
    }
    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PlatformDetection
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsSmartphone()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; PInvoke.GetPlatformType() == &lt;span class="str"&gt;"SmartPhone"&lt;/span&gt;;
        }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsPocketPC()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; PInvoke.GetPlatformType() == &lt;span class="str"&gt;"PocketPC"&lt;/span&gt;;
        }
    }
    &lt;span class="kwrd"&gt;class&lt;/span&gt; PlatformProgram
    {
        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; platform;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (PlatformDetection.IsSmartphone())
                platform = &lt;span class="str"&gt;"Smartphone"&lt;/span&gt;;
            &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (PlatformDetection.IsPocketPC())
                platform = &lt;span class="str"&gt;"Pocket PC"&lt;/span&gt;;
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
                platform = &lt;span class="str"&gt;"Other WinCE"&lt;/span&gt;;
            MessageBox.Show(&lt;span class="str"&gt;"Platform: "&lt;/span&gt; + platform);
        }
    }

}&lt;/pre&gt;
&lt;p&gt;This is the second post in a series of three on platform detection.&amp;nbsp; Coming up next: detecting the presence of a touch screen.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=766343" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/netcfteam/archive/tags/Author_3A00_+Andrew+Arnott/default.aspx">Author: Andrew Arnott</category></item><item><title>Platform detection I: How to detect that your app is running in the emulator</title><link>http://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx</link><pubDate>Sat, 16 Sep 2006 02:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:756755</guid><dc:creator>NetCFTeam</dc:creator><slash:comments>27</slash:comments><comments>http://blogs.msdn.com/netcfteam/comments/756755.aspx</comments><wfw:commentRss>http://blogs.msdn.com/netcfteam/commentrss.aspx?PostID=756755</wfw:commentRss><description>When you develop your Windows CE or Windows Mobile application in .NET Compact Framework, you probably do a lot of testing on the Microsoft Device Emulators for Smartphone and Pocket PC.  Here I describe how to detect whether your program is running on an emulator or a physical device....(&lt;a href="http://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=756755" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/netcfteam/archive/tags/Author_3A00_+Andrew+Arnott/default.aspx">Author: Andrew Arnott</category></item></channel></rss>