<?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>All About Interop : .NET</title><link>http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx</link><description>Tags: .NET</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Many many LINQ Providers</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/12/many-many-linq-providers.aspx</link><pubDate>Fri, 12 Sep 2008 18:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8945843</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8945843.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8945843</wfw:commentRss><description>&lt;P&gt;When LINQ shipped, it included a provider model, to encourage people to make other systems and data stores accessible from the coolness-that-is-LINQ.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Back in February, Charlie Calvert published a&amp;nbsp; &lt;A class="" href="http://blogs.msdn.com/charlie/archive/2008/02/28/link-to-everything-a-list-of-linq-providers.aspx" mce_href="http://blogs.msdn.com/charlie/archive/2008/02/28/link-to-everything-a-list-of-linq-providers.aspx"&gt;long list of&amp;nbsp;LINQ providers&lt;/A&gt;.&amp;nbsp; In July, Robert Shelton later&amp;nbsp;&lt;A class="" href="http://www.sheltonblog.com/archive/2008/07/11/list-of-linq-providers.aspx" mce_href="http://www.sheltonblog.com/archive/2008/07/11/list-of-linq-providers.aspx"&gt;reblogged it&lt;/A&gt;.&amp;nbsp; Charlie also has a &lt;A class="" href="http://blogs.msdn.com/charlie/archive/2006/10/05/Links-to-LINQ.aspx" mce_href="http://blogs.msdn.com/charlie/archive/2006/10/05/Links-to-LINQ.aspx"&gt;list of LINQ Links&lt;/A&gt;.&amp;nbsp; Nice to see.&amp;nbsp; By my count there are 33 different LINQ providers listed.&amp;nbsp; I'll bet there are more by now. &lt;/P&gt;
&lt;P&gt;You can also &lt;A class="" href="http://search.msn.com/results.aspx?q=linq+providers&amp;amp;form=QBRE3" mce_href="http://search.msn.com/results.aspx?q=linq+providers&amp;amp;form=QBRE3"&gt;search for more&lt;/A&gt;&amp;nbsp;on LINQ providers. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8945843" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Providers/default.aspx">Providers</category></item><item><title>Using the WSDL-First design approach with WCF services</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/05/using-the-wsdl-first-design-approach-with-wcf-services.aspx</link><pubDate>Fri, 05 Sep 2008 17:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8923642</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8923642.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8923642</wfw:commentRss><description>&lt;P&gt;Couple of helpful posts from the archives for you.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;If you are care about interop, then you probably want to use a contract-first or WSDL-first design for your web services.&amp;nbsp; In other words, you will not simply decorate server-side code annotations (in Java) or attributes (in .NET) and generate WSDL dynamically from that running code.&amp;nbsp; That approach works in demonstrations, but it does not lend itself to good interoperability in the long run. &lt;/P&gt;
&lt;P&gt;So you start with WSDL.&amp;nbsp; Since you are WCF-savvy, you are confining yourself to&amp;nbsp;&lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms733112.aspx"&gt;the subset of XML Schema that is friendly to WCF&lt;/A&gt;.&amp;nbsp; The restriction isn't too onerous, though, especially as it improves&amp;nbsp;interoperability significantly, and also simplifies your life since you don't have to read and understand all of the XML Schema spec!&amp;nbsp; Ok, so following those rules, you write the WSDL. And&amp;nbsp;then you generate from that WSDL the server-side stub code, and the client-side proxy code, using the web services toolkits of your choice.&amp;nbsp; On the .NET side, that toolkit is obviously WCF (and the tool itself is svcutil.exe); on the Java side, maybe the JAXWS reference implementation, or AXIS2, and so on.&amp;nbsp; But the trick is, the generated code on the .NET side is muy bueno if you write your WSDL following a few additional simple rules, which are not mentioned in the above linked doc. &lt;/P&gt;
&lt;P&gt;For example, if you want to pass a collection in your interface, and you will be using WCF on one or both ends of the wire, then you want to use an explicit complexType for the array in the WSDL/XSD.&amp;nbsp; This is not required by WSI Basic Profile, nor is it mentioned anywhere in the official WCF doc as far as I know.&amp;nbsp; Nonetheless, follow this rule for best results.&amp;nbsp; &amp;nbsp;Do not define your arrays with an element and a @maxOccurs="unbounded" attribute in your schema; if you do, you will get the XmlSerializer with WCF, rather than the DataContract serializer, and that is&amp;nbsp;probably not what you want.&amp;nbsp; More on this tip &lt;A class="" href="http://kjellsj.blogspot.com/2008/03/wcf-datacontractserializer-schema-rules.html" mce_href="http://kjellsj.blogspot.com/2008/03/wcf-datacontractserializer-schema-rules.html"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Also, use only one part in each wsdl:message (to comply with&amp;nbsp;WS-I Basic Profile) and set the message part attribute @name = "parameters" to make the messages document/literal wrapped, versus bare.&amp;nbsp; If you're not sure, you want wrapped.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Finally, another tip: when using collections in service interfaces (or more specifically, data contracts), you can use the svcutil.exe tool to specify that collections be represented in the generated .NET code as one of the Generic collection types, rather than a vanilla array.&amp;nbsp; This is done with the /collectionType option on the svcutil.exe command line.&amp;nbsp; See &lt;A class="" href="http://www.request-response.com/blog/PermaLink,guid,ff5fab81-affb-4b2b-aa67-c80bdfc86cbd.aspx" mce_href="http://www.request-response.com/blog/PermaLink,guid,ff5fab81-affb-4b2b-aa67-c80bdfc86cbd.aspx"&gt;this post&lt;/A&gt; for more detail on that idea. &lt;/P&gt;
&lt;P mce_keep="true"&gt;I think there might be a similar codegen hint on other web services toolkits but I could not find the right switch on AXIS2.&amp;nbsp; &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8923642" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category></item><item><title>Web services interop with WCF - Relevant Forum Questions</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/04/wcf-interop-forum-questions.aspx</link><pubDate>Thu, 04 Sep 2008 17:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8895668</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8895668.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8895668</wfw:commentRss><description>&lt;P&gt;I was just browsing the &lt;A href="http://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=118&amp;amp;SiteID=1"&gt;WCF forum&lt;/A&gt; on MSDN. Here's a summary of the recent interesting threads dealing with interop:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3790715&amp;amp;SiteID=1" mce_href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3790715&amp;amp;SiteID=1"&gt;How to map complex data types exposed by a J2EE web services, into a WCF client?&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3783287&amp;amp;SiteID=1" mce_href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3783287&amp;amp;SiteID=1"&gt;How to use connect from an AXIS 2 client to a WCF service using SSL?&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3790825&amp;amp;SiteID=1"&gt;How to transfer a Hashtable or Vector&lt;T&gt; over web services?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3338236&amp;amp;SiteID=1"&gt;How to transfer a Fault from WebLogic/Java to a WCF client&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3831985&amp;amp;SiteID=1&amp;amp;mode=1"&gt;How to tell svcutil.exe to use existing types when generating proxy classes&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3655359&amp;amp;SiteID=1"&gt;Contract-first design with WCF and the svcutil.exe tool (Generating service stubs)&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Check it out.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8895668" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/AXIS/default.aspx">AXIS</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Links/default.aspx">Links</category></item><item><title>How to Build REST apps on .NET using WCF</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/08/22/how-to-build-rest-apps-on-net-using-wcf.aspx</link><pubDate>Fri, 22 Aug 2008 19:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8888182</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8888182.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8888182</wfw:commentRss><description>&lt;FONT color=#1f497d&gt;
&lt;P&gt;There's a new screencast series on building services using the WCF part of .NET.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The first few are already available.&amp;nbsp; The first one is the basic "Hello World" example, the next couple cover REST: &amp;nbsp;&lt;/P&gt;
&lt;DIV style="MARGIN-LEFT: 0.5in"&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/posts/cliff.simpkins/Endpoint-Screencasts-Creating-Your-First-WCF-Service/" mce_href="http://channel9.msdn.com/posts/cliff.simpkins/Endpoint-Screencasts-Creating-Your-First-WCF-Service/"&gt;How to build a WCF Service using Visual Studio 2008, and .NET 3.5.&lt;/A&gt; (10 minutes)&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/posts/RobBagby/deCast-Creating-a-HI-REST-GET-Service-with-WCF-35/" mce_href="http://channel9.msdn.com/posts/RobBagby/deCast-Creating-a-HI-REST-GET-Service-with-WCF-35/"&gt;Creating a HI-REST GET Service with WCF 3.5 sp1&lt;/A&gt; (15 minutes)&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/posts/RobBagby/deCast-Consuming-a-HI-REST-GET-Service-From-Silverlight-2-Beta-2/" mce_href="http://channel9.msdn.com/posts/RobBagby/deCast-Consuming-a-HI-REST-GET-Service-From-Silverlight-2-Beta-2/"&gt;Consuming a HI-REST GET Service From Silverlight 2 (Beta 2)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/posts/rojacobs/endpointtv-Controlling-the-URI-in-RESTful-WCF-with-Rob-Bagby/"&gt;How to Shape the URI in REST services built on WCF&lt;/A&gt; (See also, the accompanying &lt;A href="http://blogs.msdn.com/endpoint/archive/2008/08/22/rest-in-wcf-part-ix-controlling-the-uri.aspx"&gt;blog post&lt;/A&gt;.)&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;There will be more to come, too, covering Content Negotiation, Atom, and more. Stay tuned!&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8888182" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx">REST</category></item><item><title>Content-Type negotiation and REST (and how WCF fits in)</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/28/content-type-negotiation-and-rest-and-how-wcf-fits-in.aspx</link><pubDate>Fri, 28 Mar 2008 23:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8342352</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8342352.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8342352</wfw:commentRss><description>&lt;FONT family="Calibri"&gt;&lt;SIZE=3&gt;
&lt;P&gt;Just had a comment-exchange on &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2008/03/20/how-to-build-a-rest-app-in-net-with-wcf.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/03/20/how-to-build-a-rest-app-in-net-with-wcf.aspx"&gt;my prior post on How to build a REST app in WCF&lt;/A&gt;. I thought I would reproduce and elaborate on it a bit here, in a post.&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://daptivate.com/" mce_href="http://daptivate.com/"&gt;Kyle Beyer&lt;/A&gt; asked how to make WCF honor a content-type header (Accept header) in the request, and then modify the result of the REST request based on that header.&amp;nbsp;At least that's what I think he's asking for. &lt;/P&gt;
&lt;P&gt;My response is basically this - In REST, the URI dictates the result.&amp;nbsp;&amp;nbsp; Roy Fielding, the guy who coined the term REST in his &lt;A class="" href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" mce_href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm"&gt;doctoral thesis&lt;/A&gt;, says&amp;nbsp;"&lt;A class="" href="http://tech.groups.yahoo.com/group/rest-discuss/message/5916" mce_href="http://tech.groups.yahoo.com/group/rest-discuss/message/5916"&gt;all important resources must have URIs.&lt;/A&gt;"&amp;nbsp; I am no REST expert, but I am inclined to agree with Roy's view on this. &lt;/P&gt;
&lt;P&gt;The issue of content-type negotiation within the realm of REST architectures is one that comes up often, but seems to me Fielding has been pretty consistent in saying that such negotiation is problematic and usually not very RESTful.&amp;nbsp; The URI/URL itself maps to a response, including the content type of the response.&amp;nbsp; In practice, you don't have a single URI that maps to a PDF file or an HTML file, depending on the Accept: header.&amp;nbsp;&amp;nbsp;You have two similar but distinct URIs, one for the PDF doc, and one for the HTML.&amp;nbsp; The information within the two documents may be equivalent from a human perspective, but they are two distinct resources.&amp;nbsp;&amp;nbsp;That's the REST model. &lt;/P&gt;
&lt;P&gt;If you have as a goal, is to have a single service that supports multiple content types from the same URL, I think that is not very RESTful.&amp;nbsp; At the very least, whether and how REST systems should perform content-type negotiation is not at all settled.&amp;nbsp; Not at all.&amp;nbsp; It would be very presumptuous of Microsoft to embed into WCF and the .NET Franework in general, a model for content-type negotiation in REST exchanges, without first obtaining formal or informal consensus on the matter via some sort of standard or at least agreement on the &lt;A class="" href="http://tech.groups.yahoo.com/group/rest-discuss/" mce_href="http://tech.groups.yahoo.com/group/rest-discuss/"&gt;REST discussion group&lt;/A&gt;. That would be a no-no!&amp;nbsp;&amp;nbsp; Not very polite.&lt;/P&gt;
&lt;P&gt;This does not discount the validity of the desire - I can see why people would want to have this capability.&amp;nbsp; What I am saying is that the&amp;nbsp;REST approach,&amp;nbsp;specified as it is today, does not encourage content-type negotiation.&amp;nbsp; A reasonable conclusion to the premise that "All important resources must have URIs" is that content-type negotiation just isn't done.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In &lt;A class="" href="http://tech.groups.yahoo.com/group/rest-discuss/message/5857" mce_href="http://tech.groups.yahoo.com/group/rest-discuss/message/5857"&gt;another spot&lt;/A&gt;, Fielding offers&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;We encourage resource owners to only use true content negotiation (without redirects) when the only difference between formats is mechanical in nature.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So I concede there is a gray area (or is it grey?).&amp;nbsp; Let's look at a practical example: suppose your URI is &lt;A href="http://server/Customer/18292"&gt;http://server/Customer/18292&lt;/A&gt; and you design your app so that if there is an Accept header that says "XML", the service delivers an XML doc of the customer data for the customer with ID 18292.&amp;nbsp; That data might include name, address, and so on.&amp;nbsp; &amp;nbsp; If the content-type says "application/x-javascript" then the service delivers a JSON serialization with the same information.&amp;nbsp; And finally if the Accept: header says image/jpeg, the service renders a photo of the customer. &lt;/P&gt;
&lt;P&gt;It seems like the first option is allowable - XML to JSON is a mechanical transformation.&amp;nbsp; But the third option (image/jpeg) seems to be outside the bounds of REST philosophy. That's not a mechanical transformation - it's a totally different resource.&lt;/P&gt;
&lt;P&gt;Today, WCF doesn't handle the first, the acceptable approach.&amp;nbsp; Today, when you use WCF to build a REST service, you specify the XML or JSON response type, not at runtime but in your application code, at compile time. It is possible to vary the content-type of the&amp;nbsp;response to a WCF request.&amp;nbsp; I'll work up an example of that soon.&amp;nbsp; But the easy path within the WCF REST framework is to NOT do content-type negotiation. The easy part&amp;nbsp;is to stuff the desired content-type in the URI itself.&amp;nbsp; For example. &lt;A href="http://server/Customer/18292/jpeg"&gt;http://server/Customer/18292/jpeg&lt;/A&gt; versus &lt;A href="http://server/Customer/18292/record"&gt;http://server/Customer/18292/record&lt;/A&gt; .&amp;nbsp;&amp;nbsp; If you think this is a huge issue with WCF, that is to say, you would like a single URI to return different content based on the Accept: header in the request, please let me know.&amp;nbsp; As I said earlier, I don't think we (Microsoft) can unilaterally make decisions on how WCF ought to behave on that issue, but it would be good for us to hear your concerns.&amp;nbsp; An additional option to you is to jump into that REST discussion group and hash this out with the community.&lt;/P&gt;
&lt;P&gt;Cheers!&lt;/P&gt;&lt;/SIZE&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8342352" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx">REST</category></item><item><title>Where were we 3 years ago? &amp;quot;Java apps don't interop with apps built on MS technology.&amp;quot;</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/28/where-were-we-3-years-ago-java-apps-interop-with-other-apps-from-all-vendors-but-ms.aspx</link><pubDate>Fri, 28 Mar 2008 21:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8342163</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8342163.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8342163</wfw:commentRss><description>&lt;FONT family="Calibri"&gt;&lt;SIZE=3&gt;
&lt;P&gt;Ha!&amp;nbsp; I wrote recently about the history of .NET Interop in the industry, and how perceptions in the industry have changed so much. &lt;/P&gt;
&lt;P&gt;I was looking for some old benchmark code (dirty little secret - I do not use a project management and code versioning system, but the more code I write, and the older I get, the more i need one. . . hmmm, do you think I could get a deal on Visual Studio's Team Foundation Server? hee hee)&amp;nbsp; anyway while I was looking for the old code, I came upon a text file containing an dialogue from an &lt;A class="" href="http://www.javalobby.org/java/forums/t18836.html?start=15" mce_href="http://www.javalobby.org/java/forums/t18836.html?start=15"&gt;old javalobby thread&lt;/A&gt;, from May 2005.&amp;nbsp;I participated in the thread as part of the run-up to JavaOne 2005, in which Microsoft was participating formally, with a booth, and some sessions, and so on (and yes, I was one of the 3 or 4 people from Microsoft who were going to be there.)&amp;nbsp; Here is one part that was written &lt;STRONG&gt;&lt;EM&gt;to me.&amp;nbsp; &lt;/EM&gt;&lt;/STRONG&gt;The context was around .NET, and why it is at least interesting to "Java developers" or devs who use Java primarily.&amp;nbsp; I had stated that interop was one key reason that .NET should be interesting to Java devs.&amp;nbsp; Here's what I got back: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#660066&gt;I think you're underestimating the size of the wall between MS and the rest of the development community.&amp;nbsp; The MS shops have little interest in interop, because they know it just won't work well. MS doesn't do interop. And the non-MS shops know that too, plus they know that they'd better not get tied to MS products anyway. Java apps interop with other apps from all vendors but MS. That's plenty.&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;"Microsoft doesn't do interop." &amp;nbsp;&amp;nbsp; Customers "know it just won't work well."&amp;nbsp; Wow.&amp;nbsp; Three short years ago.&amp;nbsp;&amp;nbsp; Also the statement "Java apps interop with other apps from all vendors but MS" -&amp;nbsp;(by which I think he meant "Java apps don't interop with apps built on MS technology."&amp;nbsp;&amp;nbsp;&amp;nbsp; All of this is just nutty. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Here's another excerpt from that thread, where my counterpart in the dialogue attempts to make a distinction between "good interop", which is supported just for interop's sake, and "bad interop", which is supported in order for a company to make money.&amp;nbsp; Put aside for a moment whether that distinction is a valid one.&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE border="1"&gt;
&lt;P mce_keep="true"&gt;&lt;FONT color=#660066&gt;&lt;STRONG&gt;dubious&lt;/STRONG&gt;: I'm singularly unconvinced that [Microsoft] really give a flying fark about &lt;I&gt;true&lt;/I&gt; "interoperability," but want to use "interoperability" as a bludgeon to try and increase their market share.&lt;/FONT&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Dino&lt;/STRONG&gt;: My real question is, what is the practical difference between "true interoperability" and interoperability pursued for the sake of gaining market share, or revenue, or profit? &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#660066&gt;&lt;STRONG&gt;dubious&lt;/STRONG&gt;: The practical difference is that "true interoperability" really does make things interoperate. To say that Word now lets you save documents in XML, but it's just a proprietary format wrapped in XML tags, that's not true interoperability.&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Dino&lt;/STRONG&gt;: I'd like to understand this. XML is extensible, right? That means, anyone can define a schema, based on the extensibility rules for XML. Anyone can name their schema, publish it, and then invite others to read and use it. this is what Microsoft did with WordProcessingML, effectively. Or am I wrong on this? 
&lt;P&gt;The WordProcessingML that MS-Word can save to or load from - it is a schema defined and licensed by MS. It is &lt;A class="" href="http://en.wikipedia.org/wiki/Reasonable_and_Non_Discriminatory_Licensing" mce_href="http://en.wikipedia.org/wiki/Reasonable_and_Non_Discriminatory_Licensing"&gt;RAND&lt;/A&gt; today, and also free, but not guaranteed to be free forever. It is undeniably "proprietary" in the sense that MS owns the IP. It is not an OASIS or W3C standard. But it is available for anyone to use, if they agree to the license. &lt;FONT color=red&gt;&lt;I&gt;[side note: as of 2008, the &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/aa212812(office.11).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa212812(office.11).aspx"&gt;WordProcessingML&lt;/A&gt; has been included in the &lt;A class="" href="http://www.microsoft.com/interop/osp/default.mspx" mce_href="http://www.microsoft.com/interop/osp/default.mspx"&gt;Open Specification Promise&lt;/A&gt;, which as I have &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2006/10/31/use-office-2003-xml-schema-no-worries.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2006/10/31/use-office-2003-xml-schema-no-worries.aspx"&gt;noted previously&lt;/A&gt;, goes way beyond RAND]&lt;/I&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;... Is this interop? "True interop"? or is it the other kind, the bad kind? &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#660066&gt;&lt;STRONG&gt;dubious&lt;/STRONG&gt;: Again, I don't know details, so maybe it is true interop, I don't know. But I absolutely will not trust it, even if it is true interop. &lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This is how things &lt;I&gt;really were&lt;/I&gt;. And this was only 3 short years ago.&amp;nbsp; The guy refused to grant one inch on the "Microsoft does interoperability" issue.&amp;nbsp; Even in the face of countervaling facts, he gripped his opinions ever more strongly.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Getting back to the premise, that there is a distinction between "good" and "bad" interoperability... Let me say that I ascribe to the capitalist philosophy.&amp;nbsp; I believe that companies do what they do in order to make more money.&amp;nbsp; A corollary of that is that "interop just for interop's sake" is an idea that no real company pursues.&amp;nbsp;&amp;nbsp;Another corollary is, "it's not bad to make money, by delivering interop."&amp;nbsp;&amp;nbsp; This is just capitalism. &amp;nbsp;So I don't accept the premise that interop can be "good" or "bad".&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Thinking about it now, I guess maybe using a thread from a javalobby forum isn't the best example. The forums there are the birthplace of many flamewars. It seems like the participants view it as good sport. Probably safe to assume that the participants there are not representative of the broader development community. But, I will say.. my perspective was that I saw lots more incredulity than was justified around Microsoft interop capabilities , and not just at javalobby. &lt;/P&gt;
&lt;P&gt;There's a guy I know, a really bright guy, sharp technologist and a very successful software entrepreneur. He knows his stuff. He &lt;I&gt;cannot believe&lt;/I&gt; that I have a Windows XP machine running IIS on the internet. (actually I have several)&amp;nbsp; They have been running for maybe 5 years this way. Even today this guy cannot believe it. He laughs when I tell him. He thinks I'm an idiot. He is certain that the only reason the machines haven't been hacked (ever) is that they haven't been found yet. &lt;/P&gt;
&lt;P&gt;But I have the IIS logs that show the machines have been sniffed. I have the urlscan logs that show they get probed regularly. I'm a little hesitant to even *say* "those machines have never been hacked", because it seems like threatening fate. I know that all software is vulnerable, and it's just a matter of time and effort for any machine, any operating system. So I'm not daring anyone, not explicitly anyway, to just &lt;I&gt;go ahead and try&lt;/I&gt; to hack my WinXP "servers". But the point is, they have been out there for a long long time, and&amp;nbsp;I haven't had a breech yet. &lt;/P&gt;
&lt;P&gt;Some people will never change their minds. They learn something once, and it stays forever.&amp;nbsp; They have write-only storage in their brains.&amp;nbsp; Once they "know" something, regardless how it came to be that they "know it", things don't change. They never re-examine.&amp;nbsp; Obviously this is not a blanket statement.&amp;nbsp; A person can be close-minded about some things and open-minded about others.&amp;nbsp;The software entrepreneur I spoke of, he's learned a ton as he built successful software companies, one after the other.&amp;nbsp; He's open minded about business.&amp;nbsp; But he's not about Windows security.&amp;nbsp; In the same way some people are just not open-minded about interop, regardless what the facts say. &lt;/P&gt;
&lt;P&gt;Hmmm, do I sound defensive lately?&amp;nbsp;&amp;nbsp; Maybe my &lt;A class="" href="http://en.wikipedia.org/wiki/Biorhythm" mce_href="http://en.wikipedia.org/wiki/Biorhythm"&gt;biorhythms&lt;/A&gt; are in a downcycle.&lt;/P&gt;
&lt;P&gt;The good news is that over time, the skew between the perception and reality on .NET interop capabilities, has lessened.&amp;nbsp; Thanks be to Scott McNealy!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/SIZE&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8342163" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/OSP/default.aspx">OSP</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/History/default.aspx">History</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WordML/default.aspx">WordML</category></item><item><title>Hanselman survey of web2.0 APIs for .NET</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/28/hanselman-survey-of-web2-0-apis-for-net.aspx</link><pubDate>Fri, 28 Mar 2008 12:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8341309</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8341309.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8341309</wfw:commentRss><description>&lt;P&gt;Hanselman does a &lt;A class="" href="http://www.hanselman.com/blog/TheWeeklySourceCode22CAndVBNETLibrariesToDiggFlickrFacebookYouTubeTwitterLiveServicesGoogleAndOtherWeb20APIs.aspx" mce_href="http://www.hanselman.com/blog/TheWeeklySourceCode22CAndVBNETLibrariesToDiggFlickrFacebookYouTubeTwitterLiveServicesGoogleAndOtherWeb20APIs.aspx"&gt;whilrwind tour&lt;/A&gt; of the various popular web2.0 systems that have C# or .NET APIs. &lt;/P&gt;
&lt;P&gt;In my book, this is all interop.&lt;/P&gt;
&lt;P&gt;What makes it all possible?&amp;nbsp; First: &amp;nbsp;cool, interesting, programmable services.&amp;nbsp; I don't have high value scenarios for programming Picasa, or Twitter, but apparently &lt;EM&gt;somebody does&lt;/EM&gt;.&amp;nbsp;&amp;nbsp; And ... Second, .NET is interoperable.&amp;nbsp; It works with XML , with JSON, with HTTP and so on.&amp;nbsp; For those of you who have been using .NET for a while, this is no surprise. In fact it sounds inane to you, that I keep saying ".NET is interoperable"&amp;nbsp;;&amp;nbsp; But listen, it wasn't that long ago....&lt;/P&gt;
&lt;P&gt;All the connections we're seeing these days are beautiful. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8341309" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/web2.0/default.aspx">web2.0</category></item><item><title>A Look back at the History of .NET Interop </title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/27/a-look-back-at-net-interop-history.aspx</link><pubDate>Thu, 27 Mar 2008 20:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8337260</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8337260.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8337260</wfw:commentRss><description>&lt;P&gt;Check out the last few weeks worth of blog posts here.&amp;nbsp; One on .NET and Google's Social Graph API.&amp;nbsp; Another on .NET connecting to OpenID.&amp;nbsp; Another on JSON, another on JMS. &lt;/P&gt;
&lt;P&gt;When I started this blog, there were people out there who &lt;EM&gt;knew&lt;/EM&gt;, they were certain, that .NET apps could not connect to systems built with non .NET technology, or could not connect to systems built with non-Microsoft technology.&amp;nbsp; This was accepted as fact.&amp;nbsp; I spoke with customers daily who accepted this view as the truth.&amp;nbsp; It was looney.&amp;nbsp; I spoke with these people, explained that .NET could connect to the system they had running in their data centers right then, and they did not believe me.&amp;nbsp; The only way I could convince them of what I was saying, was to build the prototypes and proof-of-concept systems.&amp;nbsp; Even then, people were incredulous.&amp;nbsp; When I connected systems together, people looked at me like I had done something mystical.&amp;nbsp;I remember telling people that the XML libraries in .NET supported XML namespaces, and they flatly did not believe me.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;How did it get that way?&amp;nbsp; I think mostly because of the dear Scott McNealy and his stagecraft.&amp;nbsp; Remember him?&amp;nbsp; Founder of Sun Microsystems and longtime industry blowhard.&amp;nbsp; He blasted .NET, repeatedly.&amp;nbsp; Every chance he got.&amp;nbsp; There was a brief period when he claimed that the XML that was produced by .NET apps was "proprietary."&amp;nbsp;&amp;nbsp; And the tech press ate this stuff up.&amp;nbsp; It sold magazines.&amp;nbsp; The kind of claims he made - they were so kooky to me, but the press accepted it.&amp;nbsp;This was a billionaire&amp;nbsp;CEO, someone with a ton of charisma, and when he said .NET produced "proprietary XML", nobody bothered to ask "what they hell does &lt;EM&gt;that &lt;/EM&gt;mean?"&amp;nbsp;&amp;nbsp;&amp;nbsp; They just printed it.&amp;nbsp; And then people read it, and believed it.&amp;nbsp; That was reality.&amp;nbsp; So, off to work I went - building prototypes and proving interop was real, and that XML was just XML.&amp;nbsp; &amp;nbsp; &lt;/P&gt;
&lt;P&gt;Scott is now out of the picture, I don't know what he is doing now, I'm sure it's something beautiful - do I recall that he wanted to just enjoy his kids?&amp;nbsp; Well, he's earned it.&amp;nbsp; But the fact is, he is not talking, and he is certainly not talking about .NET as a dead-end lock-in technology for Windows-only shops.&amp;nbsp; With McNealy's mouth no longer a factor in the industry, all the little mini-me's also evaporated.&amp;nbsp; All the people that made a living just repeating McNealy's bon mots disappeared, I guess they are now making honest livings somewhere.&amp;nbsp; The demagoguery in general has waned, and now&amp;nbsp;customers believe what they see, rather than what they hear or read.&amp;nbsp; Now when I say that .NET does JSON, nobody stands up and expresses disbelief.&amp;nbsp; It's years now that people have been building .NET systems that connect to everything under the sun.&amp;nbsp; Interop happens. People know it works now.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;It's this kind of thing that makes me start to think that a blog dedicated to .NET-Interop, ...ah...maybe it has lived past its usefulness? &amp;nbsp; I mean, come on now.&amp;nbsp;Does anyone doubt interop these days? &lt;/P&gt;
&lt;P&gt;Still, though, I find the novel combinations of systems to be intriguing and thought-provoking, so I'm going to continue writing about interop, exploring different angles, building proofs of concept, and so on.&lt;/P&gt;
&lt;P&gt;Cheers!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8337260" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/History/default.aspx">History</category></item><item><title>Google Social Graph API via C#</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/26/google-social-graph-api-via-c.aspx</link><pubDate>Wed, 26 Mar 2008 19:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8337188</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8337188.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8337188</wfw:commentRss><description>&lt;P&gt;Here's something different for a blog that generally focuses on enterprisey technologies. A .NET guy in Denmark built a C# wrapper on Google's Social Graph API.&amp;nbsp; The Social Graph API exposes its data in JSON only; I guess it is designed to be consumed by web pages.&amp;nbsp; This dev put a C# wrapper together that can be used in any .NET app, including in code-behind in ASP.NET pages. &lt;/P&gt;
&lt;P&gt;Check it out. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blog.madskristensen.dk/post/Build-your-online-social-graph.aspx" mce_href="http://blog.madskristensen.dk/post/Build-your-online-social-graph.aspx"&gt;http://blog.madskristensen.dk/post/Build-your-online-social-graph.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8337188" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Google/default.aspx">Google</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/JSON/default.aspx">JSON</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/web2.0/default.aspx">web2.0</category></item><item><title>How to Build a REST app in .NET (with WCF)</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/20/how-to-build-a-rest-app-in-net-with-wcf.aspx</link><pubDate>Thu, 20 Mar 2008 21:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8327651</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>15</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8327651.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8327651</wfw:commentRss><description>&lt;FONT face=Calibri&gt;&lt;SIZE=3&gt;
&lt;P&gt;My &lt;A href="http://blogs.msdn.com/dotnetinterop/archive/2008/03/18/how-to-build-a-rest-app-in-net-not.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/03/18/how-to-build-a-rest-app-in-net-not.aspx"&gt;prior post&lt;/A&gt; talked about how NOT to write a REST app in .NET. I mentioned WCF as the preferred option. In this post, I'll describe the steps for how &lt;EM&gt;you should&lt;/EM&gt; do it. &lt;/P&gt;
&lt;H3&gt;Some background&lt;/H3&gt;
&lt;P&gt;First up, you should use &lt;A href="http://msdn2.microsoft.com/en-us/library/ms735119.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms735119.aspx"&gt;WCF&lt;/A&gt; to build your REST app. WCF is the &lt;B&gt;Windows Communication Foundation&lt;/B&gt;. (&lt;EM&gt;Microsoft has such a strong &lt;A href="http://encarta.msn.com/dictionary_/penchant.html" mce_href="http://encarta.msn.com/dictionary_/penchant.html"&gt;penchant&lt;/A&gt; for creating acronyms, that there are &lt;A href="http://www.ewbi.com/mlomsa/" mce_href="http://www.ewbi.com/mlomsa/"&gt;web sites dedicated solely to cataloging them.&lt;/A&gt; &lt;/EM&gt;) WCF is part of the .NET Framework, first added in .NET 3.0. WCF is used by applications developers when building apps that communicate, whether using REST, SOAP, or something else. These days, most applications need to communicate. &lt;/P&gt;
&lt;P&gt;The basic metaphor in WCF is that &lt;EM&gt;services&lt;/EM&gt; receive and respond to incoming communication, and clients initiate those communications. The communication is modeled as an &lt;B&gt;interface&lt;/B&gt; in code, and the service is a &lt;B&gt;class&lt;/B&gt; or type that implements that interface. Services run within a &lt;B&gt;host&lt;/B&gt; on any Windows computer - a desktop, laptop or a big server machine. You can also run services on Windows Mobile devices like smart phones! &lt;/P&gt;
&lt;P&gt;Therefore for any WCF app, you need a service interface, a service implementation, and a host. &lt;/P&gt;
&lt;P&gt;We'll be building a REST service - an application that receives and understands HTTP GET Requests according to the REST pattern. &lt;/P&gt;
&lt;H3&gt;No Visual Studio required&lt;/H3&gt;
&lt;P&gt;Contrary to what you may believe, you do not need to have Visual Studio in order to build .NET applications, including WCF applications. But all of the posts I have seen on the topic assume Visual Studio. VS2008 is the commercial application developer's tool that Microsoft sells; the 2008 version includes some nice WCF design and development tools. It is by far the easiest way to build a WCF app; using VS2008 to build WCF apps also allows you to take advantage of other Visual Studio goodies like unit testing, Intellisense, debugging, profiling, and so on. I highly recommend it. If, however, you just want to get something done quickly and you don't have and don't want to pay for the commercial tool, you can also build WCF apps using a text editor (like emacs), and the command line tools included in the .NET SDK (a free download). In this post, I will show you how. &lt;/P&gt;
&lt;H3&gt;Hosting a WCF Service&lt;/H3&gt;
&lt;P&gt;WCF provides various options when it comes to hosting a service. These options are: 
&lt;OL&gt;
&lt;LI&gt;"Self hosted" - within a Console or Windows Forms application.&lt;/LI&gt;
&lt;LI&gt;Hosted within IIS&lt;/LI&gt;
&lt;LI&gt;As a Windows Service&lt;/LI&gt;
&lt;LI&gt;Hosted within Windows Activation Service. This option was added with IIS7, available in Windows Vista or Windows Server 2008. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;You can read more about these options, and how to choose between them, &lt;A href="http://msdn2.microsoft.com/en-us/library/ms730158.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms730158.aspx"&gt;here&lt;/A&gt;. &lt;/P&gt;
&lt;H3&gt;My Recommendation: Do your WCF Prototype work in a self-hosted app.&lt;/H3&gt;
&lt;P&gt;If you are developing an application to prototype some ideas, then you probably want the simplest environment possible. This, for me, is often the self-hosted route - it gives me the most control and the lightweight approach I need. Hosting WCF services within IIS can also be a lightweight approach. For this post, though, I'm going to show you how to write a WCF app that is self-hosted in a console EXE. This way you can use the console output as a diagnostic tool while tweaking and tuning the app. You can start it and stop it manually. It's easy and accessible. &lt;/P&gt;
&lt;P&gt;There is a nifty WCF Service Host that is included as part of Visual Studio 2008, called &lt;A href="http://msdn2.microsoft.com/en-us/library/bb552363.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bb552363.aspx"&gt;WcfSvcHost.exe&lt;/A&gt;. This is a Windows Forms app that hosts any WCF service you create. It collapses into the system tray, it's got some nice usability features. On the other hand, (1) I'm presuming no Visual Studio, so you don't have WcfSvcHost.exe, dear reader. And (2), this hosting app doesn't give me the control I want. [&lt;EM&gt;In particular, it does not give me control over how to handle errors in the service layer, which is something I really want.&lt;/EM&gt;]&lt;/P&gt;
&lt;P&gt;Rolling your own host for a WCF service is a pretty simple affair. Here's my code to do it. &lt;/P&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red0\green128\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs20 \cf1 namespace\cf0  ionic.samples.WcfRest\par ??\{\par ??\par ??    \cf4 // console-based app to Host the WCF / REST service \par ??\cf0     \cf1 public\cf0  \cf1 class\cf0  \cf5 ConsoleServiceHost\par ??\cf0     \{\par ??        \cf1 public\cf0  \cf1 static\cf0  \cf1 void\cf0  Main()\par ??        \{\par ??            \cf1 string\cf0  addressRoot = \cf6 "http://localhost:8080/"\cf0 ;\par ??\par ??            \cf4 // get the type we are hosting \par ??\cf0             System.\cf5 Type\cf0  t1 = \cf1 typeof\cf0 (ionic.samples.WcfRest.NorthwindDataService);\par ??\par ??            \cf4 // Create a new ServiceHost to start and stop the service \par ??\cf0             \cf4 // (The URI specified here is used for MEX inquiries)\par ??\cf0             System.ServiceModel.ServiceHost serviceHost1 =\par ??                \cf1 new\cf0  System.ServiceModel.ServiceHost(t1, \cf1 new\cf0  System.Uri(addressRoot)); \par ??\par ??            \cf4 // Create the REST binding\par ??\cf0             System.ServiceModel.WebHttpBinding restBinding = \cf1 new\cf0  System.ServiceModel.WebHttpBinding();\par ??\par ??            \cf4 // Create the REST endpoint.  We need to do this explicitly in order to add a custom behavior to it. \par ??\cf0             \cf1 var\cf0  restEndPoint =\par ??                \cf1 new\cf0  System.ServiceModel.Description.ServiceEndpoint\par ??                    (System.ServiceModel.Description.ContractDescription.GetContract(\cf1 typeof\cf0 (ionic.samples.WcfRest.IDataService)),\par ??                    restBinding,\par ??                    \cf1 new\cf0  System.ServiceModel.EndpointAddress(addressRoot + \cf6 "rest"\cf0 ));\par ??\par ??            \cf4 // Add a customm behavior to the REST endpoint\par ??\cf0             restEndPoint.Behaviors.Add(\cf1 new\cf0  ionic.samples.WcfRest.FaultingWebHttpBehavior());\par ??\par ??            \cf4 // Add the endpoint to the service\par ??\cf0             serviceHost1.Description.Endpoints.Add(restEndPoint);\par ??\par ??            \cf4 // Open the ServiceHost to create listeners and start listening for messages\par ??\cf0             serviceHost1.Open();\par ??            System.\cf5 Console\cf0 .WriteLine(\cf6 "Service implementation: "\cf0  + t1.ToString());\par ??            System.\cf5 Console\cf0 .WriteLine(\cf6 "The service is ready."\cf0 );\par ??            System.\cf5 Console\cf0 .WriteLine(\cf6 "Service Address: "\cf0  + addressRoot + \cf6 "rest"\cf0 );\par ??            System.\cf5 Console\cf0 .WriteLine();\par ??            System.\cf5 Console\cf0 .WriteLine(\cf6 "Press &amp;lt;ENTER&amp;gt; to terminate the service."\cf0 );\par ??            System.\cf5 Console\cf0 .WriteLine();\par ??            System.\cf5 Console\cf0 .ReadLine();\par ??\par ??            \cf4 // Close to shutdown the service\par ??\cf0             serviceHost1.Close();\par ??        \}\par ??    \}\par ??\}}
--&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; FONT-SIZE: 10pt; BACKGROUND: white; BORDER-LEFT: windowtext 1pt solid; COLOR: black; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt; ionic.samples.WcfRest&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// console-based app to Host the WCF / REST service &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;ConsoleServiceHost&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &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;void&lt;/SPAN&gt; Main()&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; addressRoot = &lt;SPAN style="COLOR: #a31515"&gt;"http://localhost:8080/"&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// get the type we are hosting &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;SPAN style="COLOR: #2b91af"&gt;Type&lt;/SPAN&gt; t1 = &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(ionic.samples.WcfRest.NorthwindDataService);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Create a new ServiceHost to start and stop the service &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// (The URI specified here is used for MEX inquiries)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.ServiceHost serviceHost1 =&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; System.ServiceModel.ServiceHost(t1, &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; System.Uri(addressRoot)); &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Create the REST binding&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.WebHttpBinding restBinding = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; System.ServiceModel.WebHttpBinding();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Create the REST endpoint.&amp;nbsp; We need to do this explicitly in order to add a custom behavior to it. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; restEndPoint =&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; System.ServiceModel.Description.ServiceEndpoint&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (System.ServiceModel.Description.ContractDescription.GetContract(&lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(ionic.samples.WcfRest.IDataService)),&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; restBinding,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; System.ServiceModel.EndpointAddress(addressRoot + &lt;SPAN style="COLOR: #a31515"&gt;"rest"&lt;/SPAN&gt;));&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Add a customm behavior to the REST endpoint&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; restEndPoint.Behaviors.Add(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ionic.samples.WcfRest.FaultingWebHttpBehavior());&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Add the endpoint to the service&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; serviceHost1.Description.Endpoints.Add(restEndPoint);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Open the ServiceHost to create listeners and start listening for messages&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; serviceHost1.Open();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Service implementation: "&lt;/SPAN&gt; + t1.ToString());&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"The service is ready."&lt;/SPAN&gt;);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Service Address: "&lt;/SPAN&gt; + addressRoot + &lt;SPAN style="COLOR: #a31515"&gt;"rest"&lt;/SPAN&gt;);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Press &amp;lt;ENTER&amp;gt; to terminate the service."&lt;/SPAN&gt;);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.ReadLine();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Close to shutdown the service&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; serviceHost1.Close();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/SPAN&gt;&amp;nbsp;}&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;I will call your attention to some highlights there: First, you will see that things like base addresses, service interfaces, and service implementation classes are all specified in code (line 12, 17, 25, etc). This stuff &lt;EM&gt;could be specified&lt;/EM&gt; in config files, and commonly is. But in this case, I am specifying all of it in code. There is no config file required here. &lt;/P&gt;
&lt;P&gt;Second, is the use of &lt;A href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.webhttpbinding.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.webhttpbinding.aspx"&gt;WebHttpBinding&lt;/A&gt;, on line 20. This is the binding in WCF, new for .NET 3.5, that supports REST. &lt;/P&gt;
&lt;P&gt;Finally, a subtle bit - notice the custom behavior I added to the endpoint. &lt;B&gt;FaultingWebHttpBehavior&lt;/B&gt; on line 30.&amp;nbsp; That behavior gives me the error handling control I mentioned earlier.&amp;nbsp; More about that later. &lt;/P&gt;
&lt;P&gt;Ok, that's the host. Now I need the service interface and the service implementation. &lt;/P&gt;
&lt;H3&gt;The Interface&lt;/H3&gt;
&lt;P&gt;The database I am using is the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&amp;amp;displaylang=en"&gt;Northwind sample database&lt;/A&gt; which has been shipped with Microsoft database products for years. My service will simply return information for orders in the database - order date, customer, order contents, shipping address, and so on. &lt;/P&gt;
&lt;P&gt;This is a simplistic interface, with just one method. It takes a single parameter as input - the order ID - and returns order information in an XML document. Here's the final product:&lt;/P&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red163\green21\blue21;\red0\green0\blue255;\red43\green145\blue175;}??\fs20     [ServiceContract(Namespace = \cf3 "urn:ionic.samples.2008.03.wcfrest"\cf0 )]\par ??    \cf4 public\cf0  \cf4 interface\cf0  \cf5 IDataService\par ??\cf0     \{\par ??        [OperationContract]\par ??        [WebGet(\par ??            BodyStyle = WebMessageBodyStyle.Bare,\par ??          RequestFormat = WebMessageFormat.Xml,\par ??          ResponseFormat = WebMessageFormat.Xml,\par ??          UriTemplate = \cf3 "Northwind/Order/\{orderId\}"\cf0 )]\par ??        OrderInfoMsg GetOrderInfo(\cf4 string\cf0  orderId);\par ??    \}}
--&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; FONT-SIZE: 10pt; BACKGROUND: white; BORDER-LEFT: windowtext 1pt solid; COLOR: black; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ServiceContract(Namespace = &lt;SPAN style="COLOR: #a31515"&gt;"urn:ionic.samples.2008.03.wcfrest"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;IDataService&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [OperationContract]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [WebGet(&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; BodyStyle = WebMessageBodyStyle.Bare,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; RequestFormat = WebMessageFormat.Xml,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ResponseFormat = WebMessageFormat.Xml,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; UriTemplate = &lt;SPAN style="COLOR: #a31515"&gt;"Northwind/Order/{orderId}"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OrderInfoMsg GetOrderInfo(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; orderId);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Things to notice: 
&lt;OL&gt;
&lt;LI&gt;Standard WCF-isms like &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.aspx"&gt;OperationContract&lt;/A&gt; and &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.servicecontractattribute.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.servicecontractattribute.aspx"&gt;ServiceContract&lt;/A&gt;. 
&lt;LI&gt;The WebGet attribute is new for .NET 3.5, and is the one you want to use for a method that handles REST requests. 
&lt;LI&gt;The UriTemplate specifies the form of the URI requests this method will be tickled for. Also it does automagic URI-to-method-parameter mapping. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The interface for a service in WCF is exhibited at multiple levels - in code (C# in this case), and on the wire (XML in this case). When doign web services design, a best practice for interoperability is to define the WSDL first, and then implement the services and clients from that WSDL. But REST has no WSDL, and the development style is more rapid iteration. In keeping with that tradition, in my case, I defined the interface in C#, and then iterated on it until I got XML in a shape I liked. &lt;/P&gt;
&lt;P&gt;The OrderInfoMsg type, which is the response type I finally arrived at here, looks like this: &lt;/P&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red163\green21\blue21;\red0\green0\blue255;\red43\green145\blue175;}??\fs20     [DataContract(Namespace = \cf3 "urn:ionic.samples.2008.03.Rest"\cf0 )]\par ??    \cf4 public\cf0  \cf4 class\cf0  \cf5 OrderInfoMsg\par ??\cf0     \{\par ??        [DataMember]\par ??        \cf4 public\cf0  OrderT Order;\par ??        [DataMember]\par ??        \cf4 public\cf0  ApplicationFaultT Fault;\par ??\par ??        [DataMember]\par ??        \cf4 public\cf0  MessageInfoT MessageInfo;\par ??\par ??\par ??        \cf4 public\cf0  OrderInfoMsg()\par ??        \{\par ??            MessageInfo = \cf4 new\cf0  MessageInfoT();\par ??        \}\par ??    \}}
--&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; FONT-SIZE: 10pt; BACKGROUND: white; BORDER-LEFT: windowtext 1pt solid; COLOR: black; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DataContract(Namespace = &lt;SPAN style="COLOR: #a31515"&gt;"urn:ionic.samples.2008.03.Rest"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;OrderInfoMsg&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [DataMember]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; OrderT Order;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [DataMember]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; ApplicationFaultT Fault;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [DataMember]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; MessageInfoT MessageInfo;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; OrderInfoMsg()&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MessageInfo = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; MessageInfoT();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;There are 3 parts to the class - one part contains information about the order, one part to contain information about any fault that occurred on the server side, and a final part to contain generic message information. The fault information is key, because REST doesn't formally specify a way to handle faults, or what they look like. So your REST application has to consider that itself. My approach is to include a way to pass fault information back to the caller explicitly. The MessageInfo part gets filled implicitly, with a timestamp and other information. Think of that as a basic message "dog tags". &lt;/P&gt;
&lt;P&gt;I won't show all the code for the other classes. They are just basic &lt;A href="http://en.wikipedia.org/wiki/Data_Transfer_Object" mce_href="http://en.wikipedia.org/wiki/Data_Transfer_Object"&gt;Data Transfer Objects&lt;/A&gt;. 
&lt;H3&gt;The Service Implementation&lt;/H3&gt;
&lt;P&gt;The service implementation is obviously going to be pretty basic. All we need to do is query SQL Server for the order information, and then form an XML document in reply. &lt;/P&gt;
&lt;P&gt;Here's where there is some fun involved. We can use LINQ-to-SQL to do the queries and fill the Data Transfer Object. Check the code: &lt;/P&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red163\green21\blue21;}??\fs20         \cf3 public\cf0  OrderInfoMsg GetOrderInfo(\cf3 string\cf0  orderId)\par ??        \{\par ??            \cf3 int\cf0  n = 0;\par ??            \cf3 try\par ??\cf0             \{\par ??                n = System.\cf4 Int32\cf0 .Parse(orderId);\par ??            \}\par ??            \cf3 catch\par ??\cf0             \{\par ??                \cf3 return\cf0  \cf3 new\cf0  OrderInfoMsg\par ??                \{\par ??                    Fault = \cf3 new\cf0  ApplicationFaultT\par ??                    \{\par ??                        message = \cf5 "Bad input, please pass a valid order number"\cf0 ,\par ??                        code = 11\par ??                    \}\par ??                \};\par ??            \}\par ??\par ??            OrderInfoMsg oim = \cf3 null\cf0 ;\par ??            \cf3 try\par ??\cf0             \{\par ??                oim =\par ??                 (\cf3 from\cf0  o \cf3 in\cf0  db.Orders\par ??                  \cf3 where\cf0  o.OrderID == n\par ??                  \cf3 select\cf0  \cf3 new\cf0  OrderInfoMsg\par ??                     \{\par ??                         Order = \cf3 new\cf0  OrderT\par ??                         \{\par ??                             OrderID = o.OrderID,\par ??                             Customer = (\cf3 from\cf0  c \cf3 in\cf0  db.Customers\par ??                                         \cf3 where\cf0  o.CustomerID == c.CustomerID\par ??                                         \cf3 select\cf0  \cf3 new\cf0  CustomerT\par ??                                         \{\par ??                                             CompanyName = c.CompanyName,\par ??                                             ContactName = c.ContactName,\par ??                                             ContactTitle = c.ContactTitle,\par ??                                             Phone = c.Phone\par ??                                         \}).Single(),\par ??                             OrderDate = o.OrderDate,\par ??                             ShipInfo = \cf3 new\cf0  ShipInfoT\par ??                             \{\par ??                                 ShipName = o.ShipName,\par ??                                 ShipAddress = o.ShipAddress,\par ??                                 ShipCity = o.ShipCity,\par ??                                 ShipPostalCode = o.ShipPostalCode,\par ??                                 ShipCountry = o.ShipCountry,\par ??                             \},\par ??                             Items =\par ??                             (\cf3 from\cf0  od \cf3 in\cf0  db.Order_Details\par ??                              \cf3 where\cf0  od.OrderID == o.OrderID\par ??                              \cf3 select\cf0  \cf3 new\cf0  ItemT \{ \par ??                                  ProductName = od.Product.ProductName, \par ??                                  Quantity = od.Quantity, \par ??                                  UnitPrice = od.UnitPrice \}).ToArray()\par ??                         \}\par ??                     \}).Single();\par ??\par ??            \}\par ??            \cf3 catch\cf0  (System.\cf4 Exception\cf0  exc1)\par ??            \{\par ??                oim = \cf3 new\cf0  OrderInfoMsg\par ??                \{\par ??                    Fault = \cf3 new\cf0  ApplicationFaultT\par ??                    \{\par ??                        message = \cf5 "Could not retrieve Order Information. Maybe you passed bad input?"\cf0 ,\par ??                        innerMessage = \cf5 "Exception: "\cf0  + exc1.Message,\par ??                        code = 12\par ??                    \}\par ??                \};\par ??            \}\par ??\par ??            \cf3 return\cf0  oim;\par ??\par ??        \}\par ??    \}}
--&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; FONT-SIZE: 10pt; BACKGROUND: white; BORDER-LEFT: windowtext 1pt solid; COLOR: black; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; OrderInfoMsg GetOrderInfo(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; orderId)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; n = 0;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;try&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; n = System.&lt;SPAN style="COLOR: #2b91af"&gt;Int32&lt;/SPAN&gt;.Parse(orderId);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;catch&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; OrderInfoMsg&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Fault = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ApplicationFaultT&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; message = &lt;SPAN style="COLOR: #a31515"&gt;"Bad input, please pass a valid order number"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; code = 11&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OrderInfoMsg oim = &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;try&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oim =&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; o &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; db.Orders&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;where&lt;/SPAN&gt; o.OrderID == n&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;select&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; OrderInfoMsg&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Order = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; OrderT&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OrderID = o.OrderID,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Customer = (&lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; c &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; db.Customers&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;where&lt;/SPAN&gt; o.CustomerID == c.CustomerID&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;select&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; CustomerT&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CompanyName = c.CompanyName,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ContactName = c.ContactName,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ContactTitle = c.ContactTitle,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Phone = c.Phone&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }).Single(),&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OrderDate = o.OrderDate,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ShipInfo = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ShipInfoT&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ShipName = o.ShipName,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ShipAddress = o.ShipAddress,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ShipCity = o.ShipCity,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ShipPostalCode = o.ShipPostalCode,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ShipCountry = o.ShipCountry,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Items =&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;50&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; od &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; db.Order_Details&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;51&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;where&lt;/SPAN&gt; od.OrderID == o.OrderID&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;52&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;select&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ItemT { &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;53&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ProductName = od.Product.ProductName, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;54&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Quantity = od.Quantity, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;55&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; UnitPrice = od.UnitPrice }).ToArray()&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;56&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;57&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }).Single();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;58&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;59&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;60&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;catch&lt;/SPAN&gt; (System.&lt;SPAN style="COLOR: #2b91af"&gt;Exception&lt;/SPAN&gt; exc1)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;61&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;62&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oim = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; OrderInfoMsg&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;63&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;64&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Fault = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ApplicationFaultT&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;65&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;66&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; message = &lt;SPAN style="COLOR: #a31515"&gt;"Could not retrieve Order Information. Maybe you passed bad input?"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;67&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; innerMessage = &lt;SPAN style="COLOR: #a31515"&gt;"Exception: "&lt;/SPAN&gt; + exc1.Message,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;68&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; code = 12&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;69&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;70&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;71&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;72&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;73&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; oim;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;74&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;75&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Lines 4 through 18 are just validation of the input. The LINQ stuff starts on line 21. Line 26 is where I create the new OrderInfoMsg and the following lines fill that data structure based on information retrieved from the SQL database. &lt;/P&gt;
&lt;P&gt;At first that LINQ stuff may look novel and confusing, but it is really a simple way to do database queries. Keep in mind though, that the REST stuff in WCF is not dependent on LINQ in any way. You could create and fill the OrderInfoMsg any old way, including using an old-fashioned DataReader if you like. &lt;/P&gt;
&lt;P&gt;But I find LINQ a nice upgrade. At line 49, you can see I fill an array of line items for the order. That's nice, concise, readable code. 
&lt;P&gt;In line 62 you can see some error handling, and the use of the object initializers that are new for C# 3.0. Again, nice, clean code. &lt;/P&gt;
&lt;H3&gt;Where does this LINQ stuff come from?&lt;/H3&gt;
&lt;P&gt;The LINQ mappings for the Northwind database are defined in a generated C# file, which is not shown here, and which, I confess, I produced using Visual Studio. I know, I know. I promised that VS wasn't required. But I figured that digression was allowed, seeing as how the main point of this post is not LINQ but how to use WCF to build a REST app. You don't need LINQ to retrieve data. It's just a little extra &lt;A class="" href="http://www.famousfoods.com/emerilsbambq.html" mce_href="http://www.famousfoods.com/emerilsbambq.html"&gt;BAM!&lt;/A&gt; for you in this sample. &lt;/P&gt;
&lt;H3&gt;The FaultingWebHttpBehavior&lt;/H3&gt;
&lt;P&gt;I found that when there was an error in the service, it would return an HTML page to the caller. This has been &lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2248288&amp;amp;SiteID=1"&gt;noticed by others&lt;/A&gt;. A fellow by the name of Andre posted code for an endpoint behavior that would prevent the generation of HTML messages. I liked it and used it here. This is the custom behavior I added to the endpoint, in the service host code, shown above. &lt;/P&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red128\green128\blue128;\red0\green128\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs20 \cf1 namespace\cf0  ionic.samples.WcfRest\par ??\{\par ??    \cf4 ///\cf5  \cf4 &amp;lt;summary&amp;gt;\par ??\cf0     \cf4 ///\cf5  A \cf4 &amp;lt;see cref="WebHttpBehavior"/&amp;gt;\cf5  that returns error messages to the caller \par ??\cf0     \cf4 ///\cf5  when an exception occurs on the server/service. \par ??\cf0     \cf4 ///\cf5  \cf4 &amp;lt;/summary&amp;gt;\par ??\par ??\cf0     \cf1 public\cf0  \cf1 class\cf0  \cf6 FaultingWebHttpBehavior\cf0  : System.ServiceModel.Description.WebHttpBehavior\par ??    \{\par ??\par ??\par ??        \cf1 protected\cf0  \cf1 override\cf0  \cf1 void\cf0  AddServerErrorHandlers(System.ServiceModel.Description.ServiceEndpoint endpoint,\par ??                               System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)\par ??        \{\par ??            endpointDispatcher.ChannelDispatcher.ErrorHandlers.Clear();\par ??            endpointDispatcher.ChannelDispatcher.ErrorHandlers.Add(\cf1 new\cf0  ErrorHandler());\par ??        \}\par ??\par ??        \cf1 public\cf0  \cf1 class\cf0  \cf6 ErrorHandler\cf0  : System.ServiceModel.Dispatcher.IErrorHandler\par ??        \{\par ??\cf1             #region\cf0  IErrorHandler Members\par ??\par ??            \cf1 public\cf0  \cf1 bool\cf0  HandleError(System.\cf6 Exception\cf0  error)\par ??            \{\par ??                \cf1 return\cf0  \cf1 true\cf0 ;\par ??            \}\par ??\par ??            \cf1 public\cf0  \cf1 void\cf0  ProvideFault(System.\cf6 Exception\cf0  error,\par ??                         System.ServiceModel.Channels.MessageVersion version,\par ??                         \cf1 ref\cf0  System.ServiceModel.Channels.Message fault)\par ??            \{\par ??                System.ServiceModel.FaultCode faultCode =\par ??                  System.ServiceModel.FaultCode.CreateSenderFaultCode(error.GetType().Name,\par ??                                              \cf7 "urn:ionic.samples.serviceexception"\cf0 );\par ??                fault = System.ServiceModel.Channels.Message.CreateMessage(version, faultCode, error.Message, \cf1 null\cf0 );\par ??            \}\par ??\par ??\cf1             #endregion\par ??\cf0         \}\par ??    \}\par ??\}}
--&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; FONT-SIZE: 10pt; BACKGROUND: white; BORDER-LEFT: windowtext 1pt solid; COLOR: black; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt; ionic.samples.WcfRest&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; A &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;see cref="WebHttpBehavior"/&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; that returns error messages to the caller &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; when an exception occurs on the server/service. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;FaultingWebHttpBehavior&lt;/SPAN&gt; : System.ServiceModel.Description.WebHttpBehavior&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; AddServerErrorHandlers(System.ServiceModel.Description.ServiceEndpoint endpoint,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; endpointDispatcher.ChannelDispatcher.ErrorHandlers.Clear();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; endpointDispatcher.ChannelDispatcher.ErrorHandlers.Add(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ErrorHandler());&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;ErrorHandler&lt;/SPAN&gt; : System.ServiceModel.Dispatcher.IErrorHandler&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/SPAN&gt; IErrorHandler Members&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; HandleError(System.&lt;SPAN style="COLOR: #2b91af"&gt;Exception&lt;/SPAN&gt; error)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; ProvideFault(System.&lt;SPAN style="COLOR: #2b91af"&gt;Exception&lt;/SPAN&gt; error,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Channels.MessageVersion version,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;ref&lt;/SPAN&gt; System.ServiceModel.Channels.Message fault)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.FaultCode faultCode =&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; System.ServiceModel.FaultCode.CreateSenderFaultCode(error.GetType().Name,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"urn:ionic.samples.serviceexception"&lt;/SPAN&gt;);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fault = System.ServiceModel.Channels.Message.CreateMessage(version, faultCode, error.Message, &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/SPAN&gt;&amp;nbsp;}&lt;/P&gt;&lt;/DIV&gt;
&lt;H3&gt;The REST messages&lt;/H3&gt;
&lt;P&gt;The request looks something like this: &lt;/P&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;}??\fs20 GET /rest/Northwind/Order/11049 HTTP/1.1\par ??Accept: */*\par ??Accept-Language: en-us\par ??UA-CPU: x86\par ??Accept-Encoding: gzip, deflate\par ??User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;)\par ??Host: dinoch-2:8080\par ??Proxy-Connection: Keep-Alive}
--&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; FONT-SIZE: 10pt; BACKGROUND: white; BORDER-LEFT: windowtext 1pt solid; COLOR: black; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;GET /rest/Northwind/Order/11049 HTTP/1.1&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;Accept: */*&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;Accept-Language: en-us&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;UA-CPU: x86&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;Accept-Encoding: gzip, deflate&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;Host: dinoch-2:8080&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;Proxy-Connection: Keep-Alive&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Obviously, any application on any computer can generate that sort of request. I used an IE browser, but it could be anything, and in a real REST app it won't be just a browser. &lt;/P&gt;
&lt;P&gt;And the response looks like this: &lt;/P&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;}??\fs20 HTTP/1.1 200 OK\par ??Content-Length: 1189\par ??Content-Type: application/xml; charset=utf-8\par ??Server: Microsoft-HTTPAPI/2.0\par ??Date: Thu, 20 Mar 2008 20:34:59 GMT\par ??\par ??&amp;lt;OrderInfoMsg ...&amp;gt;\par ??}
--&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; FONT-SIZE: 10pt; BACKGROUND: white; BORDER-LEFT: windowtext 1pt solid; COLOR: black; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;HTTP/1.1 200 OK&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;Content-Length: 1189&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;Content-Type: application/xml; charset=utf-8&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;Server: Microsoft-HTTPAPI/2.0&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;Date: Thu, 20 Mar 2008 20:34:59 GMT&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&amp;lt;OrderInfoMsg ...&amp;gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;The prettified XML looks like this: &lt;/P&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs20 \cf1 &amp;lt;\cf3 OrderInfoMsg\cf1  \cf4 xmlns\cf1 =\cf0 "\cf1 urn:ionic.samples.2008.03.Rest\cf0 "\cf1  \cf4 xmlns:i\cf1 =\cf0 "\cf1 http://www.w3.org/2001/XMLSchema-instance\cf0 "\cf1 &amp;gt;\par ??  &amp;lt;\cf3 Fault\cf1  \cf4 i:nil\cf1 =\cf0 "\cf1 true\cf0 "\cf1 /&amp;gt;\par ??  &amp;lt;\cf3 MessageInfo\cf1 &amp;gt;\par ??    &amp;lt;\cf3 ApplicationId\cf1 &amp;gt;\cf0 319a80e4-3e64-4328-a5d1-468b354c370a\cf1 &amp;lt;/\cf3 ApplicationId\cf1 &amp;gt;\par ??    &amp;lt;\cf3 ApplicationName\cf1 &amp;gt;\cf0 WcfRestService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\cf1 &amp;lt;/\cf3 ApplicationName\cf1 &amp;gt;\par ??    &amp;lt;\cf3 OkToStore\cf1 &amp;gt;\cf0 true\cf1 &amp;lt;/\cf3 OkToStore\cf1 &amp;gt;\par ??    &amp;lt;\cf3 generated\cf1 &amp;gt;\cf0 2008-03-20T13:34:59.3459363-07:00\cf1 &amp;lt;/\cf3 generated\cf1 &amp;gt;\par ??    &amp;lt;\cf3 originatingHost\cf1 &amp;gt;\cf0 dinoch-2\cf1 &amp;lt;/\cf3 originatingHost\cf1 &amp;gt;\par ??  &amp;lt;/\cf3 MessageInfo\cf1 &amp;gt;\par ??  &amp;lt;\cf3 Order\cf1 &amp;gt;\par ??    &amp;lt;\cf3 Customer\cf1 &amp;gt;\par ??      &amp;lt;\cf3 CompanyName\cf1 &amp;gt;\cf0 Gourmet Lanchonetes\cf1 &amp;lt;/\cf3 CompanyName\cf1 &amp;gt;\par ??      &amp;lt;\cf3 ContactName\cf1 &amp;gt;\cf0 Andr\'e9 Fonseca\cf1 &amp;lt;/\cf3 ContactName\cf1 &amp;gt;\par ??      &amp;lt;\cf3 ContactTitle\cf1 &amp;gt;\cf0 Sales Associate\cf1 &amp;lt;/\cf3 ContactTitle\cf1 &amp;gt;\par ??      &amp;lt;\cf3 Phone\cf1 &amp;gt;\cf0 (11) 555-9482\cf1 &amp;lt;/\cf3 Phone\cf1 &amp;gt;\par ??    &amp;lt;/\cf3 Customer\cf1 &amp;gt;\par ??    &amp;lt;\cf3 Items\cf1 &amp;gt;\par ??      &amp;lt;\cf3 Item\cf1 &amp;gt;\par ??        &amp;lt;\cf3 ProductName\cf1 &amp;gt;\cf0 Chang\cf1 &amp;lt;/\cf3 ProductName\cf1 &amp;gt;\par ??        &amp;lt;\cf3 Quantity\cf1 &amp;gt;\cf0 10\cf1 &amp;lt;/\cf3 Quantity\cf1 &amp;gt;\par ??        &amp;lt;\cf3 UnitPrice\cf1 &amp;gt;\cf0 19.0000\cf1 &amp;lt;/\cf3 UnitPrice\cf1 &amp;gt;\par ??      &amp;lt;/\cf3 Item\cf1 &amp;gt;\par ??      &amp;lt;\cf3 Item\cf1 &amp;gt;\par ??        &amp;lt;\cf3 ProductName\cf1 &amp;gt;\cf0 Queso Manchego La Pastora\cf1 &amp;lt;/\cf3 ProductName\cf1 &amp;gt;\par ??        &amp;lt;\cf3 Quantity\cf1 &amp;gt;\cf0 4\cf1 &amp;lt;/\cf3 Quantity\cf1 &amp;gt;\par ??        &amp;lt;\cf3 UnitPrice\cf1 &amp;gt;\cf0 38.0000\cf1 &amp;lt;/\cf3 UnitPrice\cf1 &amp;gt;\par ??      &amp;lt;/\cf3 Item\cf1 &amp;gt;\par ??    &amp;lt;/\cf3 Items\cf1 &amp;gt;\par ??    &amp;lt;\cf3 OrderDate\cf1 &amp;gt;\cf0 1996-05-24T00:00:00\cf1 &amp;lt;/\cf3 OrderDate\cf1 &amp;gt;\par ??    &amp;lt;\cf3 OrderID\cf1 &amp;gt;\cf0 11049\cf1 &amp;lt;/\cf3 OrderID\cf1 &amp;gt;\par ??    &amp;lt;\cf3 ShipInfo\cf1 &amp;gt;\par ??      &amp;lt;\cf3 ShipAddress\cf1 &amp;gt;\cf0 Av. Brasil, 442\cf1 &amp;lt;/\cf3 ShipAddress\cf1 &amp;gt;\par ??      &amp;lt;\cf3 ShipCity\cf1 &amp;gt;\cf0 Campinas\cf1 &amp;lt;/\cf3 ShipCity\cf1 &amp;gt;\par ??      &amp;lt;\cf3 ShipCountry\cf1 &amp;gt;\cf0 Brazil\cf1 &amp;lt;/\cf3 ShipCountry\cf1 &amp;gt;\par ??      &amp;lt;\cf3 ShipName\cf1 &amp;gt;\cf0 Gourmet Lanchonetes\cf1 &amp;lt;/\cf3 ShipName\cf1 &amp;gt;\par ??      &amp;lt;\cf3 ShipPostalCode\cf1 &amp;gt;\cf0 04876-786\cf1 &amp;lt;/\cf3 ShipPostalCode\cf1 &amp;gt;\par ??      &amp;lt;\cf3 ShipRegion\cf1  \cf4 i:nil\cf1 =\cf0 "\cf1 true\cf0 "\cf1 /&amp;gt;\par ??    &amp;lt;/\cf3 ShipInfo\cf1 &amp;gt;\par ??  &amp;lt;/\cf3 Order\cf1 &amp;gt;\par ??&amp;lt;/\cf3 OrderInfoMsg\cf1 &amp;gt;}
--&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; FONT-SIZE: 10pt; BACKGROUND: white; BORDER-LEFT: windowtext 1pt solid; COLOR: black; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;OrderInfoMsg&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;urn:ionic.samples.2008.03.Rest&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;xmlns:i&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Fault&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;i:nil&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;MessageInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ApplicationId&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;319a80e4-3e64-4328-a5d1-468b354c370a&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ApplicationId&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ApplicationName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;WcfRestService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ApplicationName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;OkToStore&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;true&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;OkToStore&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;generated&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;2008-03-20T13:34:59.3459363-07:00&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;generated&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;originatingHost&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;dinoch-2&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;originatingHost&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;MessageInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Order&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Customer&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;CompanyName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;Gourmet Lanchonetes&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;CompanyName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ContactName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;André Fonseca&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ContactName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ContactTitle&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;Sales Associate&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ContactTitle&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Phone&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;(11) 555-9482&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Phone&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Customer&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Items&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Item&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ProductName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;Chang&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ProductName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Quantity&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;10&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Quantity&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;UnitPrice&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;19.0000&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;UnitPrice&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Item&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Item&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ProductName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;Queso Manchego La Pastora&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ProductName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Quantity&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;4&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Quantity&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;UnitPrice&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;38.0000&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;UnitPrice&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Item&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Items&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;OrderDate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;1996-05-24T00:00:00&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;OrderDate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;OrderID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;11049&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;OrderID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipAddress&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;Av. Brasil, 442&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipAddress&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipCity&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;Campinas&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipCity&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipCountry&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;Brazil&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipCountry&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;Gourmet Lanchonetes&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipPostalCode&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;04876-786&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipPostalCode&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipRegion&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;i:nil&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ShipInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Order&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;OrderInfoMsg&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Clean, simple, easy. &lt;/P&gt;
&lt;P&gt;But wait! There's more! What if you don't want XML but want that data in JSON? A simple flip of an attribute in the Service definition gives us this as a response: &lt;/P&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red163\green21\blue21;\red0\green0\blue255;}??\fs20 \{\par ??  \cf3 "Fault"\cf0 :\cf4 null\cf0 ,\par ??  \cf3 "MessageInfo"\cf0 :\{\par ??    \cf3 "ApplicationId"\cf0 :\cf3 "319a80e4-3e64-4328-a5d1-468b354c370a"\cf0 ,\par ??    \cf3 "ApplicationName"\cf0 :\cf3 "WcfRestService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"\cf0 ,\par ??    \cf3 "OkToStore"\cf0 :\cf4 true\cf0 ,\par ??    \cf3 "generated"\cf0 :\cf3 "\\/Date(1206047182582-0700)\\/"\cf0 ,\par ??    \cf3 "originatingHost"\cf0 :\cf3 "dinoch-2"\par ??\cf0     \},\par ??  \cf3 "Order"\cf0 :\{\par ??    \cf3 "Customer"\cf0 :\{\par ??      \cf3 "CompanyName"\cf0 :\cf3 "La maison d'Asie"\cf0 ,\par ??      \cf3 "ContactName"\cf0 :\cf3 "Annette Roulet"\cf0 ,\par ??      \cf3 "ContactTitle"\cf0 :\cf3 "Sales Manager"\cf0 ,\par ??      \cf3 "Phone"\cf0 :\cf3 "61.77.61.10"\par ??\cf0       \},\par ??    \cf3 "Items"\cf0 :[\par ??      \{\cf3 "ProductName"\cf0 :\cf3 "Guaran\u225 ? Fant\u225 ?stica"\cf0 ,\cf3 "Quantity"\cf0 :10,\cf3 "UnitPrice"\cf0 :4.5000\}\par ??    ],\par ??    \cf3 "OrderDate"\cf0 :\cf3 "\\/Date(833180400000-0700)\\/"\cf0 ,\par ??    \cf3 "OrderID"\cf0 :11051,\par ??    \cf3 "ShipInfo"\cf0 :\{\par ??      \cf3 "ShipAddress"\cf0 :\cf3 "1 rue Alsace-Lorraine"\cf0 ,\par ??      \cf3 "ShipCity"\cf0 :\cf3 "Toulouse"\cf0 ,\par ??      \cf3 "ShipCountry"\cf0 :\cf3 "France"\cf0 ,\par ??      \cf3 "ShipName"\cf0 :\cf3 "La maison d'Asie"\cf0 ,\par ??      \cf3 "ShipPostalCode"\cf0 :\cf3 "31000"\cf0 ,\par ??      \cf3 "ShipRegion"\cf0 :\cf4 null\par ??\cf0       \}\par ??    \}\par ??\}}
--&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; FONT-SIZE: 10pt; BACKGROUND: white; BORDER-LEFT: windowtext 1pt solid; COLOR: black; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"Fault"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"MessageInfo"&lt;/SPAN&gt;:{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ApplicationId"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"319a80e4-3e64-4328-a5d1-468b354c370a"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ApplicationName"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"WcfRestService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"OkToStore"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"generated"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"\/Date(1206047182582-0700)\/"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"originatingHost"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"dinoch-2"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"Order"&lt;/SPAN&gt;:{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"Customer"&lt;/SPAN&gt;:{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"CompanyName"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"La maison d'Asie"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ContactName"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"Annette Roulet"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ContactTitle"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"Sales Manager"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"Phone"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"61.77.61.10"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; },&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"Items"&lt;/SPAN&gt;:[&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; {&lt;SPAN style="COLOR: #a31515"&gt;"ProductName"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"Guaraná Fantástica"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: #a31515"&gt;"Quantity"&lt;/SPAN&gt;:10,&lt;SPAN style="COLOR: #a31515"&gt;"UnitPrice"&lt;/SPAN&gt;:4.5000}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ],&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"OrderDate"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"\/Date(833180400000-0700)\/"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"OrderID"&lt;/SPAN&gt;:11051,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ShipInfo"&lt;/SPAN&gt;:{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ShipAddress"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"1 rue Alsace-Lorraine"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ShipCity"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"Toulouse"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ShipCountry"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"France"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ShipName"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"La maison d'Asie"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ShipPostalCode"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #a31515"&gt;"31000"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"ShipRegion"&lt;/SPAN&gt;:&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/SPAN&gt;&amp;nbsp;}&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Pretty nifty, eh?&lt;/P&gt;
&lt;P&gt;That's how to write a REST app in .NET. &lt;/P&gt;
&lt;H3&gt;Where are we?&lt;/H3&gt;
&lt;P&gt;Well, I hope I've shown you a couple things here. First, it's easy to use WCF to build REST apps, using the .NET Framework 3.5. Second, you can build WCF apps with free command line tools. Finally, LINQ is cool, and is a nice complement to REST approaches. &lt;/P&gt;
&lt;P&gt;Grab the source code attached here&amp;nbsp;and try it yourself. &lt;/P&gt;&lt;/SIZE&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8327651" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/dotnetinterop/attachment/8327651.ashx" length="68814" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/SDK/default.aspx">SDK</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/emacs/default.aspx">emacs</category></item><item><title>How to build a REST app in .NET (not)</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/18/how-to-build-a-rest-app-in-net-not.aspx</link><pubDate>Tue, 18 Mar 2008 16:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8276594</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8276594.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8276594</wfw:commentRss><description>&lt;P&gt;&lt;A class="" href="http://www.jaltiere.com/?p=41" mce_href="http://www.jaltiere.com/?p=41"&gt;This post&lt;/A&gt; by Jack Altiere describes how to build a REST API in .NET.&amp;nbsp;&amp;nbsp; This spurred a respose... &amp;nbsp; &lt;/P&gt;
&lt;P&gt;Firstly, I think really he is talking about a REST interface, not an API. REST is all about the interface.&amp;nbsp; Maybe I am splitting hairs here, but I think it is important to be careful about terminology.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;My main respoinse is this - use .NET 3.5 and the REST capabilities included as part of Windows Communication Foundation.&amp;nbsp; I respect the enthusiasm in the blog post, but the thing is, most devs don't want just a REST interface.&amp;nbsp; They want a service, and they want it to be accessible in various ways. REST is one of those ways.&amp;nbsp; They want it to be easy to handle parameters.&amp;nbsp; They want auditing and logging.&amp;nbsp; They want an easy way to map URIs to methods.&amp;nbsp; The .NET Framework v3.5, released in November 2007, gives developers those capabilities.&amp;nbsp;&amp;nbsp; Sure, you can roll your own&amp;nbsp; REST Framework for .NET, but why would you? &lt;/P&gt;
&lt;P&gt;-D&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8276594" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx">REST</category></item><item><title>Get Smart on WCF</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/17/get-smart-on-wcf.aspx</link><pubDate>Mon, 17 Mar 2008 20:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8276508</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8276508.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8276508</wfw:commentRss><description>&lt;P&gt;Joe Stagner posted a good list o links for learning WCF.&amp;nbsp; A good first stop on your journey. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.joeon.net/post/2008/03/windows-communication-foundation---65-links-to-make-you-an-expert!.aspx"&gt;http://www.joeon.net/post/2008/03/windows-communication-foundation---65-links-to-make-you-an-expert!.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8276508" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category></item><item><title>SAP Enterprise Services Explorer for .NET (Visual Studio) does WCF</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/17/sap-enterprise-services-explorer-for-net-visual-studio-does-wcf.aspx</link><pubDate>Mon, 17 Mar 2008 17:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8276414</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8276414.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8276414</wfw:commentRss><description>&lt;P&gt;via &lt;A href="http://dedjo.blogspot.com/2008/03/localization-fix-for-sap-esa-explorer.html"&gt;http://dedjo.blogspot.com/2008/03/localization-fix-for-sap-esa-explorer.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;SAP just released a sneak preview of an add-in for Visual Studio 2005 that they call "SAP Enterprise Services Explorer for Microsoft .NET ".&amp;nbsp; It feels like a misnomer to me, because it's not for &lt;STRONG&gt;&lt;EM&gt;.NET&lt;/EM&gt;&lt;/STRONG&gt;, which is the name of the programming framework.&amp;nbsp; It's for &lt;STRONG&gt;&lt;EM&gt;Visual Studio&lt;/EM&gt;&lt;/STRONG&gt;, which is the name of the tool.&amp;nbsp; But lots of people use those names interchangeably, I take it.&amp;nbsp; So there you have it. &lt;/P&gt;
&lt;P&gt;Based on my read, the tool allows a developer to query the SAP Service Registry, and then generate, for .NET applications, web services proxy classes, that enable .NET apps to connect to the services. There are some nifty query capabilities for accessing the service registry.&amp;nbsp; And, the generated proxy is a WCF client.&amp;nbsp; That's what I like to see. &lt;/P&gt;
&lt;P&gt;Not sure if this also works in VS2008.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;here's the link: &lt;A href="https://www.sdn.sap.com/irj/sdn/dotnet"&gt;https://www.sdn.sap.com/irj/sdn/dotnet&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Worth checking out!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8276414" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/SAP/default.aspx">SAP</category></item><item><title>Sudoku Generator and Solver in C#</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/14/sudoku-generator-and-solver-in-c.aspx</link><pubDate>Sat, 15 Mar 2008 01:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8212295</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8212295.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8212295</wfw:commentRss><description>&lt;P&gt;Seems like building a Sudoku application is almost a&amp;nbsp;compulsory thing for&amp;nbsp;programmers these days.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I've &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/tags/Sudoku/default.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/tags/Sudoku/default.aspx"&gt;written about my prior efforts&lt;/A&gt;. Here's an update.&amp;nbsp; Rather than force you all to use the XBAP I published last year, here's a standalone WPF app.&amp;nbsp; C# Source and EXE include. &lt;/P&gt;
&lt;P&gt;It uses the DLX (Dancing Links) algorithm from Donald Knuth.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Pretty speedy. It is a WPF app, but there are no fancy WPF graphics.&amp;nbsp; It just generates a table, and that's about it.&amp;nbsp; This one is handy if you like to do Sudoku on paper.&amp;nbsp; I've uses this app to generate and print out puzzles that I can do with my kids.&lt;/P&gt;
&lt;P&gt;Source: &lt;A href="http://cid-842434ebe9688900.skydrive.live.com/self.aspx/Games/Sudoku-1.0-source.zip"&gt;http://cid-842434ebe9688900.skydrive.live.com/self.aspx/Games/Sudoku-1.0-source.zip&lt;/A&gt;&lt;BR&gt;EXE:&amp;nbsp; &lt;A href="http://cid-842434ebe9688900.skydrive.live.com/self.aspx/Games/Sudoku.exe"&gt;http://cid-842434ebe9688900.skydrive.live.com/self.aspx/Games/Sudoku.exe&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Cheers!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8212295" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Sudoku/default.aspx">Sudoku</category></item><item><title>JNBridge Interview on Channel9</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/03/04/jnbridge-interview-on-channel9.aspx</link><pubDate>Wed, 05 Mar 2008 02:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8038485</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8038485.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8038485</wfw:commentRss><description>&lt;P&gt;Kirk Evans of Microsoft interviewed Wayne Citrin of JNBridge, the Interop company. &lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/ShowPost.aspx?PostID=387574" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=387574"&gt;Check it out on Channel9&lt;/A&gt;. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8038485" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category></item></channel></rss>