<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6024700</id><updated>2011-04-21T18:10:38.130-05:00</updated><title type='text'>Norman Headlam</title><subtitle type='html'>Norman Headlam</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6024700.post-5233749850712394081</id><published>2008-10-25T08:46:00.002-05:00</published><updated>2008-10-25T08:50:30.046-05:00</updated><title type='text'>Heading to PDC</title><content type='html'>&lt;p&gt;Well I'm off to PDC 2008 in LA today.&amp;#160; Hope to learn lots of new stuff.&amp;#160; I plan to update my blog (more regularly &lt;a href="http://lh5.ggpht.com/normanheadlam/SQMjSZ4MbWI/AAAAAAAAABI/nx1Ns6fdsVs/GOPH2%5B2%5D.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="34" alt="GOPH2" src="http://lh5.ggpht.com/normanheadlam/SQMjSsjfECI/AAAAAAAAABQ/tWmncEKCWR4/GOPH2_thumb.gif" width="32" border="0" /&gt;&lt;/a&gt; ).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-5233749850712394081?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/5233749850712394081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=5233749850712394081' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/5233749850712394081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/5233749850712394081'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2008/10/heading-to-pdc.html' title='Heading to PDC'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/normanheadlam/SQMjSsjfECI/AAAAAAAAABQ/tWmncEKCWR4/s72-c/GOPH2_thumb.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-2043982157449432545</id><published>2008-03-07T05:54:00.003-06:00</published><updated>2008-03-08T07:10:53.157-06:00</updated><title type='text'>Get Silverlight 2.0 Beta 1</title><content type='html'>Silverlight 2.0 Beta 1 ships finally! Get the SDK and tools &lt;a "http://www.microsoft.com/downloads/details.aspx?FamilyId=E0BAE58E-9C0B-4090-A1DB-F134D9F095FD&amp;displaylang=en"&gt;here&lt;/a&gt; and the Silverlight runtime install from the Silverlight site &lt;a href="http://silverlight.net/"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-2043982157449432545?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.microsoft.com/downloads/details.aspx?FamilyId=E0BAE58E-9C0B-4090-A1DB-F134D9F095FD&amp;displaylang=en' title='Get Silverlight 2.0 Beta 1'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/2043982157449432545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=2043982157449432545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/2043982157449432545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/2043982157449432545'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2008/03/get-silverlight-2-beta-1.html' title='Get Silverlight 2.0 Beta 1'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-115423435029474472</id><published>2006-07-29T23:35:00.000-05:00</published><updated>2006-07-29T23:39:11.186-05:00</updated><title type='text'>Web Service Software Factory</title><content type='html'>The latest Software Factory dealing with the creation of ASMX based service was just posted on the MSDN web site.  Tom Hollander from the Patterns &amp;amp; Practices team has a great write up &lt;a href="http://blogs.msdn.com/tomholl/archive/2006/07/29/682835.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-115423435029474472?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msdn.microsoft.com/library/en-us/dnpag2/html/ServiceFactory.asp?frame=true' title='Web Service Software Factory'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/115423435029474472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=115423435029474472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/115423435029474472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/115423435029474472'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2006/07/web-service-software-factory.html' title='Web Service Software Factory'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-115175840341282777</id><published>2006-07-01T07:51:00.000-05:00</published><updated>2006-07-01T07:53:51.196-05:00</updated><title type='text'>Smart Client Software Factory - June 2006 Release</title><content type='html'>Finally the Smart Client Software Factory is released on MSDN. This version of the Smart Client Software Factory has a dependency on the Composite Application UI Block and Enterprise Library 2.0. As such the product must be preinstalled and the install package with ask for the location. The Software Factory is fully documented and comes with two (2) reference implementation. In addition the Software Factory Guidance Package Solution is included and can be modified to fit into your corporate standards. Before installing make sure you close any instance of Visual Studio you have running. You can read more about it &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/scsflp.asp"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-115175840341282777?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/scsflp.asp' title='Smart Client Software Factory - June 2006 Release'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/115175840341282777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=115175840341282777' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/115175840341282777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/115175840341282777'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2006/07/smart-client-software-factory-june.html' title='Smart Client Software Factory - June 2006 Release'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-115120913923750288</id><published>2006-06-24T23:15:00.000-05:00</published><updated>2006-06-24T23:19:07.890-05:00</updated><title type='text'>GAT/GAX June 2006</title><content type='html'>The June 2006 version of the Guidance Automation Toolkit (GAT) and the Guidance Automation Extension (GAX) has been posted on the MSDN &lt;a href="http://msdn.microsoft.com/vstudio/teamsystem/workshop/gat/default.aspx"&gt;site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-115120913923750288?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msdn.microsoft.com/vstudio/teamsystem/workshop/gat/default.aspx' title='GAT/GAX June 2006'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/115120913923750288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=115120913923750288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/115120913923750288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/115120913923750288'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2006/06/gatgax-june-2006.html' title='GAT/GAX June 2006'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-114486351082504883</id><published>2006-04-12T11:13:00.000-05:00</published><updated>2006-04-12T14:39:21.943-05:00</updated><title type='text'>Web Service Software Factory</title><content type='html'>In the same vain as Smart Client Baseline Architecture Toolkit (&lt;a href="http://msdn.microsoft.com/library/en-us/dnpag2/html/scbatlp.asp?frame=true"&gt;SC-BAT&lt;/a&gt;), we now have a GAT package for service development. Referred to as the Service Baseline Architecture Toolkit (ServiceBAT) or its new name &lt;a href="http://practices.gotdotnet.com/projects/svcfactory"&gt;Web Service Software Factory&lt;/a&gt;, this tool will provide actionable guidance that can assist you in developing services for WCF (and hopefully soon for ASMX 2.0). The guidance assists architects and developers with structuring a solution that meets their business requirements/practice while still enforcing some key design patterns and concepts when developing web services following SO principles. I would encourage folks to take and look and give&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-114486351082504883?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://practices.gotdotnet.com/projects/svcfactory' title='Web Service Software Factory'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/114486351082504883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=114486351082504883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/114486351082504883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/114486351082504883'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2006/04/web-service-software-factory.html' title='Web Service Software Factory'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-114477040283788097</id><published>2006-04-11T10:43:00.000-05:00</published><updated>2006-04-11T10:46:43.303-05:00</updated><title type='text'>Smart Client BAT</title><content type='html'>The CTP for Smart Client Baseline Architecture Toolkit (SC-BAT) is finally available on the Microsoft web site.  SC-BAT is a GAT package that comes with a number of recipes to aid in the development of Composite WinForm applications based on CAB (Composite Application Block) and WinForm 2.0.  Do take a look and give it a try..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-114477040283788097?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msdn.microsoft.com/library/?url=/library/en-us/dnpag2/html/scbatlp.asp' title='Smart Client BAT'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/114477040283788097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=114477040283788097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/114477040283788097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/114477040283788097'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2006/04/smart-client-bat.html' title='Smart Client BAT'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-113730416402507457</id><published>2006-01-14T23:38:00.000-06:00</published><updated>2006-01-14T23:49:24.210-06:00</updated><title type='text'>Object Builder</title><content type='html'>Brian Burton from the Patterns and Practice team posted a very good article on Object Build usage in EntLib 2.0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-113730416402507457?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.agileprogrammer.com/oneagilecoder/archive/2006/01/03/10564.aspx' title='Object Builder'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/113730416402507457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=113730416402507457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/113730416402507457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/113730416402507457'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2006/01/object-builder.html' title='Object Builder'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-113459524684531381</id><published>2005-12-14T15:15:00.000-06:00</published><updated>2006-01-14T00:48:23.996-06:00</updated><title type='text'>ObjectBuilder</title><content type='html'>Updated 1/14/2006 to include definition of MyBuilderContext class&lt;br /&gt;&lt;br /&gt;I've started to play with ObjectBuilder (OB) that comes with CAB and EntLib to learn how it works. I’m no expert so take what I’m about to say in that context. What I’m doing is looking at the unit test to figure out how it works. You could also take a look at the CAB and EntLib 2.0 code to get an idea as well. I create a simple sample to get my feet wet. Again I did this as a first try at understanding OB and the code presented here has been stripped down to present the idea. The important things to note is that OB is a framework for building a DI system, so you have to write some code to the DI system in place. In this example the DI sub-system (the poor mans version) is implemented in the MyContextFactory. Also note that my sample does not dispose of the object by running through the build strategy at the end… this is my laziness.&lt;br /&gt;&lt;br /&gt;This is the main program file. I want to create an instance of MyForm as a singleton without using new and also inject the necessary object needed by MyForm. In this example I also wanted to test constructor injection, method injection and property injection. Method injection is a very interesting idea fro doing initialization after construction… neat.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Program.cs&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ObjectBuilderApp&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// The main entry point for the application.&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main()&lt;br /&gt;        {&lt;br /&gt;            Application.EnableVisualStyles();&lt;br /&gt;            Application.SetCompatibleTextRenderingDefault(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            MyForm form = MyBuilderFactory&amp;lt;MyForm&amp;gt;.BuildSingletonObject( &lt;span class="str"&gt;"Main Form"&lt;/span&gt; );&lt;br /&gt;            Application.Run(form);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is the MyForm class that represents the form. Note I did not show the designer code here. It requires a number of object that are injected.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;MyForm.cs&lt;/strong&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Practices.ObjectBuilder;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ObjectBuilderApp&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MyForm : Form&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Customer _customer;&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Foo _foo;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;// Constructor Injection&lt;/span&gt;&lt;br /&gt;        [InjectionConstructor()]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; MyForm(Customer customer) : &lt;span class="kwrd"&gt;this&lt;/span&gt;()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;._customer = customer;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;// Setter Injection&lt;/span&gt;&lt;br /&gt;        [Dependency( SearchMode = SearchMode.Local, CreateType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Foo), NotPresentBehavior = NotPresentBehavior.CreateNew)]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Foo Foo&lt;br /&gt;        {&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;._foo = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;// Method Injection&lt;/span&gt;&lt;br /&gt;        [InjectionMethod()]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Display([Dependency(CreateType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Foo), NotPresentBehavior = NotPresentBehavior.CreateNew)] Foo foo)&lt;br /&gt;        {&lt;br /&gt;           System.Diagnostics.Trace.WriteLine(foo.Name);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [InjectionMethod()]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Display2([Dependency(CreateType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Foo), NotPresentBehavior = NotPresentBehavior.CreateNew)] Foo foo)&lt;br /&gt;        {&lt;br /&gt;            System.Diagnostics.Trace.WriteLine(foo.Name);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [InjectionMethod()]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Display3([Dependency(CreateType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Foo), NotPresentBehavior = NotPresentBehavior.CreateNew)] Foo foo)&lt;br /&gt;        {&lt;br /&gt;            System.Diagnostics.Trace.WriteLine(foo.Name);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; MyForm()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();        &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button1_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            MessageBox.Show(&lt;span class="kwrd"&gt;this&lt;/span&gt;._customer._foo.Name);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is the MyContextFactory class. This is a static class that allows for the creation of an object based on the Object Builder (OB) framework. In some ways this class is my DI subsystem (yes not a very good version).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;MyContextFactory.cs&lt;/strong&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Practices.ObjectBuilder;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ObjectBuilderApp&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MyBuilderFactory&amp;lt;T&amp;gt; &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; T BuildSingletonObject( &lt;span class="kwrd"&gt;string&lt;/span&gt; name )&lt;br /&gt;        {&lt;br /&gt;            MyBuilderContext ctx = &lt;span class="kwrd"&gt;new&lt;/span&gt; MyBuilderContext();&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;//ctx.InnerChain.Add(new SingletonStrategy());&lt;/span&gt;&lt;br /&gt;            ctx.InnerChain.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; CreationStrategy());&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;// enables method injection&lt;/span&gt;&lt;br /&gt;            ctx.InnerChain.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; MethodReflectionStrategy());&lt;br /&gt;            ctx.InnerChain.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; MethodExecutionStrategy());&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;// enables property njection&lt;/span&gt;&lt;br /&gt;            ctx.InnerChain.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyReflectionStrategy());&lt;br /&gt;            ctx.InnerChain.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; PropertySetterStrategy());&lt;br /&gt;         &lt;br /&gt;            ctx.Policies.SetDefault&amp;lt;ICreationPolicy&amp;gt;(&lt;span class="kwrd"&gt;new&lt;/span&gt; DefaultCreationPolicy());&lt;br /&gt;&lt;br /&gt;            ctx.Policies.Set&amp;lt;ISingletonPolicy&amp;gt;(&lt;span class="kwrd"&gt;new&lt;/span&gt; SingletonPolicy(&lt;span class="kwrd"&gt;true&lt;/span&gt;), &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(MyForm), &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; ctx.HeadOfChain.BuildUp(ctx, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T), &lt;span class="kwrd"&gt;null&lt;/span&gt;, name) &lt;span class="kwrd"&gt;as&lt;/span&gt; T;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This Customer class is the Customer class that gets injected into the MyForm class, but itself also needs another object Foo to be injected.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Customer.cs&lt;/strong&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Practices.ObjectBuilder;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ObjectBuilderApp&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Customer&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Foo _foo;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;// Constructor Injection&lt;/span&gt;&lt;br /&gt;        [InjectionConstructor]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Customer([CreateNew] Foo foo)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;._foo = foo;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;// Method Injection&lt;/span&gt;&lt;br /&gt;        [InjectionMethod]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Display([Dependency(Name=&lt;span class="str"&gt;"MyFoo"&lt;/span&gt;, CreateType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Foo), NotPresentBehavior = NotPresentBehavior.CreateNew)] Foo foo)&lt;br /&gt;        {&lt;br /&gt;            System.Diagnostics.Trace.WriteLine(foo.Name);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Foo class is just a nother class that gets used by the Customer class. This class does not use any kind of injection.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Foo.cs&lt;/strong&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;using System;&lt;br /&gt;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace ObjectBuilderApp&lt;br /&gt;{&lt;br /&gt;    public class Foo&lt;br /&gt;    {&lt;br /&gt;        string _name;&lt;br /&gt;&lt;br /&gt;        public string Name&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                if (this._name == null)&lt;br /&gt;                    return "Norm";&lt;br /&gt;                else&lt;br /&gt;                    return this._name;&lt;br /&gt;            }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                this._name = value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;MyBuilderContext.cs&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;br /&gt;using Microsoft.Practices.ObjectBuilder;&lt;br /&gt;&lt;br /&gt;namespace ObjectBuilderApp&lt;br /&gt;{&lt;br /&gt;    public class MyBuilderContext : BuilderContext&lt;br /&gt;    {&lt;br /&gt;        public IReadWriteLocator InnerLocator;&lt;br /&gt;        public BuilderStrategyChain InnerChain = new BuilderStrategyChain();&lt;br /&gt;        public PolicyList InnerPolicies = new PolicyList();&lt;br /&gt;        public LifetimeContainer lifetimeContainer = new LifetimeContainer();&lt;br /&gt;&lt;br /&gt;        public MyBuilderContext()&lt;br /&gt;            : this(new Locator())&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public MyBuilderContext(IReadWriteLocator locator)&lt;br /&gt;        {&lt;br /&gt;            InnerLocator = locator;&lt;br /&gt;            SetLocator(InnerLocator);&lt;br /&gt;            StrategyChain = InnerChain;         &lt;br /&gt;            SetPolicies(InnerPolicies);&lt;br /&gt;&lt;br /&gt;            if (!Locator.Contains(typeof(ILifetimeContainer)))&lt;br /&gt;                Locator.Add(typeof(ILifetimeContainer), lifetimeContainer);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-113459524684531381?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.gotdotnet.com/codegallery/codegallery.aspx?id=e915f307-c1c6-47c4-8ea0-cb4f0346fba0' title='ObjectBuilder'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/113459524684531381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=113459524684531381' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/113459524684531381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/113459524684531381'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2005/12/objectbuilder.html' title='ObjectBuilder'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-113205984075519547</id><published>2005-11-15T07:02:00.000-06:00</published><updated>2005-11-15T07:04:27.820-06:00</updated><title type='text'>Composite UI Application Block (CAB)</title><content type='html'>The November 2005 Release 1.0 (C# only) version of the Composite UI Application Block (&lt;a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=22f72167-af95-44ce-a6ca-f2eafbf2653c"&gt;CAB&lt;/a&gt;) is now available on the P&amp;amp;P site. I'm looking forward to the improvements made since the last CTP. Will blog on interesting finds.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-113205984075519547?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=22f72167-af95-44ce-a6ca-f2eafbf2653c' title='Composite UI Application Block (CAB)'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/113205984075519547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=113205984075519547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/113205984075519547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/113205984075519547'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2005/11/composite-ui-application-block-cab.html' title='Composite UI Application Block (CAB)'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-112873469334036968</id><published>2005-10-07T20:23:00.000-05:00</published><updated>2005-11-15T07:11:37.083-06:00</updated><title type='text'>Composite Application UI Block (CAB) CPT2</title><content type='html'>&lt;p&gt;The October 2005 CTP 2 version of the Composite UI Application Block (&lt;a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=22f72167-af95-44ce-a6ca-f2eafbf2653c"&gt;CAB&lt;/a&gt;) is now available on the P&amp;amp;P site. I'm looking forward to the improvements made since the last CTP. Will blog on interesting finds.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-112873469334036968?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=22f72167-af95-44ce-a6ca-f2eafbf2653c' title='Composite Application UI Block (CAB) CPT2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/112873469334036968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/112873469334036968'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2005/10/composite-application-ui-block-cab.html' title='Composite Application UI Block (CAB) CPT2'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-112416192774016870</id><published>2005-08-15T22:12:00.000-05:00</published><updated>2005-08-19T09:06:08.490-05:00</updated><title type='text'>.NET Application Configuration File Management</title><content type='html'>&lt;p&gt;&lt;a name=""&gt;&lt;span style="font-family:Arial;font-size:180%;"&gt;1. &lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:180%;"&gt;.NET Application Configuration&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;One of the nice features .NET is the interoperability story that goes with using a .NET component form a non-.NET client such as an unmanaged C++ Windows® application, a VB application, or even scripting. While the interoperability story is well know and understood, much is not said about using the native .NET configuration files in there mixed mode operation.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;It is common for a .NET component or application developer to include a configuration file (i.e., &amp;lt;application name&amp;gt;.exe.config or web.config) file with there application. In most cases the component developer chooses to use the native .NET support for configuration file (i.e., System.Configuration et-al). In a .Net to .NET scenario this works great out-of-the-box, but in a non-.NET to .NET scenario it is not clear to some how this process works. This paper will attempt to shed some light on the process. In this paper I will consider several scenarios dealing with COM Interop. I will not consider C++ interop and I will also discuss the option of not using the native .NET configuration support, but rather opting to read your own configuration data yourself. The options I will consider are as follows:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;1) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Unmanaged C++ Client using .NET&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;2) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;ASP JavaScript Client using .NET&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;3) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;HTML JavaScript Client using .NET&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;4) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Any Client using .NET Enterprise Services&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;5) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Use Application Specific Configuration Reading&lt;/span&gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;For the purpose of the scenarios listed above we will use the following .NET component code as a base:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; ManagedComponent.CS&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Configuration;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Runtime.InteropServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Norman.Headlam.Sample&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;/// Summary description for Data class.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[ComVisible(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[ClassInterface(ClassInterfaceType.AutoDual)] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;public class Data&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Data()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; GetData()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; data = ConfigurationSettings.AppSettings["data"]&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; configFile = AppDomain.CurrentDomain.GetData( "APP_CONFIG_FILE" )&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; data + configFile;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// AssemblyInfo.CS&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Reflection;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Runtime.CompilerServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyTitle("Managed Component")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyDescription("Managed Component")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyConfiguration("")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyCompany("Norman Headlam")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyProduct("Managed Component Sample")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyCopyright("Norman Headlam (c) 2005")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyTrademark("Norman Headlam")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyCulture("")] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: ComVisible(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyVersion("1.0.0.0")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyDelaySign(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly:&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;AssemblyKeyFile("")&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyKeyName("")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In this simple component, the .NET component exposes a&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;GetData&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; method the simply returns a string that is read from the configuration file that the client can then display.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Note that for this managed component I did not strongly name the assembly with a strong name using a public/private key pair and the sn.exe tool (see the content of the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;AssemblyInfo.CS&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; file). This is because I’m not going to deploy the component to the global assembly cache (GAC) in one of the scenario and I wanted to make this point. Instead, for this scenario, I’m going to co-locate the .NET DLL assembly along side the client exe to demonstrate that .NET will still find the component. This is possible since the .NET runtime will simply look for the assembly in the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;AppPath&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; (i.e., the directory of the EXE process) for all referenced assemblies. Also note that I attributed the Data class with the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;ComVisible&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; and&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;ClassInterface&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; attributes. The&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;ComVisible&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; attribute is needed since I made all component COM invisible (i.e., not accessible via COM … without some work) by default (see the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;AssemblyInfo.CS&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; file). The&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;ClassInterface&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; attribute is used to expose the public methods of the Data class as a dual interface (i.e., support early and late binding). I wanted early binding to use it easily from the C++ client. This approach is usually not recommended due to versioning issues you might have.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;One last point; when we compile and generate the TLB for this managed type (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;RegAsm /TLB ManagedComponent.DLL&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;). We get the following information in the TLB file (i.e., the IDL information):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// Generated .IDL file (by the OLE/COM Object Viewer)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// typelib filename: ManagedComponent.tlb&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;uuid(F045BFBB-1349-33B1-A41F-306BA6AA68AE),&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;version(1.0),&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;custom(90883F05-3D28-11D2-8F17-00A0C9A6186D, ManagedComponent, Version=1.0.2048.16331, Culture=neutral, PublicKeyToken=null)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;library ManagedComponent&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// TLib : // TLib : Common Language Runtime Library : {BED7F4EA-1A96-11D2-8F08-00A0C9A6186D}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;importlib("mscorlib.tlb");&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;importlib("STDOLE2.TLB");&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// Forward declare all types defined in this typelib&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;interface _Data;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;uuid(352B66A6-77AE-33CB-B18C-4ABDE732D984),&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;version(1.0),&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, Norman.Headlam.Sample.Data)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;coclass Data {&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[default] interface _Data;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;interface _Object;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;odl,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;uuid(30387035-82EA-3D39-96D0-8BA58475F170),&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;hidden,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;dual,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;nonextensible,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;oleautomation,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, Norman.Headlam.Sample.Data) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;interface _Data : IDispatch {&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[id(00000000), propget,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;custom(54FC8F55-38DE-4703-9C4E-250351302B1C, 1)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;HRESULT ToString([out, retval] BSTR* pRetVal);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[id(0x60020001)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;HRESULT Equals(&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[in] VARIANT obj, &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[out, retval] VARIANT_BOOL* pRetVal);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[id(0x60020002)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;HRESULT GetHashCode([out, retval] long* pRetVal);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[id(0x60020003)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;HRESULT GetType([out, retval] _Type** pRetVal);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[id(0x60020004)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;HRESULT GetData([out, retval] BSTR* pRetVal);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Note that the methods from&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;System.Object&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; are also exported.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;1.1. &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;Unmanaged C++ Client using .NET Component Scenario&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In this scenario we will consider the case of an unmanaged C++ console client (&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;UnmanagedClient.EXE&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;) using a .NET DLL assembly. For this process to work using the native .NET configuration mechanism, the .NET DLL assembly should have the following attributes:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;1) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET component that is being exposed must have a public default constructor (i.e., take no arguments).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;2) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;At a minimum the .NET component should be COM visible. You can also make all components in the assembly COM visible, but that is not recommended.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;3) &lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be registered in the system registry (i.e., regasm /tlb assmeblyname.dll).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;4) &lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;If .NET DLL assembly use other .NET Framework assemblies, make sure there are co-located with the .NET DLL assembly or are deployed into the GAC.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="fr"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;1.1.1. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;Client Application Code (&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;"&gt;UnmanagedClient.EXE&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In this scenario we will use the following unmanaged client code console application as the client.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;stdafx.h &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;#pragma once&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;#include&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;#include&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; &amp;lt;tchar.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;#import&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; "..//ManagedComponent.tlb" no_implementation \&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;raw_interfaces_only \&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;raw_native_types &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;UnmanagedClient.cpp&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;#include&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; "stdafx.h"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;#include&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; &amp;lt;atlbase.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;#include&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; &amp;lt;atlcom.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;#include&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; &amp;lt;comdef.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; _tmain(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; argc, _TCHAR* argv[])&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;USES_CONVERSION;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;HRESULT hr = CoInitialize( NULL);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;CComPtr&amp;lt; ManagedComponent::_Math &amp;gt; spManaged;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;hr = spManaged.CoCreateInstance(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;__uuidof&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;( ManagedComponent::Math ) );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;long&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; z;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;hr = spManaged-&amp;gt;Add( 2, 2, &amp;amp;z );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;printf( "2 + 2 = %d", z );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;CComPtr&amp;lt; ManagedComponent::_Data &amp;gt; spData;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;hr = spData.CoCreateInstance(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;__uuidof&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;( ManagedComponent::Data ) );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;CComBSTR data;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;hr = spData-&amp;gt;GetData( &amp;amp;data );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;printf( "\n\n%s", OLE2A( data ) );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;data.Empty( );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;CoUninitialize( );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;return 0;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.2. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;Client Application Configuration File (&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;"&gt;UnmanagedClient.EXE.Config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The unmanaged console application is called UnmanagedCleint.EXE. As such we will need an associated configuration file called&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;UnmanagedClient.EXE.Config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;. The configuration file is as follows and is in the same directory as the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;Unmanaged&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Client.EXE&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;program.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;UnmanagedClient.EXE.Config&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;?&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#800000;"&gt;xml&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;version&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="1.0"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;encoding&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="utf-8"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;appSettings&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#800000;"&gt;add&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier New;font-size:85%;color:#ff0000;"&gt;key&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#0000ff;"&gt;="data"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier New;font-size:85%;color:#ff0000;"&gt;value&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#0000ff;"&gt;="Hello. I'm the unmanaged process Unmanaged.exe. Here is my config file --&amp;gt; "&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier New;font-size:85%;color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/appSettings&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.3. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;Special Notes&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;To get the program to compile we imported the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;ManagedComponent.TLB&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;, generated using the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;RegAsm /TLB ManagedComponent.DLL&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; command, into the unmanaged client. This allowed us to access the managed class public methods from the COM client.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.4. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;Opportunity for improvements&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;We could have improved this code some.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;1) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;First we could have used an interface to convey the public interface to the client. We still have to make the class COM visible, but client could access the managed component via an interface instead.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;2) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Secondly, we could have strongly named the assembly. This would allow us to deploy the assembly into the GAC and thus share the same assembly between all clients. This feature would also support versioning using the native .NET support for versioning.&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;1.2. &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;ASP JavaScript Client using .NET Component Scenario&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In this scenario we will consider the case of an unmanaged ASP client using JavaScript to access the function of the .NET DLL assembly. For this process to work using the native .NET configuration mechanism, the .NET DLL assembly should have the following attributes:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;3) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET component that is being exposed must have a public default constructor (i.e., take no arguments).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;4) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;At a minimum the .NET component should be COM visible. You can also make all components in the assembly COM visible, but that is not recommended.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;5) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be strongly signed with a private/public key pair that was generated with the sn.exe tool (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;.exe –k sample.snk&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;6) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be registered in the system registry (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;regasm /tlb assmeblyname.dll&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;7) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be deployed to the GAC (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;gacutil.exe /&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; ManagedComponent.DLL&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;8) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;If the .NET DLL assembly use other .NET Framework assemblies, make sure there are deployed into the GAC as well.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="fr"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;1.1.5. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;Client Application Code (&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;"&gt;ASPClient.ASP&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In this scenario we will use the following JavaScript in an ASP file (i.e.) as the client.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;ASPClient.asp&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;% @Language=JScript %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;%&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;data = GetData( );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Response.Write( "&amp;lt;div&amp;gt;" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Response.Write( data );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Response.Write( "&amp;lt;/div&amp;gt;" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;Script Language=JScript RunAt=Server&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// Define Server Side Script Function&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;function GetData( )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;var objData = new ActiveXObject( "Norman.Headlam.Sample.Data" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;return objData.GetData( );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/Script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.6. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;Client Application Configuration File (&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;"&gt;Dllhost.EXE.Config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The ASP client application is called&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;ASPClient.ASP&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;. Since ASP applications will get executed in a surrogate process,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;dllhost.exe&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; in this case. We need to associate a configuration file with the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;dllhost.exe&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; process. This process is located in the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;%SystemRoot%\System32&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; directory. As such we need to copy a version of the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;dllhost.exe.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; file to that directory. The content of the file (for this example) is the same as before.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;d&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;llhost.exe.config&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;?&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#800000;"&gt;xml&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;version&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="1.0"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;encoding&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="utf-8"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;appSettings&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#800000;"&gt;add&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;key&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="data"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;value&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="Hello. I'm the unmanaged process dllhost.exe. Here is my config file --&amp;gt; "&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/appSettings&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.7. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;Special Notes&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;dllhost.exe.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; file is a shared asset among all applications that uses it a surrogate. This does not bode well in all scenarios. We will discuss alternatives later. Also note that since the ASP application, running in the dllhost.exe process is running under a credential. If the .NET component needed access to a restricted resource (i.e., a resource that requires certain security access to use such as the certificate store, a special file folder, etc.), the credential that the dllhost.exe process runs under (i.e., IWAM_&amp;lt;machine name&amp;gt;) would need access as well with this default configuration.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.8. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;Opportunity for improvements&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The following are opportunities for improvements:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;1) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;We could have deployed the .NET Component as an Enterprise Services Component. This would allow use to have per-application configuration file and allowed for using a specific id to execute under that would give us a little more control with the least amount of work (i.e., no impersonation, etc.)&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;1.3. &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;HTML JavaScript Client using .NET Component Scenario&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In this scenario we will consider the case of an unmanaged client using JavaScript to access the function of the .NET DLL assembly (i.e., an html file executing code locally, etc.). For this process to work using the native .NET configuration mechanism, the .NET DLL assembly should have the following attributes:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;1) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET component that is being exposed must have a public default constructor (i.e., take no arguments).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;2) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;At a minimum the .NET component should be COM visible. You can also make all components in the assembly COM visible, but that is not recommended.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;3) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be strongly signed with a private/public key pair that was generated with the sn.exe tool (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;.exe –k sample.snk&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;4) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be registered in the system registry (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;regasm /tlb assmeblyname.dll&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;5) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be deployed to the GAC (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;gacutil.exe /&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; ManagedComponent.DLL&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;6) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;If the .NET DLL assembly use other .NET Framework assemblies, make sure there are deployed into the GAC as well.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="fr"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;1.1.9. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;Client Application Code (&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;"&gt;HtmlClient.htm&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In this scenario we will use the following JavaScript in an&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;htm&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; file (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;HTMLClient.htm&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;) as the client.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;HTMLClient.htm&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;HTML Client Calling .NET Assembly&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;meta name="ProgId" content="VisualStudio.HTML"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;meta name="Originator" content="Microsoft Visual Studio .NET 7.1"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;Script Language="JScript"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;function GetData( )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;var objData = new ActiveXObject( "Norman.Headlam.Sample.Data" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;return objData.GetData( );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;} &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/Script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;input type="button" value="Button" ID="idGetData" NAME="dataButton" onclick="document.getElementById('data').value = GetData()"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;input name="data" type="text" readonly value="Returned data goes here" size="46"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.10.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;Client Application Configuration File (&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;"&gt;Iexplore.Exe.Config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The client application is a file called HTMLClient.HTM. Since the client code is executing in the context of the internet explorer browser applications (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;iexplore.exe&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;) we need to configure the configuration file for&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;iexplore.exe.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;. The iexplore.exe process is located in the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;%SystemRoot%\System32&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; directory. As such we need to copy a version of the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;iexplore.exe&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; file to that directory. The content of the file (for this example) is the same as before.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;iexplore.exe&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;.config&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;?&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#800000;"&gt;xml&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;version&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="1.0"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;encoding&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="utf-8"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;appSettings&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;add&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;key&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="data"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;value&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="Hello. I'm the unmanaged process iexplore.exe. Here is my config file --&amp;gt; "&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/appSettings&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;This scenario is the same as it was for the ASP application with the exception of the name of the process. Had we execute this application in a custom browser, we would simply use its config file in stead (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;custom application&amp;gt;.exe.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.11.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;Special Notes&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;iexplore&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;.exe.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; file is a shared asset among all applications that uses it as a surrogate. This does not bode well in all scenarios. We will discuss alternatives later. Also note that since the iexplore.exe application runs with the user’s credential (unless otherwise instructed to), if the .NET component needed access to a restricted resource (i.e., a resource that requires certain security access to use such as the certificate store, a special file folder, etc.), the credential that the iexplore.exe process runs under would need access as well.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.12.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;Opportunity for improvements&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;I don’t find much room for improvement here. That said here is one improvement:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;1) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Don’t use this approach.&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;1.4. &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;.NET Component Configured as a .NET Enterprise Services Application Scenario&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In this scenario we will use an ASP client application that calls a component in a .NET Enterprise Services Application (a.k.a. COM+ Application). While this scenario uses an ASP client application, we could have used any other type of client (i.e., an unmanaged C++ console application, a .NET application, etc.).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;For this scenario, the .NET component must have the following attributes:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;1) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET component that is being exposed must have a public default constructor (i.e., take no arguments).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;2) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET component&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;strike&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;must&lt;/span&gt;&lt;/strike&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; should be based on an interface.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;3) &lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET component must extend the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;System.EnterpriseServices.ServiceComponent&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; class.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;4) &lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must reference the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;System.EnterpriseServices.DLL&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;5) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;At a minimum the .NET component should be COM visible. You can also make all components in the assembly COM visible, but that is not recommended.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;6) &lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be strongly signed with a private/public key pair that was generated with the sn.exe tool (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;.exe –k sample.snk&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;7) &lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be registered in the system registry (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;regasm /tlb assmeblyname.dll&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;8) &lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The .NET DLL assembly must be deployed to the GAC (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;gacutil.exe /&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; ManagedComponent.DLL&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;9) &lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;If the .NET DLL assembly used other .NET Framework assemblies, make sure there are deployed into the GAC as well.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;10) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;.NET DLL a&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;ssembly must be registered&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;with&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;.NET Enterprise Services (i.e., COM+). There are several ways to do this (see the MSDN docs for more info or consult “COM and .NET Component Services” by Juval Lowy published by O’Reilly. To register the assembly&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; use the following command&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;regsvcs.exe /appname:ManagedComponent ManagedComponentES.DLL&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;This&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;registration&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;process will&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;also create a type library that can be used by a C++ unmanaged client (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;ManagedComponentES.TLB&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;). To make sure the application gets registered as a “Server Application” add the following to the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;assemblyinfo.cs&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;assembly: using System.EnterpriseServices;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;ApplicationActivation(ActivationOption.Server)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.13.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;.NET Enterprise Services Component (&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;"&gt;ManagedComponentES.DLL&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The following code is what our test .NET Component looks like after it is converted to be a .NET Enterprise Services component.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Data.cs&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Configuration;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Runtime.InteropServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.EnterpriseServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Norman.Headlam.Sample.EX&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;/// Summary description for Data class.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[ComVisible(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[ClassInterface(ClassInterfaceType.AutoDual)] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Data :&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;ServicedComponent, IGetData&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Data()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; GetData()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; ConfigurationSettings.AppSettings["data"]&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;IGetData&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;.cs&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Norman.Headlam.Sample.ES&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;/// Summary description for IGetData.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;public interface IGetData&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; GetData();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;AssemblyInfo.CS&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.EnterpriseServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Reflection;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Runtime.CompilerServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Runtime.InteropServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyTitle("Managed Component")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyDescription("Managed Component")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyConfiguration("")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyCompany("Norman Headlam")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyProduct("Managed Component Sample")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyCopyright("Norman Headlam (c) 2005")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyTrademark("Norman Headlam")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyCulture("")] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: ComVisible(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: ApplicationActivation(ActivationOption.Server)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyVersion("1.0.0.0")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyDelaySign(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyKeyFile(@"..\..\..\sample.snk")]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[assembly: AssemblyKeyName("")]&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;After the registration of the component, the Component Manager Explorer will look something like this:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/582/272/1600/image0012.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/582/272/320/image0012.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;Figure&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt; - Managed Component in Component Services Manager&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;a name=""&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.14.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;Configuring the .NET Enterprise Services Application&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;We next need to configure the .NET Enterprise Services Application to run under a specific credential and setup the application to use a “per application configuration file&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;sup&gt;&lt;/sup&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;sup&gt;&lt;/sup&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;” (i.e., we will no longer use the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;dllhost.exe.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; file across all applications). Instead we will configure each .NET Enterprise Services Application (i.e., COM+ Application). This process works for Windows XP SP2 with .NET Framework 1.1 and Windows 2003 with the .NET 1.1 Framework.&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;1) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Create an “A&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;pplication&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;Root D&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;irectory”&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; and config the setting in the “Activation” properties for the .NET Enterprise Services Application. You can use the Component Services Explorer as shown here.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/582/272/1600/image0041.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/582/272/320/image0041.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt;Figure&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;"&gt; -&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;Configure Application Root Directory for&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;Managed Component&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;2) &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Add a file called&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;application.manifest&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; to the “Application Root Directory” folder (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;C:\TEMP\Unmanaged to Managed&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;). This file should have the following content&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;?&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#800000;"&gt;xml&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;version&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="1.0"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;encoding&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="UTF-8"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;standalone&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="yes"?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#800000;"&gt;assembly&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="urn:schemas-microsoft-com:asm.v1"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;manifestVersion&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="1.0"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/assembly&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;3) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Add a file called&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;application.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; to the “Application Root Directory” folder (i.e.,&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;C:\TEMP\Unmanaged to Managed&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;). This represents the per application configuration. For this example the content of the file should be as follows.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;?&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#800000;"&gt;xml&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;version&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="1.0"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;encoding&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="utf-8"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;appSettings&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;add&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;key&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="data"&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#ff0000;"&gt;value&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;="Hello. I'm the Enterprise Services config file as configured in Component Manager Explorer and is being used by dllhost.exe. Here is my config file --&amp;gt; "&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#ff00ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/appSettings&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="fr"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;1.1.15.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="fr"&gt; &lt;span style="font-family:Arial;"&gt;Client Application Code (&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;"&gt;ASPClientUsingES.ASP&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="fr"&gt;&lt;span style="font-family:Arial;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The ASP client application we will use in this scenario is called&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;ASPClientUsingES.ASP&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;. In this scenario the .NET component will get executed in the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;dllhost.exe&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; process, but instead of using the&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;dllhost.exe.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt;file, it will use&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;application.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; located in the “Application Root Directory”&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;ASPClientUsingES.ASP&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;% @Language=JScript %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;%&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;data = GetData( );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Response.Write( "&amp;lt;div&amp;gt;" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Response.Write( data );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Response.Write( "&amp;lt;/div&amp;gt;" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;Script Language=JScript RunAt=Server&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// Define Server Side Script Function&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;function GetData( )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;var objData = new ActiveXObject( "Norman.Headlam.Sample.ES.Data" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;return objData.GetData( );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/Script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;%&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;data = GetData( );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Response.Write( "&amp;lt;div&amp;gt;" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Response.Write( data );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;Response.Write( "&amp;lt;/div&amp;gt;" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;Script Language=JScript RunAt=Server&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;// Define Server Side Script Function&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;function GetData( )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;var objData = new ActiveXObject( "Norman.Headlam.Sample.ES.Data" );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;return objData.GetData( );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;/Script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;1.1.16.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Arial;"&gt;Special Notes&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;You might experience a problem like so when you execute the application. As usually check to make sure the .NET Enterprise Services Application is configured with the correct credentials to do its job and interact with the client&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;(ASPClientUsngES.ASP&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; in this case).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/582/272/1600/image0031.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/582/272/320/image0031.jpg" border="0" /&gt;&lt;/a&gt;Figure 3 - Error Message with Improper Security Credentials&lt;br /&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;You can configure the credentials for the .NET Enterprise Services Application using the Component Services Explorer as shown here. In this example I’m configuring it to use my personal domain ID (this is not the recommended approach). It is best to create a special account to execute you application under.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;a href="http://photos1.blogger.com/blogger/582/272/1600/image0021.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/582/272/320/image0021.jpg" border="0" /&gt;&lt;/a&gt; Figure 4 - Configure Security for Managed Component&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;a name=""&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;1.5. &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;u&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;Changing the Default Config File Name&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;At this time you might be wondering how was it possible to have a configuration file with a name other that&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;application name&amp;gt;.exe.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;; such as&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;web.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; or&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;"&gt;application.config&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;. As it turns out the application configuration file a .NET component uses is determined independently for each AppDomain within a process and more importantly you can change it. To change the location and name of the configuration file you must follow the rules below:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;1) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In your .NET component (or exe process) you should change the configuration file locations as shown below. Notice that you can give the file any name and place it in any folder that the process has access to.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;AppDomain.CurrentDomain.SetData( “APP_CONFIG_FILE”, “&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;C:\TEMP\Unmanaged to Managed&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;\Foo.MyConfig” );&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;2) &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;You must make the call above before making any other calls to the .NET configuration API. You only have one chance to change the location of the configuration file for each unique AppDomain.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;You should know that this technique will work in all the scenarios we discussed so far, but you should only use it in rare cases. If you are using a .NET EXE assembly, it is safe to use this approach. In this case you would change the configuration location in the process startup. However, in the COM interop or a .NET Enterprise Services case, you really don’t have control over which component will be called first and thus not have a chance to set the configuration file location in all cases. In the case of the .NET Enterprise Services configuration I would always opt to using the “Application Root Directory” approach as it is more safe and configurable out-of-band.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Here is an example of such an approach where we change the config file in the component constructor. This assume of course we are only using this single component or this component is always called before calling another method, property, etc. that uses the native .NET configuration API.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;Data.cs&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Configuration;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Runtime.InteropServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.EnterpriseServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Norman.Headlam.Sample.CustomConfig&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt; Summary description for Data class.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[ComVisible(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[ClassInterface(ClassInterfaceType.AutoDual)] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Data : ServicedComponent, IGetData&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Data()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;// set the location of the configuration file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;AppDomain.CurrentDomain.SetData( "APP_CONFIG_FILE", @"C:\TEMP\Unmanaged to Managed\Foo.MyConfig" );&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; GetData()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; data = ConfigurationSettings.AppSettings["data"]&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; configFile = AppDomain.CurrentDomain.GetData( "APP_CONFIG_FILE" )&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; data + configFile;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;a name=""&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;1.6. &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;Custom Config File API&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Another option that is available to you is to opt out of the native .NET support for configuration files and use you own custom approach.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In this scenario you can just load up a configuration file using possibly the Xml DOM API, a File Stream API, etc. From there you would just read the configuration file as needed to get you configuration information, perhaps using XML DOM or deserializing it into an object. When this approach is use you clearly will not have the benefits of the native support provide by .NET, but that might, and quite often is, acceptable. Another feature you will loose is the application settings feature offered by WinForms. Another option also is to not require any out of band configuration information. If you choose this approach and do not need XML support I would also recommend that you remove the Syste.Xml.DLL reference to your assembly as well. This will save you a lot in runtime memory overhead.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;The following is an example of a custom configuration that loads a config file that is assumed to be in the same directory as the exe process.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;b&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;Data.cs&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Configuration;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Runtime.InteropServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.EnterpriseServices;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.IO;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Xml;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; System.Xml.Serialization;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Norman.Headlam.Sample.NoConfig&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt; Summary description for Data class.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;///&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[ComVisible(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;[ClassInterface(ClassInterfaceType.AutoDual)] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Data : ServicedComponent, IGetData&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; Data()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; GetData()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;MyConfigurationType config =&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;FileStream fs =&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;XmlTextReader reader =&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;XmlSerializer ser =&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;// get the location of the configuration file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; configFile = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "custom.xml";&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;( File.Exists( configFile ) )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;// open the conlig file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;(fs =&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; FileStream( configFile, FileMode.Open) )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#008000;"&gt;// deserialize config file into an object&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;reader =&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; XmlTextReader( fs );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;ser =&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; XmlSerializer(&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;typeof&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;(MyConfigurationType));&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;config = ser.Deserialize( reader )&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt; &lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; MyConfigurationType; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;catch&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;( Exception ex )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; ex.Message; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;} &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt; config.data + configFile;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span lang="en-us"&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-us"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-112416192774016870?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/112416192774016870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=112416192774016870' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/112416192774016870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/112416192774016870'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2005/08/net-application-configuration-file.html' title='.NET Application Configuration File Management'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-112312750612382515</id><published>2005-08-03T22:51:00.000-05:00</published><updated>2005-08-03T22:51:46.136-05:00</updated><title type='text'>XML Schema Generator</title><content type='html'>&lt;!-- Converted from text/rtf format --&gt;  &lt;P ALIGN=LEFT&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT SIZE=2 FACE="Arial"&gt;Often I need to generate an XML schema from an XML document.&amp;nbsp; My&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT SIZE=2 FACE="Arial"&gt;preferred&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT SIZE=2 FACE="Arial"&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT SIZE=2 FACE="Arial"&gt;tool is located here&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;/SPAN&gt;&lt;A HREF="http://www.xmlforasp.net/CodeBank/System_Xml_Schema/BuildSchema/BuildXMLSchema.aspx"&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;FONT COLOR="#0000FF" SIZE=2 FACE="Arial"&gt;http://www.xmlforasp.net/CodeBank/System_Xml_Schema/BuildSchema/BuildXMLSchema.aspx&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT SIZE=2 FACE="Arial"&gt;.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P ALIGN=LEFT&gt;&lt;SPAN LANG="en-us"&gt;I can choose between &amp;#8220;Russian Doll&amp;#8221; or &amp;#8220;Separate Complex Type&amp;#8221; style.&amp;nbsp; The output is much better that XSD.EXE.&lt;/SPAN&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-112312750612382515?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/112312750612382515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=112312750612382515' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/112312750612382515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/112312750612382515'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2005/08/xml-schema-generator.html' title='XML Schema Generator'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-112179155443120644</id><published>2005-07-19T11:45:00.000-05:00</published><updated>2005-07-19T11:54:25.363-05:00</updated><title type='text'>Unit Testing CAB</title><content type='html'>One of the common problems reported with unit testing CAB via NUnit is the fact that the NUnit GUI crashes when executing the test. This is particular true with the Windows Forms unit test. To solve the problem we need to load the nunit-gui.exe application in a FX 2.0 environment. We can affect this by making the following change to the nunit-gui.exe.config file&lt;br /&gt;&lt;br /&gt;&lt;startup&gt;&lt;startup&gt;&lt;supportedruntime version="v2.0.50215"&gt;&lt;supportedruntime version="v2.0.40697"&gt;&lt;supportedruntime version="v1.1.4322"&gt;&lt;supportedruntime version="v1.0.3705"&gt;&lt;requiredruntime version="v1.0.3705"&gt;&lt;/startup&gt;&lt;/startup&gt;&amp;lt;startup&amp;gt;&lt;br /&gt;&amp;lt;supportedRuntime version="v2.0.50215" /&amp;gt; &amp;lt;!-- .NET 2.0 BETA 2 --&amp;gt; &amp;lt;supportedRuntime version="v2.0.40697" /&amp;gt; &amp;lt;!-- .NET 2.0 BETA 1 --&amp;gt; &amp;lt;supportedRuntime version="v1.1.4322" /&amp;gt; &amp;lt;!-- .NET 1.1 RTM --&amp;gt; &amp;lt;supportedRuntime version="v1.0.3705" /&amp;gt; &amp;lt;!-- .NET 1.0 RTM --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;requiredRuntime version="v1.0.3705" /&amp;gt;&lt;br /&gt;&amp;lt;/startup&amp;gt;&lt;br /&gt;&lt;br /&gt;You can also try using TestRunner instead of NUnit and you will not have this problem at all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-112179155443120644?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/112179155443120644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=112179155443120644' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/112179155443120644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/112179155443120644'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2005/07/unit-testing-cab.html' title='Unit Testing CAB'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-111949632173612447</id><published>2005-06-22T21:57:00.000-05:00</published><updated>2005-06-22T22:12:01.740-05:00</updated><title type='text'>Composite UI Application Block (CAB)</title><content type='html'>The second gotdotnet drop of the Composite UI Application Block – CAB for short – was drop about a week ago.  CAB represents an import piece of software in the WinForm development space based on .NET 2.0.  You can read more about CAB on the gotdotnet site &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=22f72167-af95-44ce-a6ca-f2eafbf2653c"&gt;here&lt;/a&gt;.  I plan to start blogging about specific features of CAB going forward.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;What is CAB&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;CAB is a guidance asset in the form of an application block like no other before it.  CAB is based on .NET 2.0, but there is a strong possibility there will be a back port of the major features to .NET 1.1.  CAB combines some of the development principles of EntLib, patterns such as MCV, Memento, Pub-Sub, etc. and codifies it into what I believe is a well factored set of classes for developing SO client applications.  Unlike, the UIP block of past, CAB is very easy to understand and once you get some basic concepts it proves to be very useful and empowering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-111949632173612447?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/111949632173612447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=111949632173612447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/111949632173612447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/111949632173612447'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2005/06/composite-ui-application-block-cab.html' title='Composite UI Application Block (CAB)'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-110141265592396264</id><published>2004-11-25T13:54:00.000-06:00</published><updated>2004-11-25T13:59:29.516-06:00</updated><title type='text'>BizTalk Server 2004</title><content type='html'>BizTalk Server 2004 is a significant product. I think this piece of software (i.6 millions lines of C# code) is perhaps the least known, but yet, most useful software from Microsoft... ever.  This is a product that we should learn from and use.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-110141265592396264?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.microsoft.com/biztalk/' title='BizTalk Server 2004'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/110141265592396264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=110141265592396264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/110141265592396264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/110141265592396264'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2004/11/biztalk-server-2004.html' title='BizTalk Server 2004'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-109880384696626046</id><published>2004-10-26T09:01:00.000-05:00</published><updated>2004-10-26T10:17:26.966-05:00</updated><title type='text'>The Three Faces of Web Services</title><content type='html'>I love Tim Ewal’s piece on “&lt;a href="http://pluralsight.com/blogs/tewald/archive/2004/10/18/2875.aspx"&gt;3 faces  of Web services&lt;/a&gt;”.  In the company I work for, most people would consider XML over HTTP not to be a web service because of the two missing elements “Envelope” and “Body”.  This is unfortunate, but understandable.  Most vendors have the same self-interest that we all have… looking out for number one (and in some case, the stock holders :-)).  As such, most vendors will push the idea that if you are not using their toolkit (SOAP, SO&lt; etc.), then you are not using web services.  But, as other have pointed out (Tim Ewal and Sam Ruby), this is not the case in the real world.  In the real world developers have done what they needed to do to get the product out.  If you are big enough (read eBay) you can get away with a lot if the benefits of your service are worth the cost of getting in.  But what about the internal corporate developer who have to integrate with more than one internal system to get her job done?  For such a person, the eBay model usually works in the beginning, but once you begin to grow and would like the benefits of say Single Secure Sign-On, standards and conformance become very important.  Tim Ewal said the overlap between SOAP and “XML over HTTP” is about 98%.  Put another way, the differences between SOAP and “XML over HTTP” is 2% (read Envelope and Body element).  Why not just put your XML in a SOAP envelope?  Think of the great benefits you can gain down the road with WS-* (the ones you care about that is).  For this reason, and knowing what we know today) I think XML over HTTP is just wrong… “Give SOAP a Chance”.  Some might say that adding something to the XML (i.e., Envelope and Body elements) goes against principles such as TDD, but I would say that applies to code not data.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-109880384696626046?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/109880384696626046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=109880384696626046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/109880384696626046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/109880384696626046'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2004/10/three-faces-of-web-services.html' title='The Three Faces of Web Services'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-109879857718976165</id><published>2004-10-26T08:03:00.000-05:00</published><updated>2004-10-26T08:49:37.190-05:00</updated><title type='text'>DevCon 2004</title><content type='html'>&lt;strong&gt;Applied XML Developers Conference&lt;/strong&gt;&lt;br /&gt;Recently &lt;a href="http://www.pluralsight.com/blogs/tewald/default.aspx"&gt;Tim Ewal &lt;/a&gt;posted a topic on &lt;a href="http://pluralsight.com/blogs/tewald/archive/2004/08/16/1892.aspx"&gt;wanting Relax NG&lt;/a&gt;. The premise of the blog is that Relax-NG provides a better sokution as compared to XSD.  So why not adopt RNG instead?  While I think Tim is right on, this feels like the VHS vs. &lt;a href="http://en.wikipedia.org/wiki/Betamax"&gt;Betamax &lt;/a&gt;debate. Most people felt that Betamax as better than VHS; yet VHS dominated the market (side note – I heard this was due in-part to the amount of porn videos that were release on VHS). So I say lets get on with it and embrace XSD. I'm sure it will be replace very soon... but not before its time.  Fast forward to 2004, how many of you would buy a VHS tape when you have an option to buy a DVD instead. The same thing will happen with XSD; something better will come along and take hold. Along the way we will have some contenders (insert Laser Disk), but no technology will die before its time. Its time for XSD to live… give me the support (insert Tools… not porn) so I may live peacefully with my new friend (insert XSD).&lt;br /&gt;&lt;br /&gt;... back to the topic&lt;br /&gt;&lt;br /&gt;The Applied XML DevCon was simply awesome. The mode of the first day was somewhat pessimistic, but I learned a lot. Day two was more upbeat, but now I can’t get that song out of my head.&lt;br /&gt;&lt;br /&gt;The truth of the matter is there are problems with the current stack of Web Services tools, specification, etc. out in the wild. Meanwhile, back in the real world, we are building application that work despite these imperfections and perceived drawbacks. I have yet to use perfect technology and if I did I would be worried. I’m convinced that no matter what the big vendors produce (read Microsoft and IBM); someone will find flaws and criticize it. However, this should not stop you form trying the technology... if it makes sense. In fact, you should welcome it. Most of the problems with these specifications is a result of not needing the technology. In that case, don’t use it. For the ones you need, just stay away from the edges if you don't have the stomach and you'll do fine. Most of the problems are indeed at the edges and not usually part of the core.&lt;br /&gt;&lt;br /&gt;For more interesting summaries of the DevCon visit &lt;a href="http://www.sellsbrothers.com/conference/#sightings"&gt;Chris's&lt;/a&gt; site for a list of sightings.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-109879857718976165?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/109879857718976165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=109879857718976165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/109879857718976165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/109879857718976165'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2004/10/devcon-2004.html' title='DevCon 2004'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-109095350184889444</id><published>2004-07-27T13:33:00.000-05:00</published><updated>2004-07-27T13:38:21.846-05:00</updated><title type='text'>Fritz Onion On "Unfounded fears of 70%"</title><content type='html'>Fritz Onion posted an excellent blog on &lt;a href="http://pluralsight.com/blogs/fritz/archive/2004/07/27/1727.aspx?Pending=true"&gt;ASP.NET 2.0&lt;/a&gt; and unfounded fear of the new features being offered in the next released of the Framework and VS 2005. &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-109095350184889444?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://pluralsight.com/blogs/fritz/archive/2004/07/27/1727.aspx?Pending=true' title='Fritz Onion On &quot;Unfounded fears of 70%&quot;'/><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/109095350184889444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=109095350184889444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/109095350184889444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/109095350184889444'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2004/07/fritz-onion-on-unfounded-fears-of-70.html' title='Fritz Onion On &quot;Unfounded fears of 70%&quot;'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-109086311848647432</id><published>2004-07-26T12:30:00.000-05:00</published><updated>2004-07-26T12:31:58.486-05:00</updated><title type='text'>Google is down?</title><content type='html'>I can't believe it but the great Google is down&lt;br /&gt;&lt;br /&gt;Google&amp;nbsp;&amp;nbsp; &amp;nbsp;Error&amp;nbsp;Server Error&lt;br /&gt;The service you requested is not available at this time. Service error -27.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-109086311848647432?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/109086311848647432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=109086311848647432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/109086311848647432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/109086311848647432'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2004/07/google-is-down.html' title='Google is down?'/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-106789330370036481</id><published>2003-11-03T15:01:00.000-06:00</published><updated>2003-11-03T15:08:49.390-06:00</updated><title type='text'></title><content type='html'>&lt;h2&gt;ASP.NET and Client Certificate : Without .NET Enterprise Services&lt;/h2&gt;&lt;br /&gt;Microsoft has a fix to the System.DLL assembly that will allow an ASP.NET application to call a Web Service using the ASPNET account and SSL.  You can find the notes to this fix at the following site &lt;a href=" http://support.microsoft.com/?id=817854"&gt;http://support.microsoft.com/?id=817854&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The architecture of the managed code is similar to the previous managed code version except there is no need to package the components in a COM+ Application.  As a result all components can run in the same process space (and AppDomain).  This will generally give better performance.  However, you must find another way to keep your connections to the backend persisted (i.e., no Object Pooling).  This is where you should consider using the ServicePoint and ServicePointManager classes.&lt;br /&gt;Required Steps&lt;br /&gt;&lt;br /&gt;1. Configure the ASPNET account to have access to the client certificate.  You can accomplish this by using the winhttpcertcfg tool that comes with the WinHTTP SDK&lt;br /&gt;a. winhttpcertcfg -g -c LOCAL_MACHINE\My -s MyCertificate -a ASPNET&lt;br /&gt;b. Note: you can see who has access to a particular store by issuing the following command line command: winhttpcertcfg.exe -l -c LOCAL_MACHINE\My -s "mycertificate"&lt;br /&gt;&lt;br /&gt;2. Apply the hot fix for the .NET Framework v1.0.  You can find the relavant information at &lt;a href="http://support.microsoft.com/?id=817854"&gt;http://support.microsoft.com/?id=817854&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;3. Export the client certificate to a file without the private key.  You will not reference the client store directly; instead you will reference this file.&lt;br /&gt;&lt;br /&gt;4. Implement the data access component using the WebResponse, WebRequest and optionally the ServicePoint and SerbvicePointManager classes.&lt;br /&gt;&lt;br /&gt;5. Implement the ICertifciatePolicy interface.&lt;br /&gt;&lt;br /&gt;6. Build the assembly and optionally signed the assembly with a strong name.&lt;br /&gt;&lt;br /&gt;7. With the assembly now built and deployed to the Asp.NET application (i.e., virtual directory); you are now ready to use the certificate to communicate with the backend.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Sample Code&lt;/h3&gt;&lt;br /&gt;While this sample doesn't show it, you should build the data access component such that it is reusable (preferable via a configuration file) against any HTTP/HTTPS endpoints, etc.  This sample also uses the ServicePoint and ServicePointManager classes to increase the number of persisted connections you can have against a single domain endpoint.  The ServicePointManager class manages the connection for you and via the FindServicePoint method will return a connection if one already exist.  If one does not exist, it will create a new connection.&lt;br /&gt;&lt;br /&gt;The following files are associated with the data access component.  The sample is meant to get the point across and as such all unnecessary code have been removed.  In an enterprise version, you would have additional features such as: logging, tracing, configuration file, etc. (please email me to get a full sample).&lt;br /&gt;You can test the sample by creating a client or ASP.NET web service to make a call to the MakeRequest method.  Just pass the method the POST data (strData), the target URL (strURI e.g., https://&lt;myserver&gt;:&lt;port&gt;) and the method by which to sent the request (strMethod e.g., POST).&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Post.cs file&lt;/h4&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Net;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Security.Cryptography.X509Certificates;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;namespace MyNamespace&lt;br /&gt;{&lt;br /&gt;	public class HTTPDataAccess&lt;br /&gt;	{&lt;br /&gt;		public HTTPDataAccess( )&lt;br /&gt;		{&lt;br /&gt;			// Set a maximum of 20 connections to the host&lt;br /&gt;			ServicePointManager.DefaultConnectionLimit = 20;&lt;br /&gt;			&lt;br /&gt;			// 1 minutes max ideal time&lt;br /&gt;			ServicePointManager.MaxServicePointIdleTime = 100000;&lt;br /&gt;			ServicePointManager.CertificatePolicy = new CertPolicy();	&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		private string MakeRequest(string strData, string strURI, string strMethod)&lt;br /&gt;		{&lt;br /&gt;			// retrieve an existing connection to the specified URL (i.e., strURI) or create a new one&lt;br /&gt;			ServicePoint sp = ServicePointManager.FindServicePoint( strURI, null );							&lt;br /&gt;&lt;br /&gt;			// create an instance of the httpWebRequest object&lt;br /&gt;			HttpWebRequest req = ( HttpWebRequest ) WebRequest.Create( sp.Address );&lt;br /&gt;&lt;br /&gt;			// add a client certificate to the http request object&lt;br /&gt;			req.ClientCertificates.Add( X509Certificate.CreateFromCertFile( @"D:\MyCertificates\dotnet.cer" ) );&lt;br /&gt;&lt;br /&gt;			// set the request method to POST, txml/xml with a 1 minute timeout&lt;br /&gt;			req.Method = "POST";&lt;br /&gt;			req.ContentType = "text/xml";&lt;br /&gt;			req.Timeout = 10000;				&lt;br /&gt;			req.KeepAlive = true;&lt;br /&gt;		&lt;br /&gt;			// if we have data to post, set the request stream object&lt;br /&gt;			if( strData != null )&lt;br /&gt;			{&lt;br /&gt;				byte[] SomeBytes = null;&lt;br /&gt;				SomeBytes = Encoding.UTF8.GetBytes( strData );&lt;br /&gt;				req.ContentLength = SomeBytes.Length;&lt;br /&gt;				Stream newStream = req.GetRequestStream( );&lt;br /&gt;				newStream.Write( SomeBytes, 0, SomeBytes.Length );&lt;br /&gt;				newStream.Close( );&lt;br /&gt;			}&lt;br /&gt;			else &lt;br /&gt;			{&lt;br /&gt;				req.ContentLength = 0;&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;			WebResponse result = req.GetResponse( );				&lt;br /&gt;			Stream ReceiveStream = result.GetResponseStream( );&lt;br /&gt;						&lt;br /&gt;			Encoding encode = System.Text.Encoding.GetEncoding( "utf-8" );&lt;br /&gt;			StreamReader sr = new StreamReader( ReceiveStream, encode );&lt;br /&gt;&lt;br /&gt;			string strResponse = sr.ReadToEnd( );&lt;br /&gt;&lt;br /&gt;			sr.Close( );&lt;br /&gt;			result.Close( );&lt;br /&gt;			ReceiveStream.Close( );&lt;br /&gt;&lt;br /&gt;			return strResponse;			&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;certpolicy.cs file&lt;/h4&gt;&lt;br /&gt;Same as .NET Enterprise Service Sample &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-106789330370036481?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/106789330370036481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=106789330370036481' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/106789330370036481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/106789330370036481'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2003/11/asp.html' title=''/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-106788798338499988</id><published>2003-11-03T13:33:00.000-06:00</published><updated>2003-11-03T13:57:40.650-06:00</updated><title type='text'></title><content type='html'>&lt;h3&gt;ASP.NET and Client Certificate : .NET Enterprise Services&lt;/h3&gt;&lt;br /&gt;Currently the Microsoft .NET Framework has a bug that does not allow for a configured .NET component (i.e., a .NET component that is configured as an Enterprise Service Application a.k.a. COM+ application) to access the client certificate from the key store unless the COM+ Application first loads up the user profile.  This is true even if you configure the identity of the COM+ Application to be the same as the identity of the client certificate was installed under. To work around this problem you must take a few more steps.  This process is outlined below and is further explained in this Microsoft article &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/SecNetHT13.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/SecNetHT13.asp&lt;/a&gt;.&lt;br /&gt;&lt;h5&gt;Required Steps&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;1.	Install the Client Certificate and note the id the certificate was installed under&lt;br /&gt;&lt;br /&gt;2.	Export the client certificate to a file without the private key.  You will not reference the client store directly; rather you will reference this file&lt;br /&gt;&lt;br /&gt;3.	Implement the data access component using the WebResponse and WebRequest &lt;br /&gt;a.	Load the user profile the certificate is store under before accessing the certificate (see post.cs).&lt;br /&gt;b.	Implement the ICertifciatePolicy interface (see certpolicy.cs).&lt;br /&gt;c.	Extend you data access class with  the ServiceComponent class (see post.cs)&lt;br /&gt;i.	Note:  It is also advisable to create an interface to describe the public methods and implement the interface.  This will allow you to see the public methods when viewing the configured component under the Component Service MMC snap-in.&lt;br /&gt;d.	Attribute the assembly to be a service component (assembly.cs …not shown).&lt;br /&gt;e.	Unload the user profile after the call has been made (see post.cs).&lt;br /&gt;&lt;br /&gt;4.	Build the assembly and signed the assembly with a strong name.  This can be done via Visual Studio 2002/2003 or the Assembly Linker tool (al).&lt;br /&gt;&lt;br /&gt;5.	Register the assembly in the Component Service (RegSvcs) and copy to the GAC (gacutil).&lt;br /&gt;a.	regsvcs MyAssembly.DLL&lt;br /&gt;b.	gacutil /i MyAssembly.DLL&lt;br /&gt;&lt;br /&gt;6.	With the assembly registered in the GAC and configured as a .NET Enterprise Application (i.e., COM+ Application).  Set the identity of the configured application to the user ID (i.e., principle) the certificate was installed with; you are now ready to use the certificate to communicate with the backend.&lt;br /&gt;&lt;h4&gt;Sample Code&lt;/h4&gt;&lt;br /&gt;While this sample doesn’t show it, you should build the data access component such that it is reusable (preferable via a configuration file) against any HTTP/HTTPS endpoints, etc.  You could also use the ServicePoint and ServicePointManager classes to increase the number of persisted connections you can have against a single domain endpoint.  The ServicePointManager class manages the connection for you and via the FindServicePoint method will return a connection if one already exist.  If one does not exist, it will create a new connection.&lt;br /&gt;The following files are associated with the data access component.  The sample is meant to get the point across and as such all unnecessary code have been removed.  In an enterprise version, you would have additional features such as: logging, tracing, connection pooling, configuration file, etc. (please email me to get a full sample).&lt;br /&gt;You can test the sample by creating a client or ASP.NET web service to make a call to the MakeRequest method.  Just pass the method the POST data (strData), the target URL (strURI e.g., https://&lt;myserver&gt;:&lt;port&gt;) and the method by which to sent the request (strMethod e.g., POST).&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Post.cs file&lt;/h4&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Net;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Security.Principal;&lt;br /&gt;using System.EnterpriseServices;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;using System.Security.Cryptography.X509Certificates;&lt;br /&gt;&lt;br /&gt;namespace NyNamespace&lt;br /&gt;{&lt;br /&gt;	public class HTTPDataAccess : ServicedComponent&lt;br /&gt;	{&lt;br /&gt;		[DllImport("advapi32.dll", CharSet=CharSet.Auto,&lt;br /&gt;SetLastError=true)]&lt;br /&gt;&lt;br /&gt;		private extern static bool DuplicateToken(IntPtr &lt;br /&gt;			ExistingTokenHandle, &lt;br /&gt;			int SECURITY_IMPERSONATION_LEVEL,&lt;br /&gt;			ref IntPtr DuplicateTokenHandle);&lt;br /&gt;&lt;br /&gt;		[DllImport("kernel32.dll", CharSet=CharSet.Auto)]&lt;br /&gt;&lt;br /&gt;		private extern static bool CloseHandle(IntPtr handle);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;		public HTTPDataAccess( )&lt;br /&gt;		{&lt;br /&gt;			ServicePointManager.CertificatePolicy = new CertPolicy();&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		private IntPtr DupeToken(IntPtr token, int Level)&lt;br /&gt;		{&lt;br /&gt;			IntPtr dupeTokenHandle = new IntPtr(0);&lt;br /&gt;			bool retVal = DuplicateToken(token, Level, ref dupeTokenHandle);&lt;br /&gt;			if (false == retVal)&lt;br /&gt;			{  &lt;br /&gt;				return IntPtr.Zero;&lt;br /&gt;			}&lt;br /&gt;			return dupeTokenHandle;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		public string PostRequest( string strData, string strURI )&lt;br /&gt;		{&lt;br /&gt;			try&lt;br /&gt;			{&lt;br /&gt;				bool retVal = false;&lt;br /&gt;&lt;br /&gt;// Need to duplicate the token. LoadUserProfile needs a token &lt;br /&gt;// with TOKEN_IMPERSONATE and TOKEN_DUPLICATE.&lt;br /&gt;&lt;br /&gt;				const int SecurityImpersonation = 2;&lt;br /&gt;				IntPtr dupeTokenHandle = DupeToken(WindowsIdentity.GetCurrent().Token,SecurityImpersonation);&lt;br /&gt;&lt;br /&gt;				if(IntPtr.Zero == dupeTokenHandle)&lt;br /&gt;				{&lt;br /&gt;					throw new Exception("Unable to duplicate token.");&lt;br /&gt;				}&lt;br /&gt;				&lt;br /&gt;// Load the profile.&lt;br /&gt;&lt;br /&gt;				ProfileManager.PROFILEINFO profile = new ProfileManager.PROFILEINFO();&lt;br /&gt;				profile.dwSize = 32;&lt;br /&gt;				profile.lpUserName = @"headlam6\dotnetacct";&lt;br /&gt;				&lt;br /&gt;				retVal = ProfileManager.LoadUserProfile(dupeTokenHandle, ref profile);&lt;br /&gt;				&lt;br /&gt;				if(false == retVal)&lt;br /&gt;				{&lt;br /&gt;					throw new Exception("Error loading user profile. " + Marshal.GetLastWin32Error());&lt;br /&gt;				}			&lt;br /&gt;				&lt;br /&gt;&lt;br /&gt;// create an instance of the httpWebRequest object&lt;br /&gt;				HttpWebRequest req = ( HttpWebRequest ) WebRequest.Create( strURL );&lt;br /&gt;&lt;br /&gt;				&lt;br /&gt;// set the request method to POST, txml/xml with a 1 minute timeout&lt;br /&gt;				req.Method = "POST";&lt;br /&gt;				req.ContentType = "text/xml";&lt;br /&gt;				req.Timeout = 1000;&lt;br /&gt;				&lt;br /&gt;				&lt;br /&gt;// create an .X509 certificate and associated it with the &lt;br /&gt;// HttpWebRequest object&lt;br /&gt;// the certificate info we exported are stored in the file D:\MyCertificates.cer in this&lt;br /&gt;// example&lt;br /&gt;&lt;br /&gt;				X509Certificate x509 = &lt;br /&gt;X509Certificate.CreateFromCertFile( @"D:\MyCertificates.cer" );&lt;br /&gt;				req.ClientCertificates.Add( x509 );&lt;br /&gt;&lt;br /&gt;// if we have data to post, set the request stream object&lt;br /&gt;				if( strData != null )&lt;br /&gt;				{&lt;br /&gt;					byte[] SomeBytes = null;&lt;br /&gt;					SomeBytes = Encoding.UTF8.GetBytes( strData );&lt;br /&gt;					req.ContentLength = SomeBytes.Length;&lt;br /&gt;					Stream newStream = req.GetRequestStream( );&lt;br /&gt;					newStream.Write( SomeBytes, 0, SomeBytes.Length );&lt;br /&gt;					newStream.Close( );&lt;br /&gt;				}&lt;br /&gt;				else &lt;br /&gt;				{&lt;br /&gt;					req.ContentLength = 0;&lt;br /&gt;				}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// get the response form the back end&lt;br /&gt;				WebResponse result = req.GetResponse( );&lt;br /&gt;				&lt;br /&gt;				Stream ReceiveStream = result.GetResponseStream( );&lt;br /&gt;				&lt;br /&gt;				Encoding encode = System.Text.Encoding.GetEncoding( "utf-8" );&lt;br /&gt;				StreamReader sr = new StreamReader( ReceiveStream, encode );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// unload the user profile and clean up the handel&lt;br /&gt;				ProfileManager.UnloadUserProfile (WindowsIdentity.GetCurrent().Token, profile.hProfile);&lt;br /&gt;				CloseHandle(dupeTokenHandle);&lt;br /&gt;								&lt;br /&gt;&lt;br /&gt;// return the result to the ASP.NET code or the client&lt;br /&gt;				return sr.ReadToEnd( );&lt;br /&gt;&lt;br /&gt;			}&lt;br /&gt;			catch( WebException ex )&lt;br /&gt;			{&lt;br /&gt;				return ex.Message;&lt;br /&gt;			}&lt;br /&gt;			catch( Exception ex )&lt;br /&gt;			{&lt;br /&gt;				return ex.Message;&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;h4&gt;CertPolicy.cs&lt;/h4&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Net;&lt;br /&gt;using System.Security.Cryptography.X509Certificates;&lt;br /&gt;&lt;br /&gt;namespace NyNamespace&lt;br /&gt;{&lt;br /&gt;	//Implement the ICertificatePolicy interface&lt;br /&gt;	class CertPolicy: ICertificatePolicy&lt;br /&gt;	{&lt;br /&gt;		public bool CheckValidationResult(ServicePoint srvPoint, &lt;br /&gt;X509Certificate certificate, WebRequest request, int certificateProblem)&lt;br /&gt;		{&lt;br /&gt;// you can do your own certificate checking here&lt;br /&gt;// you can get the error values from WinError.h, &lt;br /&gt;// all the certificate errors start with Cert_&lt;br /&gt;			&lt;br /&gt;&lt;br /&gt;// we just return true so any certificate will work with this sample&lt;br /&gt;			return true;&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;h4&gt;ProfileManager.cs&lt;/h4&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;namespace NyNamespace&lt;br /&gt;{&lt;br /&gt;	internal class ProfileManager&lt;br /&gt;	{&lt;br /&gt;		[DllImport("Userenv.dll", SetLastError=true,&lt;br /&gt;		 CharSet=System.Runtime.InteropServices.CharSet.Auto)]&lt;br /&gt;&lt;br /&gt;		internal static extern bool LoadUserProfile(IntPtr hToken, &lt;br /&gt;			ref PROFILEINFO lpProfileInfo);&lt;br /&gt;&lt;br /&gt;		[DllImport("Userenv.dll", SetLastError=true,&lt;br /&gt;		 CharSet=System.Runtime.InteropServices.CharSet.Auto)]&lt;br /&gt;&lt;br /&gt;		internal static extern bool  UnloadUserProfile( IntPtr hToken, IntPtr hProfile);&lt;br /&gt;&lt;br /&gt;		[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]&lt;br /&gt;			public struct PROFILEINFO&lt;br /&gt;		{&lt;br /&gt;			public int dwSize; &lt;br /&gt;			public int dwFlags; &lt;br /&gt;			public String lpUserName; &lt;br /&gt;			public String lpProfilePath; &lt;br /&gt;			public String lpDefaultPath; &lt;br /&gt;			public String lpServerName; &lt;br /&gt;			public String lpPolicyPath; &lt;br /&gt;			public IntPtr hProfile; &lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-106788798338499988?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/106788798338499988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=106788798338499988' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/106788798338499988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/106788798338499988'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2003/11/asp_03.html' title=''/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-106781242517596705</id><published>2003-11-02T16:33:00.000-06:00</published><updated>2003-11-02T16:36:08.116-06:00</updated><title type='text'></title><content type='html'>&lt;h4&gt;ASP.NET &amp; Client Certificates&lt;/h4&gt;&lt;br /&gt;ASP.NET v1.0 applications have a problem delivering a client certificate to a secure endpoint. While there are ways around this problem using .NET Enterprise Services (a.k.a. COM+ Services) the performance with the .NET Enterprise Services solution is less than ideal and the implementation has less to be desired. Microsoft has since come out with a fix that allow ASP.NET v1.0 to deliver the certificate &lt;a href="http://support.microsoft.com/?id=817854"&gt;Ckeck out the article&lt;/a&gt;.  The performance with this solution is much better and the design is very simple. I have not tested ASP.NET v1.1 to see if the original problem still exists… stay tuned.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-106781242517596705?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/106781242517596705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=106781242517596705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/106781242517596705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/106781242517596705'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2003/11/asp_02.html' title=''/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6024700.post-106781088536478958</id><published>2003-11-02T16:08:00.000-06:00</published><updated>2003-11-02T16:35:47.306-06:00</updated><title type='text'></title><content type='html'>&lt;h4&gt;PDC 2003&lt;/h4&gt;&lt;br /&gt;PDC 2003 was a blast.  Microsoft for the first time publicly announced several products: Whidbey (the next version of Visual Studio .NET) and &lt;a href="http://msdn.microsoft.com/longhorn/"&gt;Longhorn &lt;/a&gt;(and http://www.longhornblogs.com/)  (the next version of Windows).  Within the Longhorn product there were four areas of interest: &lt;a href="http://msdn.microsoft.com/longhorn/default.aspx?pull=/msdnmag/issues/04/01/Avalon/default.aspx"&gt;Avalon &lt;/a&gt;(a new UI interface), &lt;a href="http://msdn.microsoft.com/events/pdc/default.aspx?pull=/msdnmag/issues/04/01/indigo/default.aspx"&gt;Indigo &lt;/a&gt;(a service oriented system for sending and processing messages), &lt;a href="http://msdn.microsoft.com/longhorn/default.aspx?pull=/msdnmag/issues/04/01/WinFS/default.aspx"&gt;WinFS &lt;/a&gt;( a new file system built on top of NTFS) and &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql_ovyukondev.asp"&gt;Yukon &lt;/a&gt;(the next version of SQL Server.&lt;br /&gt;&lt;br /&gt;New &lt;a href="http://msdn.microsoft.com/vcsharp/"&gt;C#&lt;/a&gt; Features.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024700-106781088536478958?l=normanheadlam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://normanheadlam.blogspot.com/feeds/106781088536478958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024700&amp;postID=106781088536478958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/106781088536478958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024700/posts/default/106781088536478958'/><link rel='alternate' type='text/html' href='http://normanheadlam.blogspot.com/2003/11/pdc-2003-pdc-2003-was-blast.html' title=''/><author><name>Norman Headlam</name><uri>http://www.blogger.com/profile/00809889822980024033</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
