<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.bartdesmet.net/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>B# .NET Blog : Avalon, Indigo, WinFX, XAML</title><link>http://community.bartdesmet.net/blogs/bart/archive/category/38.aspx</link><description>Avalon, Indigo, WinFX, XAML</description><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20423.869)</generator><item><title>WinFX November CTP</title><link>http://community.bartdesmet.net/blogs/bart/archive/2005/11/22/3790.aspx</link><pubDate>Tue, 22 Nov 2005 08:17:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:3790</guid><dc:creator>bart</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=3790</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2005/11/22/3790.aspx#comments</comments><description>&lt;FONT face=Arial size=2&gt;Woohoo, finally it's there: a build of WinFX compatible with .NET Framework v2.0 RTM. You can find the bits over here: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E5376297-DA10-4FC3-967D-38C96F767FC4&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=E5376297-DA10-4FC3-967D-38C96F767FC4&amp;amp;displaylang=en&lt;/A&gt;. It includes the runtime components of WCF, WPF and WWF. Of course real developers also want the SDK, which is available right now on &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0A118D5F-21E7-4A3E-82D9-F30C6CE3F63D&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=0A118D5F-21E7-4A3E-82D9-F30C6CE3F63D&amp;amp;displaylang=en&lt;/A&gt;. Take a look around on those pages for links to the VS2005 extensions for WCF, WPF and WWF as well as CTP installation notes. Enjoy!&lt;/FONT&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=3790" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Avalon_2C00_+Indigo_2C00_+WinFX_2C00_+XAML/default.aspx">Avalon, Indigo, WinFX, XAML</category></item><item><title>Arrived at the PDC - LA</title><link>http://community.bartdesmet.net/blogs/bart/archive/2005/09/13/3539.aspx</link><pubDate>Wed, 14 Sep 2005 04:55:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:3539</guid><dc:creator>bart</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=3539</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2005/09/13/3539.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Okay, pretty late notice due to internet connectivity problems at the hotel, but I arrived at the PDC in LA a couple of days ago after a 11:40 hours flight from Amsterdam to LAX airport. Luckily, I'm not suffering from a jetlag, but I guess that has to do with my lack of biorithm :d.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;On Sunday I took the &lt;A href="mailto:EMEA@PDC"&gt;EMEA@PDC&lt;/A&gt; odd city tour, yesterday I went to the beach (Venice Beach) with &lt;A href="mailto:EMEA@PDC"&gt;EMEA@PDC&lt;/A&gt; to read some stuff, including documents on the C# 3.0, LINQ, DLINQ and XLINQ stuff that was announced in today's &lt;A href="http://www.microsoft.com/events/executives/billgates.mspx"&gt;keynote by Bill Gates and Jim Allchin&lt;/A&gt; which was pretty cool, covering Windows Vista pre-beta 2, Office 12 (it's sooo exciting, believe me ;-)), *&lt;A href="http://msdn.microsoft.com/netframework/future/linq/"&gt;LINQ&lt;/A&gt;, &lt;A href="http://beta.asp.net/default.aspx?tabindex=7&amp;tabid=47"&gt;Atlas&lt;/A&gt; and a lot of fun demos by Anders Heijlsberg, Don Box, Chris Anderson and Scott Gut&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;hrie. Also check out &lt;A href="http://www.microsoft.com/max/"&gt;Microsoft Max&lt;/A&gt;, a sample app running on WCF and WPF.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Going to find some food now (12:51 PM).&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=3539" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Avalon_2C00_+Indigo_2C00_+WinFX_2C00_+XAML/default.aspx">Avalon, Indigo, WinFX, XAML</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/PDC+2005/default.aspx">PDC 2005</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/C_2300_+3.0/default.aspx">C# 3.0</category></item><item><title>Introducing Indigo</title><link>http://community.bartdesmet.net/blogs/bart/archive/2005/09/01/3517.aspx</link><pubDate>Fri, 02 Sep 2005 02:36:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:3517</guid><dc:creator>bart</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=3517</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2005/09/01/3517.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Arial color=#000080&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The &lt;STRIKE&gt;Indigo&lt;/STRIKE&gt; &lt;A href="http://www.microsoft.com/windowsvista/nextgen/indigo.mspx"&gt;Windows Communication Foundation&lt;/A&gt; wave is around for a couple of years now, so I thought it was about time to dedicate some blog posts to this technology. In this first technical development-related post on the Indigo technology (I'll use the code-name further on instead of the new WCF name) we'll cover the basis of the technology and service orientation and will go through some simple low-level samples.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080&gt;&lt;STRONG&gt;Service Orientation&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Indigo is all about services. Not web services or Windows services but services. With the advent of the internet several decades ago, the need to have more distributed software is growing day by day. Service Orientation (abbreviated as - originally - SO) is a methodology for software design and development that puts connectivity of software components in the center of the universe, building software on top of services that interact with each other to fulfill business-related needs. An SO solution consists of a series of service that serve as building blocks for an application. Indigo is Microsoft's translation of this Service Oriented software design/development wave, enabling developers to write and build services also concentrating on the communication aspect for services and clients.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Note: &lt;/STRONG&gt;You should not think of SO as a replacement for other development paradigms such as object-orientation (OO) or aspect orientation (AOP). Services is about creating facades that encapsulate the inner implementation of a service and expose the functionality of the service to the outside world. The way these services themselves are created can be OO or whatever paradigm you like to use.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;SO (or SOA = Software Oriented Architecture) is based on a total of four tenets as proposed by Don Box:&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Explicitness of boundaries &lt;/STRONG&gt;meaning that&amp;nbsp;messages are sent between services across formal and explicit boundaries. Look at these boundaries as a kind of interfaces, hiding what's behind the boundary itself. Because of the explicitness, crossing a boundary is explicitly visible in code and saves you from boobytraps that are present in technologies such as DCOM, .NET Remoting, RMI, CORBA that make remote objects look as local objects.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Autonomy of services&lt;/STRONG&gt; makes it possible to update services independently from each other, without having to redeploy the entire solution as a whole. Loosely coupling is the keyword that makes this possible.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Services share schemas and contracts&lt;/STRONG&gt;. Services are not sharing types and classes but schemas and contracts instead. A schema defines data that is sent between endpoints, whileas a contract defines behavior of the service. In web services parlance, a schema can be built in XSD and a contract in WSDL. The use of schemas and contracts ensures more stability (= remain unchanged over time) than their types and classes equivalents in the distributed world.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Compatibility based upon policy &lt;/STRONG&gt;states that services agree on how they interact based on policies, describing the capabilities and requirements of the service (e.g. for communication with the service, encryption of data is required). Because of this, the operations (behavior, contract) is separated from contraints that should be enforced on these operations.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;Mike Gilbert has a nice post on SOA over &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/mikegil/archive/2005/01/03/345861.aspx"&gt;&lt;FONT face=Arial&gt;here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial&gt;. &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;In the end, services can be seen as "super web services", meaning that limitations of web services are removed in the SO world. Samples include the strong binding to the HTTP protocol and the request/response model but also the removal of limitations on the field of reliability, transactions, policy expression, etc.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Arial color=#000080 size=3&gt;Indigo from a 10,000 foot view&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Simply stated: SO is the specification, Indigo is Microsoft's implementation of SO. To kick off, we'll jump into some marketing talk on Indigo:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;Indigo is a &lt;STRONG&gt;&lt;FONT color=#a52a2a&gt;.NET-based technology to build service-oriented solutions&lt;/FONT&gt;.&lt;/STRONG&gt; Exactly what we've been describing above.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Indigo provides &lt;STRONG&gt;&lt;FONT color=#a52a2a&gt;unification of both the programming model and the runtime&lt;/FONT&gt;.&lt;/STRONG&gt; In the past, several technologies existed to create distributed applications. An overview:&lt;/FONT&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;DCOM and .NET Remoting &lt;/STRONG&gt;concentrate on remote objects and suffer from the "remote objects are transparent to the client" boobytrap. .NET Remoting is all about communication across application domains and is very extensible (channels, sinks, etc). The technology is fully object-oriented and works with various transport mechnanisms and protocols (e.g. binary of TCP, SOAP over HTTP, etc).&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;ASP.NET XML Web Services &lt;/STRONG&gt;(.asmx) is Microsoft's first implementation of webservices on the .NET platform. As part of .NET's message, XML Web Services provide interoperability with other platforms and offers a service-oriented design. However, it lacks built-in support for new WS-* standards and can only work with HTTP.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Web Service Enhancements &lt;/STRONG&gt;(WSE) extend the .asmx model and provide support for WS-* standards and other protocols and communication patterns than the plain vanilla HTTP response/request model. WSE is fully .NET-based and uses the power of managed code to deliver its functionality (e.g. attribute-based development). However, it lacks support for transactions, reliable messaging, etc.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;MSMQ&lt;/STRONG&gt; and System.Messaging concentrate on reliable messaging with queues as the communication mechanism. System.Messaging makes the use of MSMQ easier in the managed world. However, MSMQ is not available to services directly and is only usable in .NET-to-.NET scenarios.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;COM+ &lt;/STRONG&gt;Enterprise Services and System.EnterpriseServices are based on the notion of components that are decorated with .NET attributes to provide several services such as security and transactions. COM+ is component-based and built on the OO paradigm. However, it's a .NET-only story and lacks interoperability.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;Indigo is &lt;STRONG&gt;&lt;FONT color=#a52a2a&gt;scale-invariant&lt;/FONT&gt;&lt;/STRONG&gt;. In more detail:&lt;/FONT&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;Scales &lt;STRONG&gt;down&lt;/STRONG&gt; to devices such as printers, cameras, etc with support for WS protocols. On longer term, you can expect to see Indigo support on smart devices using the Compact Framework.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Scales &lt;STRONG&gt;in &lt;/STRONG&gt;meaning that inter-process (or inter-appdomain) communication is damn fast (greater than or equal to .NET Remoting and/or Enterprise Services).&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Scales &lt;STRONG&gt;up &lt;/STRONG&gt;on large systems with high throughput and scalability which is mission-critical to systems with high workload and tons of consumers. Compared to existing technologies, Indigo wants to be superior.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Scales &lt;STRONG&gt;out&lt;/STRONG&gt; by adding machines, e.g. in farms or on the routing-level (cf. WS-Routing and WS-Addressing). Information on these protocols applied to WSE 2.0 can be found on &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebsrv/html/wsroutetowsadd.asp"&gt;MSDN&lt;/A&gt;.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Scales &lt;STRONG&gt;away&lt;/STRONG&gt; across organizations and geographies, referring to the use of interoperable protocols, reliable messaging and transmission fault tolerance and federation of security (cf. the former "TrustBridge" project and &lt;A href="http://msdn.microsoft.com/theshow/episode.aspx?xml=theshow/en/Episode047/manifest.xml"&gt;ADFS&lt;/A&gt;).&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;Indigo puts &lt;STRONG&gt;&lt;FONT color=#a52a2a&gt;interoperability &lt;/FONT&gt;&lt;/STRONG&gt;in the spotlight. Examples include:&lt;/FONT&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;On the field of transport, there's support for the well-known omnipresent &lt;A href="http://www.w3.org/Protocols/rfc2616/rfc2616.html"&gt;HTTP&lt;/A&gt; protocol.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;The central communication and messaging format is in &lt;A href="http://www.w3.org/XML/"&gt;XML&lt;/A&gt; and associated technologies such as XSD and XPath.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;For messaging, &lt;A href="http://www.w3.org/TR/soap/"&gt;SOAP&lt;/A&gt; and &lt;A href="http://www.w3.org/Submission/ws-addressing/"&gt;WS-Addressing&lt;/A&gt; are used.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Metadata is described by &lt;A href="http://www.w3.org/TR/wsdl"&gt;WSDL&lt;/A&gt;, &lt;A href="http://www-128.ibm.com/developerworks/library/specification/ws-polfram/"&gt;WS-Policy&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/library/en-us/dnglobspec/html/ws-metadataexchange.pdf"&gt;WS-Metadata Exchange&lt;/A&gt; standards.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Security is based on &lt;A href="http://www-128.ibm.com/developerworks/webservices/library/ws-secure/"&gt;WS-Security&lt;/A&gt;, &lt;A href="http://www-128.ibm.com/developerworks/library/specification/ws-trust/"&gt;WS-Trust&lt;/A&gt; and &lt;A href="http://www-128.ibm.com/developerworks/library/specification/ws-fed/"&gt;WS-Federation&lt;/A&gt; standards.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Reliability is realized through &lt;A href="http://www-128.ibm.com/developerworks/library/specification/ws-rm/"&gt;WS-Reliable Messaging&lt;/A&gt;.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Transactions between services can be established using &lt;A href="http://www-128.ibm.com/developerworks/library/specification/ws-tx/"&gt;WS-Transactions&lt;/A&gt; and &lt;A href="http://www-128.ibm.com/developerworks/library/specification/ws-tx/"&gt;WS-Coordination&lt;/A&gt;.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; Also search on MSDN for more information about all of the aforementioned technologies and specifications.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=3&gt;&lt;STRONG&gt;Basic architecture of Indigo&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Time for some illustrations. The picture below shows the basic layered architecture of Indigo.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.bartdesmet.net/images/indigo.jpg" target=_blank&gt;&lt;IMG src="http://www.bartdesmet.net/images/indigo.jpg" width=400&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Let's go through this picture from top to bottom:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;At the uppermost layer, we have our &lt;STRONG&gt;application&lt;/STRONG&gt; (a service) that's using the Indigo stack below.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Next, we have a series of &lt;STRONG&gt;messaging services&lt;/STRONG&gt; that provide functionality to the application above. Samples include queuing, routing, eventing and discovery of services.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;The &lt;STRONG&gt;service model &lt;/STRONG&gt;provides the basic service-related functionality. This layer is all about behavior, such as error behavior, instance behavior, activation behavior, concurrency and transactions, etc.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;The &lt;STRONG&gt;messaging &lt;/STRONG&gt;layer delivers all functionality to the service model to create channels and to transport the messages between services. It also provides "side-services" such as security, reliability, policy and encoding. For transport channels such as HTTP, TCP, MSMQ, cross-process are supported.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Last but not least, the Indigo application is &lt;STRONG&gt;hosted &lt;/STRONG&gt;in e.g. IIS, Avalon, an executable, a Windows Service or COM+.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;I'll dive deeper into these in more detail further on and in upcoming posts on Indigo.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=3&gt;&lt;STRONG&gt;Some crucial concepts&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Right, we know what Indigo does and we know the basic layered architecture. Time for some concepts that will be crucial for further understanding of Indigo stuff. Concentrate on the following simple sentence:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;Services interact by exchanging messages.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;This simple statement implies a lot of questions. Some samples: How are messages exchanged physically? Who send and who recieves messages? How does such a message look like? Are there different interaction patterns possible? Now the answers:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;The &lt;FONT color=#a52a2a&gt;&lt;STRONG&gt;key players in messaging&lt;/STRONG&gt; &lt;/FONT&gt;are &lt;STRONG&gt;clients&lt;/STRONG&gt; that initiate communication, the &lt;STRONG&gt;services&lt;/STRONG&gt; that accept these messages and respond to them and possible &lt;STRONG&gt;intermediaries&lt;/STRONG&gt; that route messages to their destination and inspect/manipulate the messages optionally. Notice that services themselves can also act as clients, resulting in a chain of services that are linked to each other.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;The &lt;STRONG&gt;&lt;FONT color=#a52a2a&gt;message structure &lt;/FONT&gt;&lt;/STRONG&gt;in Indigo is based on SOAP, which is on its turn XML-based. From a macroscopic point of view, a message contains a series of &lt;STRONG&gt;headers&lt;/STRONG&gt; as well as a &lt;STRONG&gt;body&lt;/STRONG&gt;. Together, this forms a so-called &lt;STRONG&gt;SOAP Envelope&lt;/STRONG&gt;. However, the encoding of the message and the transport protocols are configurable.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;&lt;FONT color=#a52a2a&gt;Channels&lt;/FONT&gt;&lt;/STRONG&gt; are the pipelines over which information flows. The function of channels is twofold. First, channels are used for physical delivery of messages over various &lt;STRONG&gt;transport protocols&lt;/STRONG&gt; such as HTTP, TCP, MSMQ and cross-proc, also providing &lt;STRONG&gt;reliability&lt;/STRONG&gt; and/or &lt;STRONG&gt;session&lt;/STRONG&gt; services if desired. Second, messages are manipulated by channels for &lt;STRONG&gt;encoding&lt;/STRONG&gt; (binary, MTOM, etc) and decoration of messages to provide &lt;STRONG&gt;security&lt;/STRONG&gt; features (e.g. Windows authentication).&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Various &lt;STRONG&gt;&lt;FONT color=#a52a2a&gt;interaction patterns &lt;/FONT&gt;&lt;/STRONG&gt;exist in the world of Indigo. Starting with one-way &lt;STRONG&gt;simplex&lt;/STRONG&gt; communication, over two-way &lt;STRONG&gt;duplex &lt;/STRONG&gt;communication to &lt;STRONG&gt;request/reply based&lt;/STRONG&gt; patterns.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Now look at a &lt;STRONG&gt;&lt;FONT color=#008000&gt;service as a black box&lt;/FONT&gt;&lt;/STRONG&gt;. What should the service expose? Two seconds left for the answer :-). Right, first of all we need a &lt;STRONG&gt;description&lt;/STRONG&gt; of the service because of the loosely coupling. This means it should be possible to discover information about what the service provides (behavior, operations, policy) and how to interact with it (message contracts). The discovery and description aspect of services is accomplished by WSDL, XSD, WS-Policy and WS-Metadata Exchange. Getting to know each other is one thing, working with each other is another thing. So, we also need &lt;STRONG&gt;endpoints&lt;/STRONG&gt; for communication (as described by the obtained description) using SOAP.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Apart from the service's logic there should be other things &lt;STRONG&gt;&lt;FONT color=#008000&gt;inside a service&lt;/FONT&gt;&lt;/STRONG&gt; as well. First, it needs to be able to provide its metadata to describe itself and the message contracts. That's the &lt;STRONG&gt;service description&lt;/STRONG&gt; part of the inside story. Next, the consumer of the service needs to be able to get in through an endpoint. Therefore, we need a description of the way the service interacts with the outside world, which is called a &lt;STRONG&gt;binding&lt;/STRONG&gt;. Such a binding encapsulates the transport mechanism (e.g. HTTP, TCP, named pipe, MSMQ), encoding (text, binary, MTOM) and requirements on the field of security, sessions, reliablity and transactions as well as available messaging patterns. The &lt;STRONG&gt;endpoint&lt;/STRONG&gt; on the other hand is all about where the service is (an address) associated to a service contract and a binding. This brings is us the missing piece of the puzzle, being the &lt;STRONG&gt;contracts&lt;/STRONG&gt;. Indigo knows three kinds of contracts:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;&lt;FONT color=#800080&gt;Service contracts &lt;/FONT&gt;&lt;/STRONG&gt;define the operations the service provides and its behavior. Compare such a contract with an interface from the OO world and you should have a pretty good understanding of such a contract. Of course, the service needs to implement the control to be useful (a class).&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;&lt;FONT color=#800080&gt;Data contracts &lt;/FONT&gt;&lt;/STRONG&gt;specify data structures that are used to pass data to/from the service. The big idea of data contracts is to decouple internal class representations from the messaging format, which can be described in XSD for interoperability reasons and loose coupling.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT color=#800080&gt;&lt;STRONG&gt;Message contracts &lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;allow to manipulate the message structure and format of messages that are sent between services and consumers.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;A little illustration can make things more clear I believe. Assume you have a &lt;U&gt;service contract&lt;/U&gt; called &lt;EM&gt;IWeatherService&lt;/EM&gt; that allows to report the weather using an operation that accepts a location (postal code, state, country in a &lt;U&gt;data contract&lt;/U&gt;) and returns a weather report (temperature, air pressure in another &lt;U&gt;data contract&lt;/U&gt;). The functionality of the service can be exposed through an &lt;U&gt;endpoint&lt;/U&gt; consisting of an &lt;U&gt;address&lt;/U&gt; (http://blabla/WeatherService or net.tcp://blabla:port/WeatherService or net.pipe://blabla/WeatherService or net.msmq://localhost/queue/WeatherService) and a &lt;U&gt;binding&lt;/U&gt; mapping the address to the contract and enriching it with e.g. security. Thus, as a little rule of the Indigo thumb, remember the following:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#ff1493&gt;&lt;STRONG&gt;&lt;EM&gt;endpoint = address + binding + contract&lt;/EM&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Services expose functionality but also have intrinsic &lt;STRONG&gt;&lt;FONT color=#008000&gt;runtime behavior&lt;/FONT&gt;&lt;/STRONG&gt;. Indigo provides support for the following:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Concurrency&lt;/STRONG&gt; - If multiple consumers use your service, how does it work with threading? Possible answers are: one single thread can access the service instance, multiple threads can access the service instance or reentrancy support meaning that threads can call into one another.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Error handling &lt;/STRONG&gt;- Who will handle errors in the service? The developer himself, the Indigo framework or the client of the service (i.e. sending a fault to the client).&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Instancing&lt;/STRONG&gt; - People who've been working with .NET Remoting will know concepts such as singleton and singlecall. Indigo supports four mode: singleton (one instance serving all consumers), per call (used in stateless scenarios, such as classic web services), private session (each client session has its own service instance) and shared session (groups of clients can share a single session).&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Lifetime&lt;/STRONG&gt; - When using stateful sessions (e.g. a private session), there needs to be a session start en session end 'event'. The service itself can control the lifetime of the session if operations on the service are marked as session initiators and/or session terminators.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Metadata&lt;/STRONG&gt; - This answers the question: "how can the service present itself to (possible) consumers?". By enabling metadata to be requested on demand through a request, a service is made self-describing using WSDL, WS-Policy, WS-Metadata Exchange.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Security &lt;/STRONG&gt;- Service security is composed of various aspects, including message integrity and confidentiality, user authentication and authorization, DoS and replay (attack) detection, auditing. Indigo has support for PKI using X.509&amp;nbsp;but also supports Kerberos, plain old username/password mechanisms and more recent standards such as SAML.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Throttling&lt;/STRONG&gt; - Used to limit the total number of service instances, concurrent threads, exchanged or accepted messages, etc. Using throttling, one can control resource consumption of the service, aiding with scalability measurement and planning.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Transactions&lt;/STRONG&gt; - Indigo has support for transactions across services using WS-Atomic Transaction and other WS-* standards. This allows clients to start a transaction and flow it to one or more services that can then participate in that transaction. The service behavior for transactions is used to indicate whether the service will accept a transaction, requires a (new) transaction, etc.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=3&gt;&lt;STRONG&gt;Getting started&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Enough theory for now, let's jump onto the Indigo wagon with a little sample. But first, some information on how to set up the stuff needed to bring our sample to a good end.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Download each of the following on either Windows XP (+ SP2) or Windows Server 2003 (+ SP1):&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=7ABD8C8F-287E-4C7E-9A4A-A4ECFF40FC8E&amp;amp;displaylang=en"&gt;.NET Framework Version 2.0 Redistributable Package Beta 2 (x86)&lt;/A&gt;&amp;nbsp;- the .NET runtime on which Indigo is built&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Visual Studio 2005 Beta 2 - can be obtained via beta programmes (e.g. Microsoft EMEA's &lt;A href="http://www.microsoft.com/emea/msdn/betaexperience/"&gt;TheBetaExperience&lt;/A&gt;) or on &lt;A href="http://msdn.microsoft.com/subscriptions"&gt;MSDN Subscriptions&lt;/A&gt;&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=00e76c8a-e571-440e-929f-dc748136a886&amp;amp;DisplayLang=en"&gt;"Indigo" Beta 1 MSMQ Support Package&lt;/A&gt;&amp;nbsp;- needed for MSMQ support for queued channels (only needed for&amp;nbsp;beta 1 currently)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=32187993-4736-4a06-97c7-1282b67e3137&amp;amp;DisplayLang=en"&gt;COM+ Hotfix for "Indigo"&lt;/A&gt;&amp;nbsp;- contains&amp;nbsp;WS-AtomicTransaction support for MSDTC and allows COM+ apps to be exposed using Indigo&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ce888b4c-ccbd-452f-9d90-f4b7190cca24&amp;amp;DisplayLang=en"&gt;Microsoft Pre-Release Software WinFX Runtime Components Beta 1&lt;/A&gt;&amp;nbsp;- package with beta 1 of both Indigo (Windows Communication Foundation) and Avalon (Windows Presentation Foundation)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=23A22468-5807-4FF7-A363-CE6FE69B8F04&amp;amp;displaylang=en"&gt;Microsoft WinFX Software Development Kit for Microsoft Pre-Release Windows Operating System Code-Named "Longhorn", Beta 1 Web Setup&lt;/A&gt; - WinFX SDK with documentation and samples for Indigo and Avalon development (despite the naming of the download also supported on Windows XP and Windows Server 2003)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=45F9BE99-3264-4BF1-8879-78A7A95D9217&amp;amp;displaylang=en"&gt;Microsoft Visual Studio Extensions for WinFX Beta 1&lt;/A&gt; - Visual Studio 2005 Beta 2 support for WinFX components and the WinFX SDK documentation&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;and install each of these in ascending order.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=3&gt;&lt;STRONG&gt;Your first Indigo application&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;As I don't want to be banned from the demo writing community I should start with the mandatory "Hello World" demo :-). The following instructions will guide you through the process of creating both an Indigo service and client:&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;Start Visual Studio 2005 and create a new Project in C# and choose a Console Application as the template. Call it IndigoDemo.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;In the Solution Explorer, right-click on References and choose "Add Reference...". Select System.ServiceModel from the list and click OK.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial&gt;Add the following namespace import to the top of the Program.cs file:&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;using&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt; System.ServiceModel;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;In the IndigoDemo namespace, we'll first create the service contract. We'll choose for a contract named IHello with two members, SendMeGreeting and HelloIndigo, as shown below. Notice the use of an interface and the ServiceContract and OperationContract attributes:&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;[&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008080 size=2&gt;ServiceContract&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;interface&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008080 size=2&gt;IHello&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;{&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;[&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;OperationContract&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&lt;/FONT&gt;&lt;FONT size=2&gt; SendMeGreetings(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; name);&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;[&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;OperationContract&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; HelloIndigo();&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;To the same IndigoDemo namespace, add a class called HelloService that implements IHello, as shown below:&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;HelloService&lt;/FONT&gt;&lt;FONT size=2&gt; : &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008080 size=2&gt;IHello&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; IHello Members&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; SendMeGreetings(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; name)&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;.Format(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"Hello {0}"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;, name);&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; HelloIndigo()&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"Hello Indigo"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;#endregion&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;Now it's time to create the "service host" that will run the service. ServiceHost is the class you need to do this. The following Main method contains the Indigo hosting code for our service:&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;static&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; Main(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;[] args)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Host the service in a simple console application&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;using&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;ServiceHost&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;HelloService&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt; svc = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;ServiceHost&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;HelloService&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;())&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Add endpoint for the IHello contract, with a default WS-Profile binding on the specified address&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;svc.AddEndpoint(&lt;BR&gt;&lt;FONT color=#008000&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;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;IHello&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;),&lt;BR&gt;&lt;FONT color=#008000&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;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;WSProfileBinding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;(),&lt;BR&gt;&lt;FONT color=#008000&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;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;&lt;FONT face="Courier New"&gt;"http://localhost:1234/HelloService"&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;);&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;//&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;//Launch the service&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;//&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;svc.Open();&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Console&lt;/FONT&gt;&lt;FONT size=2&gt;.WriteLine(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"Service is running. Press &amp;lt;ENTER&amp;gt; to stop."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;.ReadLine();&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#008000&gt;//&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;//Stop the service&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;//&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;svc.Close();&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;In this code, we create a (generic) instance of a ServiceHost for our HelloService. Next, an endpoint is added, which consists of an address, a binding and a service contract, being the interface IHello which was annotated with the ServiceContract tag earlier. Starting the service is as simply as calling Open, and stopping it can be done using Close.&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;
&lt;P&gt;So far so good. The service is ready, now we'll jump to the client-side piece of our demo. In the Visual Studio 2005 IndigoDemo solution, add a new C# Console Application project called IndigoDemoClient.&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;In the Solution Explorer under IndigoDemoClient, right-click on References and choose "Add Reference...". Select System.ServiceModel from the list and click OK.&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;
&lt;P&gt;In order to make our client aware of the service contract of our service, we need to copy the IHello interface over here as well. We'll see a sample with discovery later on. For now, just copy the IHello interface to the IndigoDemoClient namespace:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;[&lt;FONT color=#008080 size=2&gt;ServiceContract&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;interface&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008080 size=2&gt;IHello&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;{&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;[&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;OperationContract&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&lt;/FONT&gt;&lt;FONT size=2&gt; SendMeGreetings(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; name);&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;[&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;OperationContract&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; HelloIndigo();&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;
&lt;P&gt;Time for the client. As you might expect, we need a proxy. How to obtain that proxy? Using the generic ChannelFactory.CreateChannel static factory method, as shown below:&lt;FONT size=2&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;static&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; Main(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;[] args)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;//&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;//Ask the user for input&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;//&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Console&lt;/FONT&gt;&lt;FONT size=2&gt;.WriteLine(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"Client is running. Enter your name and press &amp;lt;ENTER&amp;gt; to talk to the service."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; name = &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;.ReadLine();&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Create a proxy for the service&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;IHello&lt;/FONT&gt;&lt;FONT size=2&gt; proxy = &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;ChannelFactory&lt;/FONT&gt;&lt;FONT size=2&gt;.CreateChannel&amp;lt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;IHello&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&amp;gt;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Uri&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"http://localhost:1234/HelloService"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;WSProfileBinding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Call the service to send a greeting&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; greeting = proxy.SendMeGreetings(name);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;//&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;//Housekeeping&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;//&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;((&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;IChannel&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;) proxy).Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;IChannel&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;) proxy).Dispose();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;//&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;//Output to the user&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Console&lt;/FONT&gt;&lt;FONT size=2&gt;.WriteLine(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"The server answered: {0}"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;, greeting);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Console&lt;/FONT&gt;&lt;FONT size=2&gt;.WriteLine(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"Press &amp;lt;ENTER&amp;gt; to quit."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;.ReadLine();&lt;BR&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;This code&amp;nbsp;should be pretty self-explanatory in my very opinion. As you can see, the use of generics makes creation of a proxy easier but also introduces some plumbing (see the housekeeping part). You can avoid this plumbing however by applying the following trick to IHello:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;[&lt;FONT color=#008080 size=2&gt;ServiceContract&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;interface&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008080 size=2&gt;IHello &lt;FONT color=#000000&gt;:&lt;/FONT&gt; IChannel&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;{&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;[&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;OperationContract&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&lt;/FONT&gt;&lt;FONT size=2&gt; SendMeGreetings(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; name);&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;[&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;OperationContract&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; HelloIndigo();&lt;BR&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;and changing Main like this:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;static&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; Main(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;[] args)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Ask the user for input&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/FONT&gt;&lt;FONT size=2&gt;.WriteLine(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"Client is running. Enter your name and press &amp;lt;ENTER&amp;gt; to talk to the service."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; name = &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;.ReadLine();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Placeholder for the answer&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; greeting;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Create a proxy for the service&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;using&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;IHello&lt;/FONT&gt;&lt;FONT size=2&gt; proxy = &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;ChannelFactory&lt;/FONT&gt;&lt;FONT size=2&gt;.CreateChannel&amp;lt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;IHello&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&amp;gt;(&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Uri&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"http://localhost:1234/HelloService"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;WSProfileBinding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;()))&lt;BR&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Call the service to send a greeting&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;greeting = proxy.SendMeGreetings(name);&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Close connection to the service&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;proxy.Close();&lt;BR&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Output to the user&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/FONT&gt;&lt;FONT size=2&gt;.WriteLine(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"The server answered: {0}"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;, greeting);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/FONT&gt;&lt;FONT size=2&gt;.WriteLine(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"Press &amp;lt;ENTER&amp;gt; to quit."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;.ReadLine();&lt;BR&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Time to run it. Right-click the IndigoDemo solution on top of the Solution Explorer and choose Properties. In Common Properties, Startup Project select Multiple startup projects&amp;nbsp;and set the action for both the IndigoDemo and IndigoDemoClient application to 'Start'. Click OK.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Now hit F5 to run the application. Once the service console prints "Service is running. Press &amp;lt;ENTER&amp;gt; to stop." switch to the client console and type you name. Output similar to the following should be displayed:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;Client is running. Enter your name and press &amp;lt;ENTER&amp;gt; to talk to the service.&lt;BR&gt;Bart&lt;BR&gt;The server answered: Hello Bart&lt;BR&gt;Press &amp;lt;ENTER&amp;gt; to quit.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Exit the client by pressing &amp;lt;ENTER&amp;gt; but leave the service host console window running.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;In this first sample you saw how to create both a service and a client without the use of a configuration file, just by writing plain code. I chose to use the WSProfileBinding which is well-suited for HTTP (or HTTPS) services with the well-known Request-Response (or Simplex) message pattern style. One of the things we saw was how to create a proxy using the ChannelFactory class of Indigo. Now I want to take you to the next step of discovering a running service:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Assuming you followed the steps above correctly, the service should still be running now. If it's not, restart the Visual Studio 2005 debugger using F5 and wait for the service to come alive.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Open an instance of Internet Explorer and go to &lt;A href="http://localhost:1234/HelloService"&gt;http://localhost:1234/HelloService&lt;/A&gt;. You should see a page "Indigo Service" that tells you "You have created an Indigo service." If you didn't realize this yet, it's time to awake now :-). The page also contains a link to the well-known WSDL discovery address on &lt;A href="http://localhost:1234/HelloService?wsdl"&gt;http://localhost:1234/HelloService?wsdl&lt;/A&gt;, just like this was the case with classic web services.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Indigo provides a command-line utility called svcutil.exe which is accessible through the Visual Studio 2005 Command Prompt. Call svcutil.exe /? to see the functionality it provides:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;C:\temp&amp;gt;svcutil&lt;BR&gt;Microsoft (R) Service Model Metadata Tool&lt;BR&gt;[Microsoft(R) .NET Framework, Version 2.0.50215.0]&lt;BR&gt;Copyright (C) Microsoft Corporation. All rights reserved.&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" size=2&gt;svcutil.exe: Utility to generate ServiceModel code from Metadata documents, and&lt;BR&gt;vice versa.&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - USAGE -&lt;BR&gt;svcutil.exe [options] [metadataPath* | assemblyPath* | metadataUrl*]&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;BR&gt;&lt;BR&gt;svcutil.exe differs from wsdl.exe on quite some fields. One notable difference is the support to work in two ways: metadata-to-assembly and assembly-to-metadata.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Time to experiment with it. Execute&amp;nbsp;svcutil.exe &lt;A href="http://localhost:1234/HelloService?wsdl"&gt;http://localhost:1234/HelloService?wsdl&lt;/A&gt;&amp;nbsp;as mentioned on the web page from step 2. The result should look like this:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;C:\temp&amp;gt;svcutil.exe &lt;/FONT&gt;&lt;A href="http://localhost:1234/HelloService?wsdl"&gt;&lt;FONT face="Courier New"&gt;http://localhost:1234/HelloService?wsdl&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;Microsoft (R) Service Model Metadata Tool&lt;BR&gt;[Microsoft(R) .NET Framework, Version 2.0.50215.0]&lt;BR&gt;Copyright (C) Microsoft Corporation. All rights reserved.&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;Generating files...&lt;BR&gt;C:\temp\tempuri.org.Bindings.cs&lt;BR&gt;C:\temp\output.config&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;Two files have been generated. Take a look at both of these using Notepad&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;In the first file, the tempuri.org.Bindings.cs file, you should find three members. First of all, there's a IHello interface that looks the same as the original one you wrote yourself in the service's code. The second interface is the IHelloChannel which derives from IHello and IProxyChannel. And last the most important class, HelloProxy. This class both derives from the IHello contract interface and the ProxyBase generic class. Notice that the address of the endpoint is not in the code, in contrast to the output of wsdl.exe in the (near) past. This variable information lives in the output.config file.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Open the output.config file and notice the following sections (marked in red):&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;BR&gt;&amp;lt;configuration xmlns="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/.NetConfiguration/v2.0"&gt;&lt;FONT face="Courier New"&gt;http://schemas.microsoft.com/.NetConfiguration/v2.0&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New"&gt;"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;system.serviceModel&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;client&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;FONT color=#ff0000&gt;endpoint&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;address&lt;/FONT&gt;="&lt;/FONT&gt;&lt;A href="http://localhost:1234/HelloService"&gt;&lt;FONT face="Courier New"&gt;http://localhost:1234/HelloService&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New"&gt;" bindingConfiguration="IHello"&lt;BR&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; bindingSectionName="customBinding" &lt;FONT color=#ff0000&gt;contractType&lt;/FONT&gt;="IHello"&amp;gt;&lt;BR&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;lt;addressProperties actingAs="&lt;/FONT&gt;&lt;A href="http://localhost:1234/HelloService"&gt;&lt;FONT face="Courier New"&gt;http://localhost:1234/HelloService&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New"&gt;"&lt;BR&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; identityData="" identityType="None" isAddressPrivate="false" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/endpoint&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/client&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bindings&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;customBinding&amp;gt;&lt;BR&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;lt;&lt;FONT color=#ff0000&gt;binding&lt;/FONT&gt; configurationName="IHello"&amp;gt;&lt;BR&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;lt;contextFlow transactions="Ignore" transactionHeaderFormat="OleTx"&lt;BR&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; logicalThreadId="Ignore" locale="Ignore" /&amp;gt;&lt;BR&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;lt;security algorithmSuite="Default" authenticationMode="SspiNegotiated"&lt;BR&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; contextMode="Session" defaultProtectionLevel="EncryptAndSign"&lt;BR&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; enableKeyDerivation="true" includeTimestamp="true" messageProtectionOrder="SignBeforeEncrypt"&lt;BR&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; securityVersion="WSSecurityXXX2005" secureConversationVersion="WSSecureConversationFeb2005"&lt;BR&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; trustVersion="WSTrustFeb2005" generateRequestSignatureConfirmation="false" /&amp;gt;&lt;BR&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;lt;&lt;FONT color=#000000&gt;httpTransport&lt;/FONT&gt; manualAddressing="false" maxMessageSize="65536"&lt;BR&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; authenticationScheme="Anonymous" bypassProxyOnLocal="false"&lt;BR&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; hostnameComparisonMode="StrongWildcard" mapAddressingHeadersToHttpHeaders="false"&lt;BR&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; proxyAuthenticationScheme="Anonymous" realm="" transferTimeout="00:01:00"&lt;BR&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; useSystemWebProxy="true" /&amp;gt;&lt;BR&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;lt;textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"&lt;BR&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; messageVersion="Default" encoding="utf-8" /&amp;gt;&lt;BR&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;lt;/binding&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/customBinding&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bindings&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/system.serviceModel&amp;gt;&lt;BR&gt;&amp;lt;/configuration&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;All of the marked sections should be easy to understand right now. There's an endpoint which consist of&amp;nbsp;- remember? - an address, a binding and a contract. Remember that these three go hand-in-hand all the time. I won't cover the other stuff of the config file for now, but most of the generated stuff is related to the WS-Profile binding that was specified concerning security, sessions, transport protocol and encoding.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Let's create a simple client now, at the command line. In the folder where the tempuri.org.Bindings.cs file was dropped, create a new file called demo.cs and add the following code to it:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;class Test&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HelloProxy proxy = new HelloProxy();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string result = proxy.SendMeGreetings(args[0]);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine("The Hello service returned '" + result + "'");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Now compile the tempuri.org.Bindings.cs file first, as follows:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;C:\temp&amp;gt;csc -r:System.ServiceModel.dll -t:library tempuri.org.Bindings.cs&lt;BR&gt;Microsoft (R) Visual C# 2005 Compiler version 8.00.50215.44&lt;BR&gt;for Microsoft (R) Windows (R) 2005 Framework version 2.0.50215&lt;BR&gt;Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Next, build the demo.cs file, referencing both the System.ServiceModel.dll and tempuri.org.Bindings.dll assemblies:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;C:\temp&amp;gt;csc -r:tempuri.org.Bindings.dll,System.ServiceModel.dll demo.cs&lt;BR&gt;Microsoft (R) Visual C# 2005 Compiler version 8.00.50215.44&lt;BR&gt;for Microsoft (R) Windows (R) 2005 Framework version 2.0.50215&lt;BR&gt;Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Last but not least, rename output.config to demo.exe.config:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;ren output.config demo.exe.config&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;Now run demo.exe with one parameter, specifying your name:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;C:\temp&amp;gt;demo Bart&lt;BR&gt;The Hello service returned 'Hello Bart'&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Works great. So far, we've been hosting our service in a console application. However, you can host the service in IIS as well (or in other hosts). Let me show how (assuming you have IIS 5.1 or 6.0 up and running and you installed .NET v2.0 and WinFX afterwards):&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;Stop your Visual Studio 2005 debugger if it's still running. Add a C# Type Library project to the solution and give it the name "IndigoDemoLibrary".&lt;BR&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;In the Solution Explorer under IndigoDemoLibrary, right-click on References and choose "Add Reference...". Select System.ServiceModel from the list and click OK.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Add the IHello interface and the HelloService class of the earlier IndigoDemo service project to the Class1.cs file. Save the file and compile the solution.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Open Windows Explorer and create a folder somewhere on your system. I'll be using c:\temp\HelloService. In this new folder, create a subfolder called bin.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Open the bin-folder of the IndigoDemoLibrary project, in my case C:\Documents and Settings\...\My Documents\Visual Studio 2005\Projects\IndigoDemo\IndigoDemoLibrary\bin\Debug, and copy the IndigoDemoLibrary.dll file to the bin folder (c:\temp\HelloService\bin) created in step 4 above.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;In the (root) folder created in step 4 above (c:\temp\HelloService), create a file called service.svc, with the following code:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&amp;lt;%@Service Language="C#" class="IndigoDemoLibrary.HelloService" %&amp;gt;&lt;BR&gt;&amp;lt;%@Assembly Name="IndigoDemoLibrary" %&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;In the same folder, create a web.config file containing:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;BR&gt;&amp;lt;configuration xmlns="&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;http://schemas.microsoft.com/.NetConfiguration/v2.0&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;system.serviceModel&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;services&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service serviceType="IndigoDemoLibrary.HelloService"&amp;gt;&lt;BR&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;lt;endpoint address="" bindingSectionName="wsProfileBinding" contractType="IndigoDemoLibrary.IHello, IndigoDemoLibrary" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/services&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/system.serviceModel&amp;gt;&lt;BR&gt;&amp;lt;/configuration&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Now it's time to configure the Indigo service virtual directory in IIS. Go to Start, Run, enter "inetmgr" (without quotes) and click OK. Locate the "Default Web Site" under &amp;lt;computername&amp;gt;\Web Sites.&amp;nbsp;Right-click and choose New, Virtual Directory. Click Next. In the field Alias specify "HelloService" (wtihout quotes) and click Next again. Now specify the folder you created in step 3 (c:\temp\HelloService). Click Next. On the "Access Permissions" wizard screen make sure both Read and Run scripts are enabled and click Next. Finally, click on Finish.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;If you have both .NET v1.x and v2.0 on the machine, right click on the HelloService virtual directory you just created and go to the Properties. On the ASP.NET tab in the first dropdownlist select version 2.0.50215.0 and click OK.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Open an Internet Explorer instance and navigate to &lt;A href="http://localhost/helloservice/service.svc"&gt;http://localhost/helloservice/service.svc&lt;/A&gt;. You should get to see the same page as you saw earlier with our console-hosted Indigo service.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;I guess you'll be able to figure out for yourself how to adapt the demo.exe.config file from the previous demo in order to use the IIS-hosted Indigo service instead. Small tip: you need to change an address on two places, somewhere in the neighborhood of the &amp;lt;endpoint&amp;gt; tag&amp;nbsp;:-). In case you're not seeing clear enough, an alternative configuration file is listed below:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;BR&gt;&amp;lt;configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;system.serviceModel&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;client&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint&lt;BR&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; address="http://localhost/HelloService/service.svc"&lt;BR&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; bindingConfiguration="IHello"&lt;BR&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; bindingSectionName="wsProfileBinding"&lt;BR&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; contractType="IHello" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/client&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bindings&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsProfileBinding&amp;gt;&lt;BR&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;lt;binding configurationName="IHello" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/customBinding&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bindings&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/system.serviceModel&amp;gt;&lt;BR&gt;&amp;lt;/configuration&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;FONT face=Arial&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=3&gt;&lt;STRONG&gt;What's coming next?&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;In my next Indigo-related posts, I'll cover data and message contracts, other types of addresses and binding and much more. Stay tuned once again ... you ain't see nothing yet :-).&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=3517" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Avalon_2C00_+Indigo_2C00_+WinFX_2C00_+XAML/default.aspx">Avalon, Indigo, WinFX, XAML</category></item><item><title>My Dear Huge Demo VPC</title><link>http://community.bartdesmet.net/blogs/bart/archive/2005/08/31/3510.aspx</link><pubDate>Wed, 31 Aug 2005 22:06:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:3510</guid><dc:creator>bart</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=3510</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2005/08/31/3510.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;After more than 8 hours looking at progress bars, my brand new VPC with beta stuff is ready. It contains:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Windows XP SP2 + Platform SDK&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Office 2003 SP1&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;.NET Framework 1.1&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;.NET Framework 2.0 Beta 2&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;WinDbg 6.5&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Internet Explorer 7 Beta 1&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Visual Studio 2005 Team Suite Beta 2&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;SQL Server 2005 CTP&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Microsoft Shell Beta 1 (MSH aka Monad)&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;WinFS Beta 1 + SDK&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;WinFX Beta 1 (Avalon, Indigo) + Visual Studio Extensions + SDK&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Time to clone the VPC harddisk image (about 16 GB used disk space) and start playing with all this stuff. You'll see posts about all this exciting stuff later on over here. Stay tuned!&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=3510" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/.NET+Framework+v2.0/default.aspx">.NET Framework v2.0</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Avalon_2C00_+Indigo_2C00_+WinFX_2C00_+XAML/default.aspx">Avalon, Indigo, WinFX, XAML</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Windows+PowerShell/default.aspx">Windows PowerShell</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Windows+Vista/default.aspx">Windows Vista</category></item><item><title>Do you know Windows Presentation Foundation and Windows Communication Foundation already? Yes, you do!</title><link>http://community.bartdesmet.net/blogs/bart/archive/2005/07/28/3231.aspx</link><pubDate>Fri, 29 Jul 2005 06:54:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:3231</guid><dc:creator>bart</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=3231</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2005/07/28/3231.aspx#comments</comments><description>&lt;FONT face=Arial size=2&gt;Avalon, Indigo and other Vista subsystems have been renamed to marketing-shaped flashy names :-). More information on &lt;A href="http://blogs.msdn.com/dglover/archive/2005/07/28/444277.aspx"&gt;Dave Glover's blog&lt;/A&gt;.&lt;/FONT&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=3231" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Avalon_2C00_+Indigo_2C00_+WinFX_2C00_+XAML/default.aspx">Avalon, Indigo, WinFX, XAML</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Windows+Vista/default.aspx">Windows Vista</category></item><item><title>Microsoft® Pre-Release Software Code Named “Avalon” and “Indigo” Beta1 RC (ISO)</title><link>http://community.bartdesmet.net/blogs/bart/archive/2005/07/25/3055.aspx</link><pubDate>Mon, 25 Jul 2005 19:48:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:3055</guid><dc:creator>bart</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=3055</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2005/07/25/3055.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Well, the title should be clear. You can grab the bits &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=25c7e9f0-97cf-4c95-b321-53b814ad82c4&amp;amp;displaylang=en"&gt;&lt;FONT face=Arial size=2&gt;over here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;. One extract from the website:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;EM&gt;This Beta1 "RC" release supports &lt;/EM&gt;&lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/vs2005"&gt;&lt;FONT face=Arial size=2&gt;&lt;EM&gt;Visual Studio 2005 Beta2&lt;/EM&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;&lt;EM&gt; and the .NET Framework 2.0 beta 2.&amp;nbsp; There is also an updated &lt;/EM&gt;&lt;/FONT&gt;&lt;A href="http://download.microsoft.com/download/5/4/0/5407D6E4-740E-413E-8E91-EF7AC53A478A/en_winfx_sdk_beta1_RC.iso"&gt;&lt;FONT face=Arial size=2&gt;&lt;EM&gt;WinFX SDK&lt;/EM&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;EM&gt;, including documentation, samples and tools available for this release. ... Supported Operating Systems: Windows Server 2003; Windows XP Service Pack 2&lt;/EM&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The WinFX SDK Beta1 RC can be downloaded &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=25c7e9f0-97cf-4c95-b321-53b814ad82c4&amp;amp;displaylang=en"&gt;&lt;FONT face=Arial size=2&gt;over here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;. Both files are ISOs, so you can use the VCD ISO tool from MSDN to mount it to a drive letter, or you can burn it to a cd-rom, or you can attach it to a virtual machine in Virtual PC or Virtual Server directly.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Ready for a download of over half a gig? Well, you should to become a real Indigoing Avaloner guy :-).&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=3055" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Avalon_2C00_+Indigo_2C00_+WinFX_2C00_+XAML/default.aspx">Avalon, Indigo, WinFX, XAML</category></item><item><title>Reliable messaging using MSMQ simplified</title><link>http://community.bartdesmet.net/blogs/bart/archive/2005/07/23/2933.aspx</link><pubDate>Sat, 23 Jul 2005 10:34:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:2933</guid><dc:creator>bart</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=2933</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2005/07/23/2933.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The upcoming technology release of Indigo will simplify a lot of stuff around MSMQ and other "distributed software" technologies out there. Based on attribute-based programming the underlying implementation of various application aspects such as reliable messaging, service policies, service contracts, etc is abstracted and hidden for the developer, while relying on the various standards that were developed recently on the WS-* field. In a similar way the use of various transportation channels such as HTTP, MSMQ, etc is made easier and more transparent. So far for some Indigo evangelism on my blog for now (I'll do extensive posting on Indigo later this year once beta 1 of "Windows Vista" hits the road).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;However, nowadays the development of a SOA-based application with reliable messaging support is not that straightforward as it could be. WSE currently lacks support for reliable messaging support as such through the WS-* series of standards. There is however a sample by architect George Copeland on how to do implement a reliable messaging solution using WSE 3.0 that can be found on MSDN on &lt;A href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnwse/html/wseandws-rm.asp"&gt;http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnwse/html/wseandws-rm.asp&lt;/A&gt;. In the first half of this year however (this article is dated in June this year) I came across the problem of implementing such a reliable messaging solution that could be combined with a service-oriented approach, as part of my last year's dissertation (which can be downloaded on &lt;A href="http://www.bartdesmet.net/download/thesis/"&gt;http://www.bartdesmet.net/download/thesis/&lt;/A&gt;, in Dutch however). In this post I'll show you some of this stuff.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;&lt;STRONG&gt;Basics of MSMQ&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;If you ask a developer for the Windows platform for a messaging solution in the Windows OS, he/she should come up with MSMQ as the answer number one. I won't explain MSMQ itself over here, more information can be found on &lt;A href="http://www.microsoft.com/msmq"&gt;www.microsoft.com/msmq&lt;/A&gt;&amp;nbsp;(look for MSMQ 3.0, which is the XP/2003 version of the technology). In .NET you can use the MSMQ technology by taking advantage of the System.Messaging namespace which is pretty straightforward to use. The basic steps look like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Create a message queue using the MSMQ management tools, through an installer class or using code (MessageQueue.Create). You can choose to create a public queue or a private queue, with or without transactional support.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Put messages on the queue in application A, using the Send method on the MessageQueue class. The message object should be marked as [Serializable] in order to serialize it and put it on the queue as a message. To send more complex messages with support for encryption, priority based delivery, timeout values, etc you have to use the Message class instead.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Receive the message at the other side (application B) using the Receive method on the MessageQueue class, pointing to the same queue. This method returns a Message object, from which you can get the message itself by using the Body property. In reality, you'll have to attach a formatter to the message queue instance to make deserialization possible, based on the original type of the message object.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;In code, this looks as follows:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;//sender&lt;BR&gt;MessageQueue mq = new MessageQueue(path);&lt;BR&gt;Message msg = new Message(body_object_of_message); //assume the type of this object to be MyMessageType&lt;BR&gt;mq.Send(msg, somelabel); //th&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;e label can be a GUID or a textual message&lt;BR&gt;&lt;BR&gt;//receiver&lt;BR&gt;MessageQueue mq = new MessageQueue(path);&lt;BR&gt;mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(MyMessageType) }); //alternatively use a binary formatter&lt;BR&gt;Message msg = mq.Receive(); //use a &lt;BR&gt;MyMessageType original_message = (MyMessageType) msg.Body;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;As you can see, this approach does not have a service-oriented look and feel. First of all, the messaging stuff is far too heavy to code using the System.Messaging namespace. Let's say it's too low-level to be really handy to program. A second drawback is the fact that you need to wrap a series of parameters to some call in a (serializable) message object. In contrast, a web service is far more easy to use:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;//sender&lt;BR&gt;object res = proxy.DoSomething(par1, par2, par3);&lt;BR&gt;&lt;BR&gt;//receiver&lt;BR&gt;[WebMethod]&lt;BR&gt;object DoSomething(object par1, object par2, object par3)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; //perform work&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;When doing the same in MSMQ, you have to wrap the service operation parameters in a data carrier object (called the message) in order to do the same. Another disadvantage of the use of MSMQ for developing kind of a service-oriented application is the hosting of the app: you'll be responsible to write a server application that listens on the queue to take in requests, process them (on a background thread maybe) and send the result back to the client (using a response queue, because messaging in MSMQ is one-way messaging by design).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;So, the drawbacks of MSMQ and System.Messaging are:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Object-based, not method-based (read: no "service operation" concept)&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Low-level API,&amp;nbsp;little abstraction for SOA&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;No hosting functionality (server app), no abstraction on the client (proxy client)&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Uni-directional communication by default&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Writing the server application really isn't that straightforward at all. When bidirectional communication or message acknowledgements (as part of a reliable messaging solution) are needed, a signficant amount of additional code ("plubming"?) is needed. Furthermore, threading will be required to have a better scalability and the use of a Windows Service as the application host is likely to be your choice. Combined, you'll have pretty much work to do in order to get the whole thing up and running.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;&lt;STRONG&gt;Services built on top of MSMQ&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#008000 size=2&gt;&lt;STRONG&gt;Defining an MSMQ service&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Somewhere in March/April I decided to write an abstraction layer for MSMQ that allows developers to create a service that uses the MSMQ protocol for (reliable) message delivery while maintaining the advantages of attribute-based development to write the service. That way, developers would not have to worry about creating a service application or a proxy manually, or to create the wrapper types for service operation calls. As a result, the development of this allows developers to write code like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;[MsmqService] //compare with WebService&lt;BR&gt;public class MyService&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; [MsmqMethod] //compare with WebMethod&lt;BR&gt;&amp;nbsp;&amp;nbsp; public int Sum(int a, int b)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return a + b;&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Once this code is written and compiled, it's time to make it available over MSMQ. To do this, we need to generate a service application to host the code needed for multi-threading, message-to-operation translation, etc. As the matter in fact, this little piece of code results in:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;2 message queues, one for the input parameters (a, b) and one for the answer (the sum)&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;2 carrier types, one for the input parameters (a, b) and one for the answer (the sum); both need to be serializable&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial color=#008000 size=2&gt;&lt;STRONG&gt;Generating a service contract&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;In order to make things easier, a tool called mqdl.exe is available to convert the class definition (compiled to a .dll assembly) to a so-called MQDL service contract. This is called "&lt;STRONG&gt;export&lt;/STRONG&gt;" mode. For the sample mentioned above, this looks as follows:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;?xml version="1.0" standalone="yes"?&amp;gt;&lt;BR&gt;&amp;lt;MqdlDocument&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;Service svc="SomeService" component="SomeTestService.SomeService"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Operation id="Sum"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Input&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Parameter name="a" type="System.Int32" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Parameter name="b" type="System.Int32" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Input&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Output type="System.Int32" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Operation&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/Service&amp;gt;&lt;BR&gt;&amp;lt;/MqdlDocument&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Arial size=2&gt;
&lt;P&gt;&lt;FONT face=Arial color=#008000 size=2&gt;&lt;STRONG&gt;Creating a service application&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Next, the mqdl.exe tool can be used to generate a service application and a proxy class. Let's start with the service application, called "&lt;STRONG&gt;svcman&lt;/STRONG&gt;" mode. For each operation, a monitor is created that's watching a message queue. When a message is received, it's deserialized and passed to the service class (that we did create earlier) for processing. The answer that comes back is wrapped into a response message object, that is sent back on the response queue that's associated with the incoming message queue. The generated code for the Sum operation looks like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;public class SumMonitor&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delegate System.Int32 ProcessDelegate(System.Int32 in1, &lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32 in2);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private class ProcessCallbackData&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ProcessDelegate pdel;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Message msg;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private MessageQueue queue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool stop = false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool stopped = false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SumMonitor(string prefix)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string path = prefix + "SumRequests";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!MessageQueue.Exists(path))&lt;BR&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; MessageQueue.Create(path);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; queue = new MessageQueue(path);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; queue.Formatter = new XmlMessageFormatter&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(new Type [] { typeof(InputSum) });&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Stop()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!stopped);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Start()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!stop)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&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; Message msg = queue.Receive(TimeSpan.FromSeconds(5));&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&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; InputSum input = (InputSum) msg.Body;&lt;BR&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;BR&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; SomeTestService.SomeService svc&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= new SomeTestService.SomeService();&lt;BR&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; ProcessDelegate d = new ProcessDelegate(svc.Sum);&lt;BR&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; ProcessCallbackData pcd = new ProcessCallbackData();&lt;BR&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; pcd.pdel = d;&lt;BR&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; pcd.msg = msg;&lt;BR&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; d.BeginInvoke(input.in1, input.in2, &lt;BR&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; new AsyncCallback(Done), pcd);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&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; catch {}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stopped = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Done(IAsyncResult res)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessCallbackData pcd = (ProcessCallbackData) res.AsyncState;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutputSum output = new OutputSum();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output.output = pcd.pdel.EndInvoke(res);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Message resp = new Message(output);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resp.CorrelationId = pcd.msg.Id;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pcd.msg.ResponseQueue.Send(resp);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Note that callbacks are used to call the underlying service class in an asynchronous fashion. Furthermore, transport types are generated based on the MQDL contract:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;[Serializable]&lt;BR&gt;public class InputSum&lt;BR&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public System.Int32 in1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public System.Int32 in2;&lt;BR&gt;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;[Serializable]&lt;BR&gt;public class OutputSum&lt;BR&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public System.Int32 output;&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Next, a service manager class is generated to host all of the monitors and start these on different threads:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;public class ServiceManager&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private SumMonitor m1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ServiceManager(string path)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m1 = new SumMonitor(path);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Start()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new Thread(new ThreadStart(m1.Start)).Start();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Stop()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m1.Stop();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;In the end, you just need to write a simply application (e.g. a Windows Service) that calls the Start and Stop methods on the ServiceManager, like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;public static void Main()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;ServiceManager mgr = new ServiceManager(".\\private$\\");&lt;BR&gt;&amp;nbsp;mgr.Start();&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Arial size=2&gt;
&lt;P&gt;&lt;FONT face=Arial color=#008000 size=2&gt;&lt;STRONG&gt;Consuming the service&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;At the other side, we need a proxy to hide all of the details of translating a service call to a transport type, sending it to a request queue, polling the response queue and translate the answer back to a method call return value. This is done by the "&lt;STRONG&gt;proxy&lt;/STRONG&gt;" mode of mqdl.exe, which generates code like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;public System.Int32 Sum(System.Int32 a, System.Int32 b)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;MessageQueue __queueReq = new MessageQueue(__path + "SumRequests");&lt;BR&gt;&amp;nbsp;__queueReq.Formatter = new XmlMessageFormatter(&lt;BR&gt;&amp;nbsp;&amp;nbsp;new Type [] { typeof(InputSum) });&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;string __pathResp = ".\\private$\\" + Guid.NewGuid().ToString();&lt;BR&gt;&amp;nbsp;MessageQueue __queueResp = MessageQueue.Create(__pathResp);&lt;BR&gt;&amp;nbsp;__queueResp.Formatter = new XmlMessageFormatter(&lt;BR&gt;&amp;nbsp;&amp;nbsp;new Type [] { typeof(OutputSum) });&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;InputSum __input = new InputSum();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;__input.in1 = a;&lt;BR&gt;&amp;nbsp;__input.in2 = b;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;Message __req = new Message(__input);&lt;BR&gt;&amp;nbsp;__req.ResponseQueue = __queueResp;&lt;BR&gt;&amp;nbsp;__queueReq.Send(__req);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;OutputSum __output = new OutputSum();&lt;BR&gt;&amp;nbsp;try&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;string __id = __req.Id;&lt;BR&gt;&amp;nbsp;&amp;nbsp;Message __msg = __queueResp.ReceiveByCorrelationId(__id, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TimeSpan.FromSeconds(__timeout));&lt;BR&gt;&amp;nbsp;&amp;nbsp;__output = (OutputSum) __msg.Body;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;finally&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;MessageQueue.Delete(__pathResp);&lt;BR&gt;&amp;nbsp;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;return __output.output;&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;People who do understand Dutch can read the details of this in my thesis (see &lt;A href="http://www.bartdesmet.net/download/thesis/"&gt;http://www.bartdesmet.net/download/thesis/&lt;/A&gt;), chapter 10.&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Arial size=2&gt;
&lt;P&gt;&lt;FONT face=Arial color=#008000 size=2&gt;&lt;STRONG&gt;Schematic overview&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The following picture illustrates the overall mechanism of mqdl.exe:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.bartdesmet.net/images/mqdl.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The mqdl.exe tool has three modi as I explained:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;export mode, takes an assembly (DLL) and generates the MQDL contract (XML) using reflection&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;svcman mode, takes the MQDL contract (XML) and generates monitors and&amp;nbsp;a service manager, both in C# using pretty large XSLT transforms&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;proxy mode, takes the MQDL contract (XML) and generates a proxy class in C# using another XSLT transform&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;&lt;STRONG&gt;Give me some code&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;You can take a look at this (experimental) implementation &lt;A href="http://www.bartdesmet.net/download/MsmqTransport.zip"&gt;over here&lt;/A&gt;. Feel free to use it if it looks useful to you, suggestions and additions are welcome (but keep in mind the Indigo story that's due to be released soon).&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=2933" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Personal/default.aspx">Personal</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Avalon_2C00_+Indigo_2C00_+WinFX_2C00_+XAML/default.aspx">Avalon, Indigo, WinFX, XAML</category></item><item><title>Longhorn milestones ... some dates</title><link>http://community.bartdesmet.net/blogs/bart/archive/2005/03/07/678.aspx</link><pubDate>Tue, 08 Mar 2005 02:56:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:678</guid><dc:creator>bart</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=678</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2005/03/07/678.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;I've been talking today at UGent about the .NET Framework and the future of the Microsoft (.NET) platform for the upcoming years (SQL Server 2005, .NET Framework v2.0, VS 2005, Team System, Longhorn, Orcas, ASP.NET v2.0, ClickOnce,&amp;nbsp;DSI, etc). Although I didn't mention the current schedule for Longhorn, I'd like to share it over here (source: various places on the internet):&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;M9&amp;nbsp;&lt;/STRONG&gt;- March 2005 (that's this month, yes!)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Beta 1&lt;/STRONG&gt; - May 2005&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Beta 2&lt;/STRONG&gt; - October 2005&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;RC0&lt;/STRONG&gt; (quite exceptional to have an RC0) - February 2006&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;RC1&lt;/STRONG&gt; - April 2006&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;RTM&lt;/STRONG&gt; - May 24,&amp;nbsp;2006&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Fingers crossed ...&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Today there's also the news that (long-awaited and "subject to various delays")&amp;nbsp;WinFS might come to XP too (see &lt;A href="http://www.microsoft-watch.com/article2/0,1995,1772619,00.asp?kc=MWRSS02129TX1K0000535"&gt;http://www.microsoft-watch.com/article2/0,1995,1772619,00.asp?kc=MWRSS02129TX1K0000535&lt;/A&gt;), as Avalon and Indigo do (both to XP and W2K3). In the end this would mean that the WinFX core and kernel enhancements are the key features that will be unique to Longhorn. Nevertheless, I'm burning with impatience for LH to come...&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#ff0000 size=2&gt;&lt;STRONG&gt;Updates&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial color=#ff0000 size=2&gt;There seems to be some confusion about RTM and GA (general availability). May 24th is currently known as the RTM date, which means that the launch (GA) should be a couple of months later, somewhere in the (late) summer of 2006.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial color=#ff0000 size=2&gt;For what WinFS is concerned, the last plan I heard about is that the beta would come at the time LH Client is released.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial color=#ff0000 size=2&gt;LH Server (and possibly LH Client SP1)&amp;nbsp;are planned for the first half of 2007. &lt;U&gt;Maybe&lt;/U&gt; WinFS RTM will be synch'ed with this release too (since the real full WinFS story only makes sense with support on both client and server).&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=678" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Avalon_2C00_+Indigo_2C00_+WinFX_2C00_+XAML/default.aspx">Avalon, Indigo, WinFX, XAML</category></item><item><title>A night of sweet XAML dreams with Avalon</title><link>http://community.bartdesmet.net/blogs/bart/archive/2004/12/23/506.aspx</link><pubDate>Thu, 23 Dec 2004 13:14:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:506</guid><dc:creator>bart</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=506</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2004/12/23/506.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Going to bed now after a crazy night full of WinFX, XAML and Avalon using the CTP of November 2004 running on both Windows Server 2003 and Windows XP SP2. It's oh so cool that I couldn't even stop this night. Starting with plain vanilla XAML (eXtensible Application Markup Language) for UI definition in Avalon over to custom XAML on my own classes. All this with .NET Framework v2.0 beta (new number to remember: v2.0.40607) and Visual Studio 2005 beta 1. Unfortunately, the VS2005 December 2004 CTP seems to be incompatible with the Avalon CTP (version number of the .NET Framework with the new VS CTP is v2.0.41202), so I had to install, remove and install again but luckily the system wasn't screwed by this (everything still runs fine). Seems that the MSIs are already of an excellent quality.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Other problems you want to avoid:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Don't run with a theme on Windows Server 2003, except for the Blue one (the silver and green ones are not supported in this Avalon CTP). I was running the silver theme, which results in a nice black box being displayed when you try to open a XAML file via IE or after compilation to BAML etc in VS2005 (pretty nice, zammel and bammel).&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Don't try audio or video with the &lt;VIDEO&gt;elements etc since this is currently disabled in this build (with a very clear error message: "&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;EM&gt;Unable to find an entry point named '&lt;SPAN class=highlight1&gt;MILFactoryCreateMediaPlayer&lt;/SPAN&gt;' in DLL&lt;BR&gt;'milcore.dll'.&lt;/EM&gt;")&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;The screen may flicker a bit when launching the first XAML.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;A new service, "FontCacheService.exe" appears (SCM name "FontCacheDownLevel") which is residing in the GAC.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;I'm now running:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Windows Server 2003 SP1 RC1 + Visual Studio 2005 beta 1 + SQL 2005 beta 2 + Avalon CTP 2004&lt;BR&gt;&lt;EM&gt;(Note: I managed to install the MSN Desktop Search Toolbar on W2K3 as well as MSN 7 to stay hip-n-cool :-)).&lt;/EM&gt;&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;VPC with Windows XP SP1 + Avalon CTP 2004 (no flashy editors over there, just the one and only "notepad")&lt;BR&gt;&lt;EM&gt;(I had to struggle with my base image of XP SP2 since I forgot the password :-(. Another pain in the *** during my exploration tonight)&lt;/EM&gt;&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;VPC with Longhorn 4074 (WinHEC release) which has an older Avalon build but with media support and my cool "rotating Nicole &amp; Hugo" XAML demo :-).&lt;BR&gt;&lt;EM&gt;(VPC + LH4074 = slooooooow but it works after all)&lt;/EM&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;If I run another night XAML session, I'll let you know through my blog and I'll post some samples of both Avalon and Indigo with and without XAML. Good night.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;PS: Don't forget to watch the &lt;A href="http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20041216AvalonCA/manifest.xml"&gt;Holiday Episode II of MSDN TV with Don Box and Chris Anderson on Avalon Layout Basics&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=506" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Personal/default.aspx">Personal</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Avalon_2C00_+Indigo_2C00_+WinFX_2C00_+XAML/default.aspx">Avalon, Indigo, WinFX, XAML</category></item></channel></rss>