<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>.NET Ramblings - Brian Noyes' Blog - Languages and Tools</title>
    <link>http://www.softinsight.com/bnoyes/</link>
    <description>Occasional mutterings on .NET architecture and development</description>
    <language>en-us</language>
    <copyright>Brian Noyes</copyright>
    <lastBuildDate>Mon, 30 Apr 2007 18:10:48 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>brian@softinsight.com</managingEditor>
    <webMaster>brian@softinsight.com</webMaster>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=bff4995d-a9a9-4b94-8444-e99aceaddd78</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,bff4995d-a9a9-4b94-8444-e99aceaddd78.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,bff4995d-a9a9-4b94-8444-e99aceaddd78.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=bff4995d-a9a9-4b94-8444-e99aceaddd78</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Watching Scott Guthrie's keynote at Mix07 right now. The word is finally out - and
wow. Silverlight is not just a Flash alternative - it is a cross platform, cross browser
.NET runtime and framework. C#, VB, any .NET language driving display in the browser,
running on the client side, on other platforms.
</p>
        <p>
Beta for 1.0 is out today, available on <a href="http://www.silverlight.net">www.silverlight.net</a>. 
</p>
        <p>
You can even debug cross platform with the .NET code running in a Mac browser. I think
we are not far from stepping through the time space continuum now...
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=bff4995d-a9a9-4b94-8444-e99aceaddd78" />
      </body>
      <title>Silverlight - not just pretty graphics - Cross platform .NET Framework!</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,bff4995d-a9a9-4b94-8444-e99aceaddd78.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2007/04/30/SilverlightNotJustPrettyGraphicsCrossPlatformNETFramework.aspx</link>
      <pubDate>Mon, 30 Apr 2007 18:10:48 GMT</pubDate>
      <description>&lt;p&gt;
Watching Scott Guthrie's keynote at Mix07 right now. The word is finally out - and
wow. Silverlight is not just a Flash alternative - it is a cross platform, cross browser
.NET runtime and framework. C#, VB, any .NET language driving display in the browser,
running on the client side, on other platforms.
&lt;/p&gt;
&lt;p&gt;
Beta for 1.0 is out today, available on &lt;a href="http://www.silverlight.net"&gt;www.silverlight.net&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
You can even debug cross platform with the .NET code running in a Mac browser. I think
we are not far from stepping through the time space continuum now...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=bff4995d-a9a9-4b94-8444-e99aceaddd78" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,bff4995d-a9a9-4b94-8444-e99aceaddd78.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=ffa69b0b-d616-4208-b5e5-3434c5db7f7a</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,ffa69b0b-d616-4208-b5e5-3434c5db7f7a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,ffa69b0b-d616-4208-b5e5-3434c5db7f7a.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=ffa69b0b-d616-4208-b5e5-3434c5db7f7a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Its been a sparse year of blogging due to a lot of overlapping commitments, but I
am going to try to remedy that now that I am digging my way out.
</p>
        <p>
A couple of great articles on VSTS and team development have recently been posted
on CodePlex. The first is some general guidance for structuring your projects in team
system:
</p>
        <p>
          <a href="http://www.codeplex.com/BranchingGuidance/Wiki/View.aspx?title=Guidance%20for%20Structuring%20Team%20Projects">http://www.codeplex.com/BranchingGuidance/Wiki/View.aspx?title=Guidance%20for%20Structuring%20Team%20Projects</a>
        </p>
        <p>
The other is guidance on branching and merging:
</p>
        <p>
          <a href="http://www.codeplex.com/BranchingGuidance/">http://www.codeplex.com/BranchingGuidance/</a>
        </p>
        <p>
Some good reading on using TFS right for your team.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ffa69b0b-d616-4208-b5e5-3434c5db7f7a" />
      </body>
      <title>Great guidance on using Team Foundation Server for your projects</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,ffa69b0b-d616-4208-b5e5-3434c5db7f7a.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2007/04/28/GreatGuidanceOnUsingTeamFoundationServerForYourProjects.aspx</link>
      <pubDate>Sat, 28 Apr 2007 12:24:41 GMT</pubDate>
      <description>&lt;p&gt;
Its been a sparse year of blogging due to a lot of overlapping commitments, but I
am going to try to remedy that now that I am digging my way out.
&lt;/p&gt;
&lt;p&gt;
A couple of great articles on VSTS and team development have recently been posted
on CodePlex. The first is some general guidance for structuring your projects in team
system:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.codeplex.com/BranchingGuidance/Wiki/View.aspx?title=Guidance%20for%20Structuring%20Team%20Projects"&gt;http://www.codeplex.com/BranchingGuidance/Wiki/View.aspx?title=Guidance%20for%20Structuring%20Team%20Projects&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The other is guidance on branching and merging:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.codeplex.com/BranchingGuidance/"&gt;http://www.codeplex.com/BranchingGuidance/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Some good reading on using TFS right for your team.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ffa69b0b-d616-4208-b5e5-3434c5db7f7a" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,ffa69b0b-d616-4208-b5e5-3434c5db7f7a.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=4642a111-f04c-4a28-9395-8454c4eb5ced</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=4642a111-f04c-4a28-9395-8454c4eb5ced</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For those of you looking for the ClickOnce Community Resource Kit I wrote for the
Patterns and Practices Smart Client Software Factory team, you may have found that
it has disappeared from its old location on GotDotNet.
</p>
        <p>
In case you haven't heard, GotDotNet is slowly fading away (known as dying a slow
death in some circles) and <a href="http://www.codeplex.com">CodePlex</a> has replaced
it as the place that Microsoft will put community resources.  So if you go looking
for something on GotDotNet and don't find it, make sure you do a search on CodePlex.
</p>
        <p>
The download for my ClickOnce Community Resource Kit can be found here:
</p>
        <p>
          <a href="http://www.codeplex.com/smartclient/Project/FileDownload.aspx?DownloadId=5060">http://www.codeplex.com/smartclient/Project/FileDownload.aspx?DownloadId=5060</a>
        </p>
        <p>
on the <a href="http://www.codeplex.com/smartclient/Wiki/View.aspx?title=Smart%20Client%20Software%20Factory">Wiki
for the Smart Client Guidance</a>.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=4642a111-f04c-4a28-9395-8454c4eb5ced" />
      </body>
      <title>ClickOnce Community Resource Kit has found a new home</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2007/03/13/ClickOnceCommunityResourceKitHasFoundANewHome.aspx</link>
      <pubDate>Tue, 13 Mar 2007 11:10:10 GMT</pubDate>
      <description>&lt;p&gt;
For those of you looking for the ClickOnce Community Resource Kit I wrote for the
Patterns and Practices Smart Client Software Factory team, you may have found that
it has disappeared from its old location on GotDotNet.
&lt;/p&gt;
&lt;p&gt;
In case you haven't heard, GotDotNet is slowly fading away (known as dying a slow
death in some circles) and &lt;a href="http://www.codeplex.com"&gt;CodePlex&lt;/a&gt; has replaced
it as the place that Microsoft will put community resources.&amp;nbsp; So if you go looking
for something on GotDotNet and don't find it, make sure you do a search on CodePlex.
&lt;/p&gt;
&lt;p&gt;
The download for my ClickOnce Community Resource Kit can be found here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.codeplex.com/smartclient/Project/FileDownload.aspx?DownloadId=5060"&gt;http://www.codeplex.com/smartclient/Project/FileDownload.aspx?DownloadId=5060&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
on the &lt;a href="http://www.codeplex.com/smartclient/Wiki/View.aspx?title=Smart%20Client%20Software%20Factory"&gt;Wiki
for the Smart Client Guidance&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=4642a111-f04c-4a28-9395-8454c4eb5ced" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=ab44a772-a802-4789-88ec-3b3356451b90</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,ab44a772-a802-4789-88ec-3b3356451b90.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,ab44a772-a802-4789-88ec-3b3356451b90.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=ab44a772-a802-4789-88ec-3b3356451b90</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recorded a <a href="http://www.dnrtv.com/default.aspx?showID=56">dnrTV with Carl</a> a
while back on WPF and it was posted last week. I'll be recording a part 2 this week
so keep your eyes out for that. This episode gives a good overview of what programming
WPF is like (for now until the tools evolve some more) and what the structure of a
WPF application is. Part 2 will dive deeper into data binding, styles and resources,
as well as a few other things.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ab44a772-a802-4789-88ec-3b3356451b90" />
      </body>
      <title>Hands on WPF - dnrTV - Part 1</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,ab44a772-a802-4789-88ec-3b3356451b90.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2007/03/12/HandsOnWPFDnrTVPart1.aspx</link>
      <pubDate>Mon, 12 Mar 2007 12:24:02 GMT</pubDate>
      <description>&lt;p&gt;
I recorded a &lt;a href="http://www.dnrtv.com/default.aspx?showID=56"&gt;dnrTV with Carl&lt;/a&gt; a
while back on WPF and it was posted last week. I'll be recording a part 2 this week
so keep your eyes out for that. This episode gives a good overview of what programming
WPF is like (for now until the tools evolve some more) and what the structure of a
WPF application is. Part 2 will dive deeper into data binding, styles and resources,
as well as a few other things.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ab44a772-a802-4789-88ec-3b3356451b90" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,ab44a772-a802-4789-88ec-3b3356451b90.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here are the slides and demos from last week's webcast. Keep in mind that you will
need to add a Modified DateTime column and respective stored procedures to your database
to be able to run the code as it was demo'ed in the webcast. The demo code includes
my CodeSmith templates for generating those stored procedures and also one for making
the coumn modification scripts for you if you want to do it to all the tables in your
database that are transactional. There is also a SQL script just for doing the Employees
table in Northwind, which was all I used in the demos.
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/MSDNWebcasts/DataSetDesigner.pdf">Slides</a>
        </p>
        <p>
          <a href="http://www.softinsight.com/downloads/MSDNWebcasts/DataSetDesignerDemos.zip">Demos</a>
        </p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06" />
      </body>
      <title>MSDN Webcast: Implement a Data Access Layer with the Visual Studio 2005 DataSet Designer slides and demos</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/07/14/MSDNWebcastImplementADataAccessLayerWithTheVisualStudio2005DataSetDesignerSlidesAndDemos.aspx</link>
      <pubDate>Fri, 14 Jul 2006 14:13:51 GMT</pubDate>
      <description>&lt;p&gt;
Here are the slides and demos from last week's webcast. Keep in mind that you will
need to add a Modified DateTime column and respective stored procedures to your database
to be able to run the code as it was demo'ed in the webcast. The demo code includes
my CodeSmith templates for generating those stored procedures and also one for making
the coumn modification scripts for you if you want to do it to all the tables in your
database that are transactional. There is also a SQL script just for doing the Employees
table in Northwind, which was all I used in the demos.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/MSDNWebcasts/DataSetDesigner.pdf"&gt;Slides&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/MSDNWebcasts/DataSetDesignerDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=78d107d1-3937-4d8d-81d9-73cb6ae18eee</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=78d107d1-3937-4d8d-81d9-73cb6ae18eee</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've had several people ask questions surrounding how to get a pfx file to use for
ClickOnce manifest signing when you have purchased a real certificate from a provider
like Verisign or Comodo (<a href="http://www.instantssl.com">www.instantssl.com</a> -
a great, cheaper alternative that has its root issuer already installed as a trusted
root certification authority).
</p>
        <p>
Usually when you purchase a certificate, the process involves going to the provider's
site, such as instantssl.com, providing your contact information online and entering
payment information. The certificate issuer must then verify your identity through
some means (corporate DUNS number, business license, bank statement, utility bill,
etc.). Once they have done that, they will allow you to download and install your
certificate through your browser. They should also provide you with a separate download
or generation of a .pvk (private key) file that will contain the private key portion
of your certificate. They may or may not provide you a download of a .spc or .cer
file that just contains the public key portion of your certificate. If they do not
provide a download of the .spc file, you may have to export it from your certificate
store after the browser installs it as described later in this post.
</p>
        <p>
Step 1: Download and install pvkimprt.exe<br />
If you have a .spc or .cer file and a .pvk file, then you have the pieces you need
to create a .pfx file. You will need to download,expand, and install the pfximprt
tool,  which you can get here:
</p>
        <p>
          <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=F9992C94-B129-46BC-B240-414BDFF679A7&amp;displaylang=EN">http://www.microsoft.com/downloads/details.aspx?FamilyID=F9992C94-B129-46BC-B240-414BDFF679A7&amp;displaylang=EN</a>
        </p>
        <p>
Generate an install a public/private key pair certificate in your store<br />
To generate a pfx file from an spc/cer and pvk file, do the following:<br />
1. Open a command prompt and run pvkimprt, passing the spc and pvk file:<br />
C:\&gt;"C:\Program Files\Pvkimprt\pvkimprt.exe" softinsight_comodo.spc softinsight_comodo.pvk<br />
2. You will be prompted for a password for the pvk file as shown in Figure 1. The
password is the one you provided when you ordered the certificate or when the pvk
file was issued to you.
</p>
        <p>
          <img alt="password prompt" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure1.png" align="baseline" border="0" />
        </p>
        <p>
Figure 1
</p>
        <p>
3. After entering your password and clicking OK, the certificate import wizard will
launch as shown in Figure 2.<br /><img alt="start import wizard" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure2.png" align="baseline" border="0" /></p>
        <p>
Figure 2
</p>
        <p>
4. Click Next, and you will be prompted as shown in Figure 3 for selecting the store.
Just allow it to automatically select the store (the default) and click Next.<br /><img alt="select cert store" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure3.png" align="baseline" border="0" /></p>
        <p>
Figure 3
</p>
        <p>
          <br />
5. You will then just see the summary as shown in Figure 4, click Finish.<br /><img alt="Import summary" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure4.png" align="baseline" border="0" /></p>
        <p>
Figure 4
</p>
        <p>
6. You should now have a publisher certificate installed into your personal certificate
store that contains both the public and private keys for the same certificate. Now
you need to export it to a .pfx file that you can back up and use on other machines.
Open certmgr by running certmgr.exe from a Visual Studio 2005 command prompt (see
Figure 5).<br /><img alt="certmgr.exe" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure5.png" align="baseline" border="0" /></p>
        <p>
Figure 5
</p>
        <p>
7. Find the certificate you just imported (by publisher name) in the list in the Personal
tab (selected by default). Press the Export button.<br />
8. The first step of the export wizard will be presented (see Figure 6). Press Next.<br /><img alt="Start export wizard" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure6.png" align="baseline" border="0" /></p>
        <p>
Figure 6
</p>
        <p>
9. The next step asks whether you want to export the private key. If you are generating
a pfx file for ClickOnce deployment, the answer here must be yes, which is not selected
by default (see Figure 7). Press Next.<br /><img alt="Export private key prompt" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure7.png" align="baseline" border="0" /></p>
        <p>
Figure 7
</p>
        <p>
10. The next step asks what export file format you want, the default is fine (see
Figure 8). Press Next.<br /><img alt="Export file format selection" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure8.png" align="baseline" border="0" /></p>
        <p>
Figure 8
</p>
        <p>
11. The next step asks for a password to protect the pfx file that will be output,
use a secure password and be careful who you give it to because this is the last line
of defense if someone is able to get their hands on your physical pfx file to prevent
them from being able to use it. Enter a password twice and click Next (see Figure
9)<br /><img alt="Password prompt" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure9.png" align="baseline" border="0" /></p>
        <p>
Figure 9
</p>
        <p>
12. The next step has you enter the path to the output file. You can press the browse
button and navigate to the desired folder and select the file format from the file
type drop down, or you can just type in a path (see Figure 10). Press Next.<br /><img alt="Output file path" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure10.png" align="baseline" border="0" /></p>
        <p>
Figure 10
</p>
        <p>
13. You will see the summary screen, press Finish to generate the file (see Figure
11).<br /><img alt="Summary screen" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure11.png" align="baseline" border="0" /></p>
        <p>
Figure 11
</p>
        <p>
14. You will see a message box showing that the export was successful (see Figure
12).<br /><img alt="Finished prompt" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure12.png" align="baseline" border="0" /></p>
        <p>
Figure 12
</p>
        <p>
At this point you now have a pfx file that you can point to with your Visual Studio
project Signing tab properties to sign your ClickOnce manifests. You can share that
file with other trusted members of your team and they can use it to sign your applications
to put them into production.
</p>
        <p>
Just realize that anyone who gets their hands on that file and knows or can guess
the password will be able to sign and publish applications that look like they come
from you, so you need to treat those files (particularly the pfx and pvk) very carefully.
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
          <br />
 
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=78d107d1-3937-4d8d-81d9-73cb6ae18eee" />
      </body>
      <title>Managing ClickOnce publisher certificate files </title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/06/23/ManagingClickOncePublisherCertificateFiles.aspx</link>
      <pubDate>Fri, 23 Jun 2006 23:04:18 GMT</pubDate>
      <description>&lt;p&gt;
I've had several people ask questions surrounding how to get a pfx file to use for
ClickOnce manifest signing when you have purchased a real certificate from a provider
like Verisign or Comodo (&lt;a href="http://www.instantssl.com"&gt;www.instantssl.com&lt;/a&gt; -
a great, cheaper alternative that has its root issuer already installed as a trusted
root certification authority).
&lt;/p&gt;
&lt;p&gt;
Usually when you purchase a certificate, the process involves going to the provider's
site, such as instantssl.com, providing your contact information online and entering
payment information. The certificate issuer must then verify your identity through
some means (corporate DUNS number, business license, bank statement, utility bill,
etc.). Once they have done that, they will allow you to download and install your
certificate through your browser. They should also provide you with a separate download
or generation of a .pvk (private key) file that will contain the private key portion
of your certificate. They may or may not provide you a download of a .spc or .cer
file that just contains the public key portion of your certificate. If they do not
provide a download of the .spc file, you may have to export it from your certificate
store after the browser installs it as described later in this post.
&lt;/p&gt;
&lt;p&gt;
Step 1: Download and install pvkimprt.exe&lt;br&gt;
If you have a .spc or .cer file and a .pvk file, then you have the pieces you need
to create a .pfx file. You will need to download,expand, and install the pfximprt
tool,&amp;nbsp; which you can get here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=F9992C94-B129-46BC-B240-414BDFF679A7&amp;amp;displaylang=EN"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=F9992C94-B129-46BC-B240-414BDFF679A7&amp;amp;displaylang=EN&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Generate an install a public/private key pair certificate in your store&lt;br&gt;
To generate a pfx file from an spc/cer and pvk file, do the following:&lt;br&gt;
1. Open a command prompt and run pvkimprt, passing the spc and pvk file:&lt;br&gt;
C:\&amp;gt;"C:\Program Files\Pvkimprt\pvkimprt.exe" softinsight_comodo.spc softinsight_comodo.pvk&lt;br&gt;
2. You will be prompted for a password for the pvk file as shown in Figure 1. The
password is the one you provided when you ordered the certificate or when the pvk
file was issued to you.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="password prompt" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure1.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 1
&lt;/p&gt;
&lt;p&gt;
3. After entering your password and clicking OK, the certificate import wizard will
launch as shown in Figure 2.&lt;br&gt;
&lt;img alt="start import wizard" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure2.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 2
&lt;/p&gt;
&lt;p&gt;
4. Click Next, and you will be prompted as shown in Figure 3 for selecting the store.
Just allow it to automatically select the store (the default) and click Next.&lt;br&gt;
&lt;img alt="select cert store" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure3.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 3
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
5. You will then just see the summary as shown in Figure 4, click Finish.&lt;br&gt;
&lt;img alt="Import summary" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure4.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 4
&lt;/p&gt;
&lt;p&gt;
6. You should now have a publisher certificate installed into your personal certificate
store that contains both the public and private keys for the same certificate. Now
you need to export it to a .pfx file that you can back up and use on other machines.
Open certmgr by running certmgr.exe from a Visual Studio 2005 command prompt (see
Figure 5).&lt;br&gt;
&lt;img alt=certmgr.exe hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure5.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 5
&lt;/p&gt;
&lt;p&gt;
7. Find the certificate you just imported (by publisher name) in the list in the Personal
tab (selected by default). Press the Export button.&lt;br&gt;
8. The first step of the export wizard will be presented (see Figure 6). Press Next.&lt;br&gt;
&lt;img alt="Start export wizard" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure6.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 6
&lt;/p&gt;
&lt;p&gt;
9. The next step asks whether you want to export the private key. If you are generating
a pfx file for ClickOnce deployment, the answer here must be yes, which is not selected
by default (see Figure 7). Press Next.&lt;br&gt;
&lt;img alt="Export private key prompt" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure7.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 7
&lt;/p&gt;
&lt;p&gt;
10. The next step asks what export file format you want, the default is fine (see
Figure 8). Press Next.&lt;br&gt;
&lt;img alt="Export file format selection" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure8.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 8
&lt;/p&gt;
&lt;p&gt;
11. The next step asks for a password to protect the pfx file that will be output,
use a secure password and be careful who you give it to because this is the last line
of defense if someone is able to get their hands on your physical pfx file to prevent
them from being able to use it. Enter a password twice and click Next (see Figure
9)&lt;br&gt;
&lt;img alt="Password prompt" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure9.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 9
&lt;/p&gt;
&lt;p&gt;
12. The next step has you enter the path to the output file. You can press the browse
button and navigate to the desired folder and select the file format from the file
type drop down, or you can just type in a path (see Figure 10). Press Next.&lt;br&gt;
&lt;img alt="Output file path" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure10.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 10
&lt;/p&gt;
&lt;p&gt;
13. You will see the summary screen, press Finish to generate the file (see Figure
11).&lt;br&gt;
&lt;img alt="Summary screen" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure11.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 11
&lt;/p&gt;
&lt;p&gt;
14. You will see a message box showing that the export was successful (see Figure
12).&lt;br&gt;
&lt;img alt="Finished prompt" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure12.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 12
&lt;/p&gt;
&lt;p&gt;
At this point you now have a pfx file that you can point to with your Visual Studio
project Signing tab properties to sign your ClickOnce manifests. You can share that
file with other trusted members of your team and they can use it to sign your applications
to put them into production.
&lt;/p&gt;
&lt;p&gt;
Just realize that anyone who gets their hands on that file and knows or can guess
the password will be able to sign and publish applications that look like they come
from you, so you need to treat those files (particularly the pfx and pvk) very carefully.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=78d107d1-3937-4d8d-81d9-73cb6ae18eee" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=c34df3c8-8129-4b24-ab89-890fa9540603</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=c34df3c8-8129-4b24-ab89-890fa9540603</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It was a crazy week at TechEd last week. So crazy, no time to write or consume blogs.
I gave two breakout sessions (Real World ClickOnce and Windows Forms: Build Enterprise
Ready Forms Applications) and a Birds of Feather session (Windows Workflow Foundation).
</p>
        <p>
You can get the slides and demos from the sessions here:
</p>
        <p>
Real World ClickOnce:  <a href="http://www.softinsight.com/downloads/Conferences/TechEd06/DEV318__RealWorldClickOnce.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/TechEd06/RealWorldClickOnceDemos.zip">Demos</a></p>
        <p>
Windows Forms: Build Enterprise Ready Forms Applications:  <a href="http://www.softinsight.com/downloads/Conferences/TechEd06/DEV332__BuildEnterpriseReadyFormsApps.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/TechEd06/EnterpriseFormsApplicationsDemos.zip">Demos</a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=c34df3c8-8129-4b24-ab89-890fa9540603" />
      </body>
      <title>Another TechEd Complete - Slides and Demos</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/06/19/AnotherTechEdCompleteSlidesAndDemos.aspx</link>
      <pubDate>Mon, 19 Jun 2006 13:27:37 GMT</pubDate>
      <description>&lt;p&gt;
It was a crazy week at TechEd last week. So crazy, no time to write or consume blogs.
I gave two breakout sessions (Real World ClickOnce and Windows Forms: Build Enterprise
Ready Forms Applications) and a Birds of Feather session (Windows Workflow Foundation).
&lt;/p&gt;
&lt;p&gt;
You can get the slides and demos from the sessions here:
&lt;/p&gt;
&lt;p&gt;
Real World ClickOnce:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/TechEd06/DEV318__RealWorldClickOnce.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/TechEd06/RealWorldClickOnceDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Windows Forms: Build Enterprise Ready Forms Applications:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/TechEd06/DEV332__BuildEnterpriseReadyFormsApps.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/TechEd06/EnterpriseFormsApplicationsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=c34df3c8-8129-4b24-ab89-890fa9540603" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=c83e681f-9c1a-46ce-99f1-1c91ed9e7784</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,c83e681f-9c1a-46ce-99f1-1c91ed9e7784.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,c83e681f-9c1a-46ce-99f1-1c91ed9e7784.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=c83e681f-9c1a-46ce-99f1-1c91ed9e7784</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For the students from my 3 day WCF course and 2 Day WF course this week, or for anyone
else who wants the code with out the supporting delivery, here you go.
</p>
        <p>
For those who attended, it was good working with you this week!
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/Classes/WCF3DayCourseMaterials.zip">WCF
Course Demos and Lab Code</a>
        </p>
        <p>
          <a href="http://www.softinsight.com/downloads/Classes/WF2DayCourseMaterials.zip">WF
Course Demos and Lab Code</a>
        </p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=c83e681f-9c1a-46ce-99f1-1c91ed9e7784" />
      </body>
      <title>WCF and WF Course Materials</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,c83e681f-9c1a-46ce-99f1-1c91ed9e7784.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/06/09/WCFAndWFCourseMaterials.aspx</link>
      <pubDate>Fri, 09 Jun 2006 21:57:19 GMT</pubDate>
      <description>&lt;p&gt;
For the students from my 3 day WCF course and 2 Day WF course this week, or for anyone
else who wants the code with out the supporting delivery, here you go.
&lt;/p&gt;
&lt;p&gt;
For those who attended, it was good working with you this week!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/Classes/WCF3DayCourseMaterials.zip"&gt;WCF
Course Demos and Lab Code&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/Classes/WF2DayCourseMaterials.zip"&gt;WF
Course Demos and Lab Code&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=c83e681f-9c1a-46ce-99f1-1c91ed9e7784" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,c83e681f-9c1a-46ce-99f1-1c91ed9e7784.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=0f4fc3e0-f892-4083-b432-a201fd3381dc</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=0f4fc3e0-f892-4083-b432-a201fd3381dc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blog.ziffdavis.com/devlife/">Julie Lerman</a> has a <a href="http://blog.ziffdavis.com/devlife/archive/2006/05/28/41839.aspx">nice
post </a>about creating a desktop icon as part of a ClickOnce install - a fairly common
question / request, and very representative of the kinds of "custom" things people
would like to be able to do as part of a ClickOnce installation.
</p>
        <p>
There were specific discussions about the option to create a desktop icon in some
design reviews in Redmond I took part in several years ago. If I remember correctly,
that one was dismissed mostly because it is discouraged to add desktop shortcuts as
part of an install, especially without prompting the user to let them choose.
</p>
        <p>
But part of this kind of desire really comes back to understanding the trust model
of ClickOnce in general.
</p>
        <p>
The trust issues of ClickOnce are twofold:<br />
1. ClickOnce should not make any modifications to the local machine at install
time that could affect other applications or data on the machine.<br />
2. ClickOnce should provide runtime protections to avoid allowing the application
to do harm to the local machine.
</p>
        <p>
For #1, this means that you cannot install things to the GAC, add things to the registry,
put things in specific places in the file system, etc. Any of those things could affect
other apps and users on the machine, which means that administrators are not going
to trust low-privilege users to perform ClickOnce installs. As a result, the model
will not get adopted in enterprise environments, which is the primary target environment
for ClickOnce - to replace those darn intranet web apps that companies create for
ease of maintenance with smart client apps that give the user a better experience
but are just as easy to maintain because of ClickOnce.
</p>
        <p>
So the bottom line for #1 is that the only forms of customization you have available
to you directly through ClickOnce is specifying:
</p>
        <p>
- Whether the app is available offline (meaning you get a Start menu item and an Add
or Remove Programs item)
</p>
        <p>
- When updates checks will occur
</p>
        <p>
- What the publisher name is - which sets what the program group in the Start menu
is
</p>
        <p>
- What the application name is - which sets the name of the program in the Start menu
and Add or Remove Programs
</p>
        <p>
- What the application icon is - through the Visual Studio application settings, and
used for the icon in the Start menu item and Add or Remove Programs
</p>
        <p>
There are a number of other assorted options you can set through the Publish tab,
but they all really affect how the publication and deployment occurs, but none are
in the form of explicit control over what goes where.
</p>
        <p>
For #2 - You specify what runtime permissions the application will have as part of
its publish settings (through the Security tab in VS), which end up as a list of required
permissions in the application manifest. If those permissions exceed what the application
would be granted by Code Access Security at runtime based on the zone of the launch
URL (Internet, LocalIntranet, MyComputer, TrustedSites, or RestrictedSites), then
the permissions have to be elevated either through user prompting (the default, ClickTwice
experience) or through the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/clickoncetrustpub.asp">trusted
publishers capability of ClickOnce</a>.
</p>
        <p>
The fact is that you can overcome or workaround any limitations caused by #1 by exploiting
#2. If you request full trust for your application, code in your application can do
whatever you want it to do when your application first starts up. However, this requires
one big assumption - you are also assuming the user who is running your application
has sufficient privilege to do whatever it is that your code will try to do. This
violates one of the goals of ClickOnce - to provide a deployment mechanism that can
be used by low privilege users. So if you write some custom code in your app that
tries to create a registry key - your app will have to have Registry permission through
ClickOnce, and the user will have to have permission to create a key wherever your
app is trying to create it.
</p>
        <p>
As Julie <a href="http://blog.ziffdavis.com/devlife/archive/2006/05/28/41839.aspx">points
out</a>, to create the Desktop icon with your own code, the user doesn't need any
special permissions because anyone can add a shortcut to their own desktop, but you
will need several high trust permissions including unmanaged code execution, which
basically means most people will just elevate the application to full trust to get
it done. Elevating to full trust is definitely something to avoid if you can.
</p>
        <p>
The recommended way of addressing a lot of scenarios that would require high-privilege
custom startup code is to create those things through the <a href="http://msdn.microsoft.com/msdnmag/issues/04/10/Bootstrapper/">Bootstrapper</a> as
a prerequisite. A desktop icon is not really a good candidate for that, but pre-deploying
something like GAC components is. Making something a prerequisite may allow you
to avoid requiring full trust for your application.
</p>
        <p>
However, the dirty little truth about Full Trust is that even though you should always
try to avoid jumping all the way to full trust, there are many things that you will
likely need to do in any meaningful ClickOnce app that will require you to go to full
trust. Examples include:
</p>
        <ul>
          <li>
Using the ClickOnce API ApplicationDeployment class for just about anything, such
as checking if this is the first run of a given version to execute your custom code,
or to perform on demand updates.</li>
          <li>
Using WCF for remote communications</li>
          <li>
Using Windows Workflow in your Windows Forms application</li>
        </ul>
        <p>
One way to add protections back into your application even if you do have to request
full trust for the application as a whole is to have sections of code where you restrict
permissions below that level. You can do this through Code Access Security IStackWalk
modifiers to Deny certain permissions or PermitOnly certain permissions. You can do
this to bracket out a section of code (for example where you call out to some third
party component to make sure that they are not doing something like reading/writing
from your disk or sending information over the web for data /intelligence collection
purposes). The details for doing this are too involved for this post, but I do cover
it in my upcoming ClickOnce book and the underpinnings from a CAS perspective are
covered well in my colleague Juval Lowy's <a href="http://www.amazon.com/gp/product/0596102070/102-7219285-7363314?v=glance&amp;n=283155">Programming
.NET Components, Second Edition</a>.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=0f4fc3e0-f892-4083-b432-a201fd3381dc" />
      </body>
      <title>ClickOnce Trust Model - What Should and Shouldn't You Be Able To Do Through a ClickOnce Install</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/05/29/ClickOnceTrustModelWhatShouldAndShouldntYouBeAbleToDoThroughAClickOnceInstall.aspx</link>
      <pubDate>Mon, 29 May 2006 15:27:35 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://blog.ziffdavis.com/devlife/"&gt;Julie Lerman&lt;/a&gt; has a &lt;a href="http://blog.ziffdavis.com/devlife/archive/2006/05/28/41839.aspx"&gt;nice
post &lt;/a&gt;about creating a desktop icon as part of a ClickOnce install - a fairly common
question / request, and very representative of the kinds of "custom" things people
would like to be able to do as part of a ClickOnce installation.
&lt;/p&gt;
&lt;p&gt;
There were specific discussions about the option to create a desktop icon in some
design reviews in Redmond I took part in several years ago. If I remember correctly,
that one was dismissed mostly because it is discouraged to add desktop shortcuts as
part of an install, especially without prompting the user to let them choose.
&lt;/p&gt;
&lt;p&gt;
But part of this kind of desire really comes back to understanding the trust model
of ClickOnce in general.
&lt;/p&gt;
&lt;p&gt;
The trust issues of ClickOnce are twofold:&lt;br&gt;
1.&amp;nbsp;ClickOnce should not make any modifications to the local machine at install
time that could affect other applications or data on the machine.&lt;br&gt;
2.&amp;nbsp;ClickOnce should provide runtime protections to avoid allowing the application
to do harm to the local machine.
&lt;/p&gt;
&lt;p&gt;
For #1, this means that you cannot install things to the GAC, add things to the registry,
put things in specific places in the file system, etc. Any of those things could affect
other apps and users on the machine, which means that administrators are not going
to trust low-privilege users to perform ClickOnce installs. As a result, the model
will not get adopted in enterprise environments, which is the primary target environment
for ClickOnce - to replace those darn intranet web apps that companies create for
ease of maintenance with smart client apps that give the user a better experience
but are just as easy to maintain because of ClickOnce.
&lt;/p&gt;
&lt;p&gt;
So the bottom line for #1 is that the only forms of customization you have available
to you directly through ClickOnce is specifying:
&lt;/p&gt;
&lt;p&gt;
- Whether the app is available offline (meaning you get a Start menu item and an Add
or Remove Programs item)
&lt;/p&gt;
&lt;p&gt;
- When updates checks will occur
&lt;/p&gt;
&lt;p&gt;
- What the publisher name is - which sets what the program group in the Start menu
is
&lt;/p&gt;
&lt;p&gt;
- What the application name is - which sets the name of the program in the Start menu
and Add or Remove Programs
&lt;/p&gt;
&lt;p&gt;
- What the application icon is - through the Visual Studio application settings, and
used for the icon in the Start menu item and Add or Remove Programs
&lt;/p&gt;
&lt;p&gt;
There are a number of other assorted options you can set through the Publish tab,
but they all really affect how the publication and deployment occurs, but none are
in the form of explicit control over what goes where.
&lt;/p&gt;
&lt;p&gt;
For #2 - You specify what runtime permissions the application will have as part of
its publish settings (through the Security tab in VS), which end up as a list of required
permissions in the application manifest. If those permissions exceed what the application
would be granted by Code Access Security at runtime based on the zone of the launch
URL (Internet, LocalIntranet, MyComputer, TrustedSites, or RestrictedSites), then
the permissions have to be elevated either through user prompting (the default, ClickTwice
experience) or through the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/clickoncetrustpub.asp"&gt;trusted
publishers capability of ClickOnce&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The fact is that you can overcome or workaround any limitations caused by #1 by exploiting
#2. If you request full trust for your application, code in your application can do
whatever you want it to do when your application first starts up. However, this requires
one big assumption - you are also assuming the user who is running your application
has sufficient privilege to do whatever it is that your code will try to do. This
violates one of the goals of ClickOnce - to provide a deployment mechanism that can
be used by low privilege users. So if you write some custom code in your app that
tries to create a registry key - your app will have to have Registry permission through
ClickOnce, and the user will have to have permission to create a key wherever your
app is trying to create it.
&lt;/p&gt;
&lt;p&gt;
As Julie &lt;a href="http://blog.ziffdavis.com/devlife/archive/2006/05/28/41839.aspx"&gt;points
out&lt;/a&gt;, to create the Desktop icon with your own code, the user doesn't need any
special permissions because anyone can add a shortcut to their own desktop, but&amp;nbsp;you
will need several high trust permissions including unmanaged code execution, which
basically means most people will just elevate the application to full trust to get
it done. Elevating to full trust is definitely something to avoid if you can.
&lt;/p&gt;
&lt;p&gt;
The recommended way of addressing a lot of scenarios that would require high-privilege
custom startup code is to create those things through the &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/10/Bootstrapper/"&gt;Bootstrapper&lt;/a&gt;&amp;nbsp;as
a prerequisite. A desktop icon is not really a good candidate for that, but pre-deploying
something like GAC components is. Making&amp;nbsp;something a prerequisite may allow you
to avoid requiring full trust for your application.
&lt;/p&gt;
&lt;p&gt;
However, the dirty little truth about Full Trust is that even though you should always
try to avoid jumping all the way to full trust, there are many things that you will
likely need to do in any meaningful ClickOnce app that will require you to go to full
trust. Examples include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Using the ClickOnce API ApplicationDeployment class for just about anything, such
as checking if this is the first run of a given version to execute your custom code,
or to perform on demand updates.&lt;/li&gt;
&lt;li&gt;
Using WCF for remote communications&lt;/li&gt;
&lt;li&gt;
Using Windows Workflow in your Windows Forms application&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
One way to add protections back into your application even if you do have to request
full trust for the application as a whole is to have sections of code where you restrict
permissions below that level. You can do this through Code Access Security IStackWalk
modifiers to Deny certain permissions or PermitOnly certain permissions. You can do
this to bracket out a section of code (for example where you call out to some third
party component to make sure that they are not doing something like reading/writing
from your disk or sending information over the web for data /intelligence collection
purposes). The details for doing this are too involved for this post, but I do cover
it in my upcoming ClickOnce book and the underpinnings from a CAS perspective are
covered well in my colleague Juval Lowy's &lt;a href="http://www.amazon.com/gp/product/0596102070/102-7219285-7363314?v=glance&amp;amp;n=283155"&gt;Programming
.NET Components, Second Edition&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=0f4fc3e0-f892-4083-b432-a201fd3381dc" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=defe9d7b-97a6-4afc-8c3c-f51b537b5a21</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,defe9d7b-97a6-4afc-8c3c-f51b537b5a21.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,defe9d7b-97a6-4afc-8c3c-f51b537b5a21.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=defe9d7b-97a6-4afc-8c3c-f51b537b5a21</wfw:commentRss>
      <title>Mid-Atlantic Code Camp - Schedule Up and Volunteers Needed!</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,defe9d7b-97a6-4afc-8c3c-f51b537b5a21.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/05/27/MidAtlanticCodeCampScheduleUpAndVolunteersNeeded.aspx</link>
      <pubDate>Sat, 27 May 2006 13:25:39 GMT</pubDate>
      <description>&lt;p&gt;
The schedule for our upcoming DC area / Mid-Atlantic Region code camp on 10 June in
Reston VA is up:
&lt;/p&gt;
&lt;p&gt;
&lt;a title=http://www.madcodecamp.com/schedule/codecampmain.htm href="http://www.madcodecamp.com/schedule/codecampmain.htm"&gt;&lt;font face=Arial&gt;http://www.madcodecamp.com/schedule/codecampmain.htm&lt;/font&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The event is being held at the Microsoft Technology Center at:
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Microsoft
Technology Center&lt;br&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;
&lt;st1:Street w:st="on"&gt;
&lt;st1:address w:st="on"&gt;12012 Sunset Hills Rd&lt;br&gt;
&lt;/st1:address&gt;
&lt;/st1:Street&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;st1:place w:st="on"&gt;
&lt;st1:City w:st="on"&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Reston&lt;/span&gt;&lt;/font&gt;
&lt;/st1:City&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;, 
&lt;st1:State w:st="on"&gt;VA&lt;/st1:State&gt;
&lt;st1:PostalCode w:st="on"&gt;20190&lt;/st1:PostalCode&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/st1:place&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;You can
find directions at:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;a title=http://www.microsoft.com/mscorp/info/usaoffices/midatlantic/mtc_reston.mspx href="http://www.microsoft.com/mscorp/info/usaoffices/midatlantic/mtc_reston.mspx"&gt;http://www.microsoft.com/mscorp/info/usaoffices/midatlantic/mtc_reston.mspx&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;We are currently filled up on registration, but are taking waitlist people to fill in for no-shows. &lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;If you are planning on attending and would be willing to volunteer to help out, please send me a note at brian.noyes(AT)idesign.net. (Change the (AT) to @)&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;We need volunteers for:&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;Registration - Help check people in off the registration lists.&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;Room monitors: All this means is you sit in on a session and make sure that if the speaker needs any help, you can help go and find someone so the speaker doesn't leave the room. You will also prompt the speaker when there is 15 minutes remaining and at completion time so that we can stay on schedule.&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;Food/drink - Just need a couple of folks to hang out in the food area for the morning break and at lunch to help out if anything is needed.&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=defe9d7b-97a6-4afc-8c3c-f51b537b5a21" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,defe9d7b-97a6-4afc-8c3c-f51b537b5a21.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=652b2d44-012e-42f4-bba8-4ad40ed63f68</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=652b2d44-012e-42f4-bba8-4ad40ed63f68</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was working with Paul Sheriff of PDSA this week to ClickOnce deploy a reporting
tool we use for the <a href="http://msdn.microsoft.com/isv/rd/">Regional Directors
program</a>. We ran into a problem where we got the following error when we tried
to publish:
</p>
        <p>
          <img alt="CAPICOM Error" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/CAPICOMError.gif" align="baseline" border="0" />
        </p>
        <p>
The resolution was to obtain the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&amp;DisplayLang=en">correct
version of the CAPICOM.dll</a>, drop it into the \SDK\bin directory where the SignTool.exe
lives (C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin with a default VS install),
and then register the library with Regsvr32.exe). Since it is a COM library for the
CryptoAPI, it can actually live anywhere on your machine once it is registered.
</p>
        <p>
Not sure how this was not there on the machine in question, it normally gets installed
and registered when you install VS according to the ClickOnce product team folks.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=652b2d44-012e-42f4-bba8-4ad40ed63f68" />
      </body>
      <title>CAPICOM Build Error on ClickOnce Publishing</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/05/26/CAPICOMBuildErrorOnClickOncePublishing.aspx</link>
      <pubDate>Fri, 26 May 2006 14:53:46 GMT</pubDate>
      <description>&lt;p&gt;
I was working with Paul Sheriff of PDSA this week to ClickOnce deploy a reporting
tool we use for the &lt;a href="http://msdn.microsoft.com/isv/rd/"&gt;Regional Directors
program&lt;/a&gt;. We ran into a problem where we got the following error when we tried
to publish:
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="CAPICOM Error" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/CAPICOMError.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
The resolution was to obtain the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&amp;amp;DisplayLang=en"&gt;correct
version of the CAPICOM.dll&lt;/a&gt;, drop it into the \SDK\bin directory where the SignTool.exe
lives (C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin with a default VS install),
and then register the library with Regsvr32.exe). Since it is a COM library for the
CryptoAPI, it can actually live anywhere on your machine once it is registered.
&lt;/p&gt;
&lt;p&gt;
Not sure how this was not there on the machine in question, it normally gets installed
and registered when you install VS according to the ClickOnce product team folks.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=652b2d44-012e-42f4-bba8-4ad40ed63f68" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=1cc44b29-d3fd-40b7-b571-9b54f2fb5408</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,1cc44b29-d3fd-40b7-b571-9b54f2fb5408.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,1cc44b29-d3fd-40b7-b571-9b54f2fb5408.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=1cc44b29-d3fd-40b7-b571-9b54f2fb5408</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you haven't stumbled on the top link on the MSDN homepage in the last 24 hours...
WinFX Beta 2 is out. Finally some fresh bits that are synced up between WCF, WPF,
and WF.
</p>
        <p>
There is also a Go-Live license associated with all the bits, so you can get the jump
on the competition by putting apps into production right away with WinFX capabilities.
If you haven't started looking at WinFX capabilities yet, now is definitely the time.
One good way to do so is to attend our WCF Master Class. You can find more details
at <a href="http://www.idesign.net/">http://www.idesign.net/</a>.
</p>
        <p>
You can get all the download bits for WinFX Beta 2 here: <a href="http://msdn.microsoft.com/windowsvista/downloads/products/getthebeta/">http://msdn.microsoft.com/windowsvista/downloads/products/getthebeta/</a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=1cc44b29-d3fd-40b7-b571-9b54f2fb5408" />
      </body>
      <title>I love the smell of fresh hot bits in the morning...</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,1cc44b29-d3fd-40b7-b571-9b54f2fb5408.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/05/24/ILoveTheSmellOfFreshHotBitsInTheMorning.aspx</link>
      <pubDate>Wed, 24 May 2006 12:42:01 GMT</pubDate>
      <description>&lt;p&gt;
If you haven't stumbled on the top link on the MSDN homepage in the last 24 hours...
WinFX Beta 2 is out. Finally some fresh bits that are synced up between WCF, WPF,
and WF.
&lt;/p&gt;
&lt;p&gt;
There is also a Go-Live license associated with all the bits, so you can get the jump
on the competition by putting apps into production right away with WinFX capabilities.
If you haven't started looking at WinFX capabilities yet, now is definitely the time.
One good way to do so is to attend our WCF Master Class. You can find more details
at &lt;a href="http://www.idesign.net/"&gt;http://www.idesign.net/&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
You can get all the download bits for WinFX Beta 2 here: &lt;a href="http://msdn.microsoft.com/windowsvista/downloads/products/getthebeta/"&gt;http://msdn.microsoft.com/windowsvista/downloads/products/getthebeta/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=1cc44b29-d3fd-40b7-b571-9b54f2fb5408" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,1cc44b29-d3fd-40b7-b571-9b54f2fb5408.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=bd37cddc-3574-49fc-b226-a7df516ecb43</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=bd37cddc-3574-49fc-b226-a7df516ecb43</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A common question with respect to ClickOnce is how to take an application that you
have published and tested on your local machine or a local development server and
move that application into production. The steps involved are not particularly complex,
but do involve using some other tools to get it done and are not easy to figure out
on your own unless you have a solid understanding of ClickOnce manifests, signing,
and how they relate to the launch mechanisms of ClickOnce.
</p>
        <p>
A key pre-requisite for doing this is that the administrator who will be placing the
application on the target machine will need to have the publisher certificate that
will be used to sign the production application available. Usually in large organizations
the developers will not have access to the company's real certificate to do their
development anyway, it will be up to the IT Administrator to get that certificate
and do the final signing of the applications anyway.
</p>
        <p>
          <strong>Step 1: Move your application files to the target machine.<br /></strong>Assuming you have published your application with Visual Studio to your local
machine or another test server in your development environment, the application files
are contained in the virtual directory or folder that you specified as the Publish
Location within Visual Studio. The deployment manifest, Bootstrapper setup.exe, publish.htm
deployment page, and version specific deployment manifests are located in the root
folder. For each version you published to that location, there is a subfolder that
contains the application manifest and application files for that version. You might
do this by zipping up the appropriate files and folders and just giving the zip file
to the administrator who will put it into production.
</p>
        <p>
To move the current version into production, you will need to copy the deployment
manifest, setup.exe, version-specific manifest and sub-folder for the version you
want to publish to the target machine deployment folder. You only need to include
the publish.htm file if you intend to use that test page directly to expose the application
to end users. But if you are going to put a link to the deployment manifest in some
other page or send a link via email, you don't need to include the publish.htm page.
</p>
        <p>
          <strong>Step 2 (Optional): Make needed changes to application files<br /></strong>If you need to change something in the application files, such as changing
a setting in the application configuration file or updating some graphics files, you
will need to update the application manifest after modifying the application files
themselves. So make the modifications needed in your application files.
</p>
        <p>
          <strong>Step 3: (Only needed if you did step 2): Update the application manifest file
list<br /></strong>If you made any changes to any application files, you will need to refresh
the list of files contained in the application manifest. This is because the manifest
contains the hash for each file that provides a unique representation of the contents
of the file. If you changed the application file, the hash for that file that is in
the application manifest is no longer valid and needs to be updated.
</p>
        <p>
- Open the application manifest (.manifest file in the application files folder for
the version you are publishing) with mageui.exe. 
<br />
- Select the Files category in the list on the left side of the window.<br />
- Enter the path to the application files folder for the deployment on the right side. 
<br />
- You can press the ellipses (...) button to browse to the folder. 
</p>
        <p>
          <img alt="Mage Files Pane" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/mageui-files.gif" align="baseline" border="0" />
        </p>
        <p>
This step does not have to be done on the target machine because only relative paths
are stored in the manifest from the location of the manifest, but the manifest and
the application files need to be located with the same relative folder path as they
will be on the target machine (usually the same directory). 
<br />
- After you have entered the path to the folder, press the Populate button. 
<br />
-You will be prompted with a warning dialog about the fact that the files will be
renamed with a .deploy extension. 
<br />
- Click Yes in this dialog.
</p>
        <p>
          <img alt="Renaming Files Warning" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/renamefileswarning.gif" align="baseline" border="0" />
        </p>
        <p>
          <strong>Step 4: Sign the application manifest<br /></strong>If you make any changes to the application files and update the application
manifest as described in step 3, or if you just need to re-sign the application manifest
with a production certificate that is different than the one that was used in development,
then you will need to sign the manifest with Mage. To do so:<br />
- Open the .manifest file with mageui.exe if not already open from step 3. 
<br />
- Press the Save button in the toolbar, and you will be presented with the signing
dialog shown below.
</p>
        <p>
          <img alt="Signing Dialog" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/signingdialog.gif" align="baseline" border="0" />
        </p>
        <p>
- Provide the path to the certificate file and the certificate password at the top
of the dialog, or select the certificate from your personal certificate store at the
bottom of the dialog. 
<br />
- Click OK to sign the manifest with the selected certificate.
</p>
        <p>
          <strong>Step 5: Update the application manifest reference in the deployment manifest<br /></strong>If you performed step 4 and signed with a different certificate than the
one used to 
<br />
originally generate the deployment manifest, you now need to update the application
reference in the deployment manifest. The application reference is a strong reference
to the application manifest from the deployment manifest, including path information
as well as the public key token from the digital signature in the application manifest.
That signature is generated using the publisher certificate, so if you change the
certificate, you have to update the application reference. 
</p>
        <p>
To update the application reference, do the following:<br />
- Open the deployment manifest (.application file) in mageui.exe<br />
- Select Application Reference from the list of categories on the left of the window<br />
- Press the Select Manifest... button and navigate to the application manifest (.manifest
file) for the version that you are deploying.
</p>
        <p>
          <img alt="Application Reference UI" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/appref.gif" align="baseline" border="0" />
        </p>
        <p>
          <strong>Step 6: Update the Deployment Provider 
<br /></strong>If you are moving the application to a different server than the one where
you first published the application from Visual Studio, you will need to update the
deployment provider URL that is embedded in the deployment manifest. To do so, perform
the following steps:<br />
- Open the deployment manifest in mageui.exe if it is not already opened from step
5.<br />
- Select Deployment Options from the list of categories on the left side of the window.<br />
- Change the URL labeled Start Location to reflect the URL users will use to launch
the application from the client machine. This setting is saved as the deployment provider
in the deployment manifest.
</p>
        <p>
          <img alt="Deployment Provider" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/depoptions.gif" align="baseline" border="0" />
        </p>
        <p>
          <strong>Step 7: Sign the deployment manifest<br /></strong>- Click the Save button in the toolbar.<br />
- Enter the path and password for the publisher certificate file at the top of the
signing dialog, or select the certificate from the list of certificates at the bottom.
This should be the same certificate used to sign the application manifest.<br />
- Click OK to re-sign the manifest.
</p>
        <p>
At this point, your application should be ready to go from the client.<br /></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=bd37cddc-3574-49fc-b226-a7df516ecb43" />
      </body>
      <title>Manually Putting a ClickOnce Application into Production</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/05/20/ManuallyPuttingAClickOnceApplicationIntoProduction.aspx</link>
      <pubDate>Sat, 20 May 2006 13:43:05 GMT</pubDate>
      <description>&lt;p&gt;
A common question with respect to ClickOnce is how to take an application that you
have published and tested on your local machine or a local development server and
move that application into production. The steps involved are not particularly complex,
but do involve using some other tools to get it done and are not easy to figure out
on your own unless you have a solid understanding of ClickOnce manifests, signing,
and how they relate to the launch mechanisms of ClickOnce.
&lt;/p&gt;
&lt;p&gt;
A key pre-requisite for doing this is that the administrator who will be placing the
application on the target machine will need to have the publisher certificate that
will be used to sign the production application available. Usually in large organizations
the developers will not have access to the company's real certificate to do their
development anyway, it will be up to the IT Administrator to get that certificate
and do the final signing of the applications anyway.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 1: Move your application files to the target machine.&lt;br&gt;
&lt;/strong&gt;Assuming you have published your application with Visual Studio to your local
machine or another test server in your development environment, the application files
are contained in the virtual directory or folder that you specified as the Publish
Location within Visual Studio. The deployment manifest, Bootstrapper setup.exe, publish.htm
deployment page, and version specific deployment manifests are located in the root
folder. For each version you published to that location, there is a subfolder that
contains the application manifest and application files for that version. You might
do this by zipping up the appropriate files and folders and just giving the zip file
to the administrator who will put it into production.
&lt;/p&gt;
&lt;p&gt;
To move the current version into production, you will need to copy the deployment
manifest, setup.exe, version-specific manifest and sub-folder for the version you
want to publish to the target machine deployment folder. You only need to include
the publish.htm file if you intend to use that test page directly to expose the application
to end users. But if you are going to put a link to the deployment manifest in some
other page or send a link via email, you don't need to include the publish.htm page.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 2 (Optional): Make needed changes to application files&lt;br&gt;
&lt;/strong&gt;If you need to change something in the application files, such as changing
a setting in the application configuration file or updating some graphics files, you
will need to update the application manifest after modifying the application files
themselves. So make the modifications needed in your application files.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 3: (Only needed if you did step 2): Update the application manifest file
list&lt;br&gt;
&lt;/strong&gt;If you made any changes to any application files, you will need to refresh
the list of files contained in the application manifest. This is because the manifest
contains the hash for each file that provides a unique representation of the contents
of the file. If you changed the application file, the hash for that file that is in
the application manifest is no longer valid and needs to be updated.
&lt;/p&gt;
&lt;p&gt;
- Open the application manifest (.manifest file in the application files folder for
the version you are publishing) with mageui.exe. 
&lt;br&gt;
- Select the Files category in the list on the left side of the window.&lt;br&gt;
- Enter the path to the application files folder for the deployment on the right side. 
&lt;br&gt;
- You can press the ellipses (...) button to browse to the folder. 
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Mage Files Pane" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/mageui-files.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
This step does not have to be done on the target machine because only relative paths
are stored in the manifest from the location of the manifest, but the manifest and
the application files need to be located with the same relative folder path as they
will be on the target machine (usually the same directory). 
&lt;br&gt;
- After you have entered the path to the folder, press the Populate button. 
&lt;br&gt;
-You will be prompted with a warning dialog about the fact that the files will be
renamed with a .deploy extension. 
&lt;br&gt;
- Click Yes in this dialog.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Renaming Files Warning" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/renamefileswarning.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 4: Sign the application manifest&lt;br&gt;
&lt;/strong&gt;If you make any changes to the application files and update the application
manifest as described in step 3, or if you just need to re-sign the application manifest
with a production certificate that is different than the one that was used in development,
then you will need to sign the manifest with Mage. To do so:&lt;br&gt;
- Open the .manifest file with mageui.exe if not already open from step 3. 
&lt;br&gt;
- Press the Save button in the toolbar, and you will be presented with the signing
dialog shown below.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Signing Dialog" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/signingdialog.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
- Provide the path to the certificate file and the certificate password at the top
of the dialog, or select the certificate from your personal certificate store at the
bottom of the dialog. 
&lt;br&gt;
- Click OK to sign the manifest with the selected certificate.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 5: Update the application manifest reference in the deployment manifest&lt;br&gt;
&lt;/strong&gt;If you performed step 4 and signed with a different certificate than the
one used to 
&lt;br&gt;
originally generate the deployment manifest, you now need to update the application
reference in the deployment manifest. The application reference is a strong reference
to the application manifest from the deployment manifest, including path information
as well as the public key token from the digital signature in the application manifest.
That signature is generated using the publisher certificate, so if you change the
certificate, you have to update the application reference. 
&lt;/p&gt;
&lt;p&gt;
To update the application reference, do the following:&lt;br&gt;
- Open the deployment manifest (.application file) in mageui.exe&lt;br&gt;
- Select Application Reference from the list of categories on the left of the window&lt;br&gt;
- Press the Select Manifest... button and navigate to the application manifest (.manifest
file) for the version that you are deploying.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Application Reference UI" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/appref.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 6: Update the Deployment Provider 
&lt;br&gt;
&lt;/strong&gt;If you are moving the application to a different server than the one where
you first published the application from Visual Studio, you will need to update the
deployment provider URL that is embedded in the deployment manifest. To do so, perform
the following steps:&lt;br&gt;
- Open the deployment manifest in mageui.exe if it is not already opened from step
5.&lt;br&gt;
- Select Deployment Options from the list of categories on the left side of the window.&lt;br&gt;
- Change the URL labeled Start Location to reflect the URL users will use to launch
the application from the client machine. This setting is saved as the deployment provider
in the deployment manifest.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Deployment Provider" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/depoptions.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 7: Sign the deployment manifest&lt;br&gt;
&lt;/strong&gt;- Click the Save button in the toolbar.&lt;br&gt;
- Enter the path and password for the publisher certificate file at the top of the
signing dialog, or select the certificate from the list of certificates at the bottom.
This should be the same certificate used to sign the application manifest.&lt;br&gt;
- Click OK to re-sign the manifest.
&lt;/p&gt;
&lt;p&gt;
At this point, your application should be ready to go from the client.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=bd37cddc-3574-49fc-b226-a7df516ecb43" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=3210b58c-0bec-42cf-ac73-7cc6e5c8a229</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=3210b58c-0bec-42cf-ac73-7cc6e5c8a229</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave four talks at the Software Developers Conference in Netherlands this week.
This is a very fun and interesting conference that is put on by a large user group
organization called Software Developers Network, run by Remi Caron and Joop Pecht.
</p>
        <p>
This conference is one of the most enjoyable conferences I get to do anywhere in the
world. It is amazing how professional and well run this conference is, especially
when you consider that it is being put on by a user group organization and it is better
run than many U.S. conferences put on by companies that are supposed to specialize
in this kind of event. All of the user group members that run the conference are volunteers,
and yet the quality and professionalism that comes out of that is outstanding.
</p>
        <p>
The attendees are hard core, ask great questions, and make the event fun for the speakers
as well. For those of you who attended and find your way to this post for the slides
and demos - thanks! 
</p>
        <p>
You can grab the slides and demos here:
</p>
        <p>
Build Smart Client Data Apps with Windows Forms 2.0:  <a href="http://www.softinsight.com/downloads/Conferences/SDC06/BuildSmartClientDataApplicationswithWindowsForms2.0.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/SDC06/SmartClientDataAppsDemos.zip">Demos</a><br />
Build Custom Data Bound Objects and Collections:  <a href="http://www.softinsight.com/downloads/Conferences/SDC06/BuildCustomDataBoundBusinessObjectsandCollections.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/SDC06/CustomBoundObjectsDemos.zip">Demos</a><br />
Present Rich Tabular Data with the DataGridView Control:  <a href="http://www.softinsight.com/downloads/Conferences/SDC06/PresentRichDataInterfaceswiththeDataGridViewControl.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/SDC06/DataGRidViewDemos.zip">Demos</a><br />
Drive Application Behavior with Application and User Settings:  <a href="http://www.softinsight.com/downloads/Conferences/SDC06/DriveApplicationBehaviorwithApplicationandUserConfigurationSettings.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/SDC06/ApplicationAndUserSettingsDemos.zip">Demos</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=3210b58c-0bec-42cf-ac73-7cc6e5c8a229" />
      </body>
      <title>Slides and Demos from SDC Netherlands</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/05/20/SlidesAndDemosFromSDCNetherlands.aspx</link>
      <pubDate>Sat, 20 May 2006 13:35:03 GMT</pubDate>
      <description>&lt;p&gt;
I gave four talks at the Software Developers Conference in Netherlands this week.
This is a very fun and interesting conference that is put on by a large user group
organization called Software Developers Network, run by Remi Caron and Joop Pecht.
&lt;/p&gt;
&lt;p&gt;
This conference is one of the most enjoyable conferences I get to do anywhere in the
world. It is amazing how professional and well run this conference is, especially
when you consider that it is being put on by a user group organization and it is better
run than many U.S. conferences put on by companies that are supposed to specialize
in this kind of event. All of the user group members that run the conference are volunteers,
and yet the quality and professionalism that comes out of that is outstanding.
&lt;/p&gt;
&lt;p&gt;
The attendees are hard core, ask great questions, and make the event fun for the speakers
as well. For those of you who attended and find your way to this post for the slides
and demos - thanks! 
&lt;/p&gt;
&lt;p&gt;
You can grab the slides and demos here:
&lt;/p&gt;
&lt;p&gt;
Build Smart Client Data Apps with Windows Forms 2.0:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/BuildSmartClientDataApplicationswithWindowsForms2.0.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/SmartClientDataAppsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Build Custom Data Bound Objects and Collections:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/BuildCustomDataBoundBusinessObjectsandCollections.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/CustomBoundObjectsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Present Rich Tabular Data with the DataGridView Control:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/PresentRichDataInterfaceswiththeDataGridViewControl.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/DataGRidViewDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Drive Application Behavior with Application and User Settings:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/DriveApplicationBehaviorwithApplicationandUserConfigurationSettings.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/ApplicationAndUserSettingsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=3210b58c-0bec-42cf-ac73-7cc6e5c8a229" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=805946c3-ae07-49e2-8ae9-e85ac67ecfb5</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=805946c3-ae07-49e2-8ae9-e85ac67ecfb5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I spoke at DevTeach  in Montreal Tue-Thu of this week and had a great time as
always. If you haven't checked out this conference, you should plan on signing up
next year. Great location, great speakers, very well done conference with lots of
hard core sessions.
</p>
        <p>
If you attended one of my sessions and want to get the slides and demos, here you
go:
</p>
        <p>
NET371 - Drive App Behavior with Application and User Settings:  <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET371_AppAndUserSettings.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET371_AppAndUserSettingsDemos.zip">Demos</a></p>
        <p>
NET391 - Custom Bound Objects and Collections:  <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET391_CustomBoundObjects.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET391_CustomBoundObjectsDemos.zip">Demos</a></p>
        <p>
NET463 - Advanced ClickOnce:  <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET463_AdvancedClickOnce.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET463_AdvancedClickOnceDemos.zip">Demos</a></p>
        <p>
MusicLibrary Database Creation Script:   <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/MusicLibrary.sql">Script</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=805946c3-ae07-49e2-8ae9-e85ac67ecfb5" />
      </body>
      <title>DevTeach Slides and Demos</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/05/13/DevTeachSlidesAndDemos.aspx</link>
      <pubDate>Sat, 13 May 2006 17:09:02 GMT</pubDate>
      <description>&lt;p&gt;
I spoke at DevTeach&amp;nbsp; in Montreal Tue-Thu of this week and had a great time as
always. If you haven't checked out this conference, you should plan on signing up
next year. Great location, great speakers, very well done conference with lots of
hard core sessions.
&lt;/p&gt;
&lt;p&gt;
If you attended one of my sessions and want to get the slides and demos, here you
go:
&lt;/p&gt;
&lt;p&gt;
NET371 - Drive App Behavior with Application and User Settings:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET371_AppAndUserSettings.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET371_AppAndUserSettingsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
NET391 - Custom Bound Objects and Collections:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET391_CustomBoundObjects.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET391_CustomBoundObjectsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
NET463 - Advanced ClickOnce:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET463_AdvancedClickOnce.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET463_AdvancedClickOnceDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
MusicLibrary Database Creation Script:&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/MusicLibrary.sql"&gt;Script&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=805946c3-ae07-49e2-8ae9-e85ac67ecfb5" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=1940053e-6292-4b56-82ef-c2f45f1455c2</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,1940053e-6292-4b56-82ef-c2f45f1455c2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,1940053e-6292-4b56-82ef-c2f45f1455c2.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=1940053e-6292-4b56-82ef-c2f45f1455c2</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I taught a public Advanced .NET Master Class in Reston VA last week. Had a great
time, great bunch of students. One of the things that makes teaching the most fun
is answering questions, and this was a lively group with the questions. Thanks to
all of the students who attended.
</p>
        <p>
A lot of the demos that I give during class are part of the downloads available on
our site at <a href="http://www.idesign.net">http://www.idesign.net</a>. If you want
the live demos that I did on the fly, you can download them here:
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/Classes/LiveClassDemos_DCAdvMasterClass_May2006.zip">Live
Demos</a>
        </p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=1940053e-6292-4b56-82ef-c2f45f1455c2" />
      </body>
      <title>DC Advanced Master Class</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,1940053e-6292-4b56-82ef-c2f45f1455c2.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/05/08/DCAdvancedMasterClass.aspx</link>
      <pubDate>Mon, 08 May 2006 13:43:41 GMT</pubDate>
      <description>&lt;p&gt;
I taught a public&amp;nbsp;Advanced .NET Master Class in Reston VA last week. Had a great
time, great bunch of students. One of the things that makes teaching the most fun
is answering questions, and this was a lively group with the questions. Thanks to
all of the students who attended.
&lt;/p&gt;
&lt;p&gt;
A lot of the demos that I give during class are part of the downloads available on
our site at &lt;a href="http://www.idesign.net"&gt;http://www.idesign.net&lt;/a&gt;. If you want
the live demos that I did on the fly, you can download them here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/Classes/LiveClassDemos_DCAdvMasterClass_May2006.zip"&gt;Live
Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=1940053e-6292-4b56-82ef-c2f45f1455c2" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,1940053e-6292-4b56-82ef-c2f45f1455c2.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=3b09b2e1-dab1-4e9d-9c73-4d2bc1567c2f</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,3b09b2e1-dab1-4e9d-9c73-4d2bc1567c2f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,3b09b2e1-dab1-4e9d-9c73-4d2bc1567c2f.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=3b09b2e1-dab1-4e9d-9c73-4d2bc1567c2f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We will be running a Code Camp at the Microsoft Reston training center on 10 June
all day. This is a great FREE event with great speakers teaching you hard core topics
on .NET coding. We are looking for speakers, so if you are interested in sharing your
knowledge with the local community, you can find the <a href="http://blogs.msdn.com/gduthie/archive/2006/04/19/579440.aspx">call
for speakers here as well as registration information </a>if you just want to attend
and soak up knowledge. 
</p>
        <p>
Come on out and participate in the DC area developer community!
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=3b09b2e1-dab1-4e9d-9c73-4d2bc1567c2f" />
      </body>
      <title>Mid-Atlantic Code Camp time again! - 10 June</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,3b09b2e1-dab1-4e9d-9c73-4d2bc1567c2f.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/04/25/MidAtlanticCodeCampTimeAgain10June.aspx</link>
      <pubDate>Tue, 25 Apr 2006 09:01:56 GMT</pubDate>
      <description>&lt;p&gt;
We will be running a Code Camp at the Microsoft Reston training center on 10 June
all day. This is a great FREE event with great speakers teaching you hard core topics
on .NET coding. We are looking for speakers, so if you are interested in sharing your
knowledge with the local community, you can find the &lt;a href="http://blogs.msdn.com/gduthie/archive/2006/04/19/579440.aspx"&gt;call
for speakers here as well as registration information &lt;/a&gt;if you just want to attend
and soak up knowledge. 
&lt;/p&gt;
&lt;p&gt;
Come on out and participate in the DC area developer community!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=3b09b2e1-dab1-4e9d-9c73-4d2bc1567c2f" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,3b09b2e1-dab1-4e9d-9c73-4d2bc1567c2f.aspx</comments>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=ae4fea41-e752-4016-a2bc-7ee79e0f9a01</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=ae4fea41-e752-4016-a2bc-7ee79e0f9a01</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
People always ask me "How can you write a whole book on ClickOnce?" because they envision
the standard 5 minute demo of what ClickOnce is and does and think that is all there
is to it. The fact is there is just a plethora of variations, hidden behaviors, specialized
scenarios, and things people want to do with ClickOnce that are far more than 5 minute
answers. The book keeps growing the more I get into it.
</p>
        <p>
One of these things that snuck up and bit me recently (unfortunately in a live demo
at VS Connections) due to a gap in my knowledge was the way partial trust apps run
on the client machine.
</p>
        <p>
First some background on ClickOnce and application files. Any file you add to your
project and set the file Build Action property to Content will be added to the Application
Files (under the Publish tab in project properties) with a Publish Status of Include,
depending on the file type. MDF files (SQL Express), mdb, and XML files will get marked
as Data Files instead of Include. Include means the file will be deployed to the application
client cache folder under the user profile (C:\Documents and Settings\&lt;username&gt;\Local
Settings\Apps\&lt;obfuscated goo&gt;\), and Data File means it will be deployed to
a separate data folder associated with that app, also buried in the obfuscated goo
under the user profile. The data files are treated differently for updates (beyond
the scope of this post) and the folder is accessible through the ApplicationDeployment.DataDirectory
property.
</p>
        <p>
If you deploy an app with ClickOnce, and the app manifest requests Full Trust, then
when the app runs it simply gets launched by the runtime directly - the app executable
is the executable process that runs. It runs from the deployed client cache directory.
As a result, with a full trust app, you can access files that you deploy with your
app, marked with a Publish Status of Include, with a relative path such as ".\MyImage.jpg".
The current working directory when your executable starts is the folder it was launched
from, and so everything works out.
</p>
        <p>
Then you decide that you want to be more security concious, and switch your ClickOnce
security settings to only require partial trust (lets say LocalIntranet zone). Suddenly
your app stops working complaining that it can't find the file.
</p>
        <p>
So what's going on there??
</p>
        <p>
The problem is that the executable process is actually different when you run a ClickOnce
app under partial trust. When you configure a ClickOnce deployed app to request less
than full trust, the process that actually launches is AppLaunch.exe. This process
loads your executable assembly into an AppDomain which it has cranked down the CAS
security on to your requested permissions, and your app runs from that appdomain under
partial trust. This is similar to what Visual Studio 2005 does to enable partial trust
debugging with the &lt;appname&gt;.vshost.exe that is the debug process by default.
</p>
        <p>
So how does that screw up your paths? AppLaunch.exe is running from the .NET directory
under C:\WINDOWS\Microsoft.Net\Framework\v2.0.50727\, and so the current working directory
for your app loaded into that host process is that folder. Naturally your application
files have not been deployed there, so your relative paths for locating the files
fail.
</p>
        <p>
OK, so next thought is "there's gotta be an API that I can call to say 'give me my
app's deployed directory'". Unfortunately, that thought would be incorrect.
</p>
        <p>
So what's the solution? Simple - don't ever deploy a file to the application directory
(Publish Status = Include) that you need to access explicitly through a path (i.e.
to load that file as a bitmap, xml file, etc.). If you need to do that, you should
mark it as a Data File, and access it by adding the file name to the ApplicationDeployment.DataDirectory
path. You can also use Application.UserAppDataPath property, results in the same thing
when you are ClickOnce deployed.
</p>
        <p>
Just wish I had known that before doing that demo on the fly in a way I had not done
it before in front of a live audience... :)
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ae4fea41-e752-4016-a2bc-7ee79e0f9a01" />
      </body>
      <title>Process Identity and Working Directory for Partial Trust ClickOnce Apps</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/04/15/ProcessIdentityAndWorkingDirectoryForPartialTrustClickOnceApps.aspx</link>
      <pubDate>Sat, 15 Apr 2006 01:26:01 GMT</pubDate>
      <description>&lt;p&gt;
People always ask me "How can you write a whole book on ClickOnce?" because they envision
the standard 5 minute demo of what ClickOnce is and does and think that is all there
is to it. The fact is there is just a plethora of variations, hidden behaviors, specialized
scenarios, and things people want to do with ClickOnce that are far more than 5 minute
answers. The book keeps growing the more I get into it.
&lt;/p&gt;
&lt;p&gt;
One of these things that snuck up and bit me recently (unfortunately in a live demo
at VS Connections) due to a gap in my knowledge was the way partial trust apps run
on the client machine.
&lt;/p&gt;
&lt;p&gt;
First some background on ClickOnce and application files. Any file you add to your
project and set the file Build Action property to Content will be added to the Application
Files (under the Publish tab in project properties) with a Publish Status of Include,
depending on the file type. MDF files (SQL Express), mdb, and XML files will get marked
as Data Files instead of Include. Include means the file will be deployed to the application
client cache folder under the user profile (C:\Documents and Settings\&amp;lt;username&amp;gt;\Local
Settings\Apps\&amp;lt;obfuscated goo&amp;gt;\), and Data File means it will be deployed to
a separate data folder associated with that app, also buried in the obfuscated goo
under the user profile. The data files are treated differently for updates (beyond
the scope of this post) and the folder is accessible through the ApplicationDeployment.DataDirectory
property.
&lt;/p&gt;
&lt;p&gt;
If you deploy an app with ClickOnce, and the app manifest requests Full Trust, then
when the app runs it simply gets launched by the runtime directly - the app executable
is the executable process that runs. It runs from the deployed client cache directory.
As a result, with a full trust app, you can access files that you deploy with your
app, marked with a Publish Status of Include, with a relative path such as ".\MyImage.jpg".
The current working directory when your executable starts is the folder it was launched
from, and so everything works out.
&lt;/p&gt;
&lt;p&gt;
Then you decide that you want to be more security concious, and switch your ClickOnce
security settings to only require partial trust (lets say LocalIntranet zone). Suddenly
your app stops working complaining that it can't find the file.
&lt;/p&gt;
&lt;p&gt;
So what's going on there??
&lt;/p&gt;
&lt;p&gt;
The problem is that the executable process is actually different when you run a ClickOnce
app under partial trust. When you configure a ClickOnce deployed app to request less
than full trust, the process that actually launches is AppLaunch.exe. This process
loads your executable assembly into an AppDomain which it has cranked down the CAS
security on to your requested permissions, and your app runs from that appdomain under
partial trust. This is similar to what Visual Studio 2005 does to enable partial trust
debugging with the &amp;lt;appname&amp;gt;.vshost.exe that is the debug process by default.
&lt;/p&gt;
&lt;p&gt;
So how does that screw up your paths? AppLaunch.exe is running from the .NET directory
under C:\WINDOWS\Microsoft.Net\Framework\v2.0.50727\, and so the current working directory
for your app loaded into that host process is that folder. Naturally your application
files have not been deployed there, so your relative paths for locating the files
fail.
&lt;/p&gt;
&lt;p&gt;
OK, so next thought is "there's gotta be an API that I can call to say 'give me my
app's deployed directory'". Unfortunately, that thought would be incorrect.
&lt;/p&gt;
&lt;p&gt;
So what's the solution? Simple - don't ever deploy a file to the application directory
(Publish Status = Include) that you need to access explicitly through a path (i.e.
to load that file as a bitmap, xml file, etc.). If you need to do that, you should
mark it as a Data File, and access it by adding the file name to the ApplicationDeployment.DataDirectory
path. You can also use Application.UserAppDataPath property, results in the same thing
when you are ClickOnce deployed.
&lt;/p&gt;
&lt;p&gt;
Just wish I had known that before doing that demo on the fly in a way I had not done
it before in front of a live audience... :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ae4fea41-e752-4016-a2bc-7ee79e0f9a01" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=f64c802d-ca2c-4514-bbac-a023eea45cd5</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,f64c802d-ca2c-4514-bbac-a023eea45cd5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,f64c802d-ca2c-4514-bbac-a023eea45cd5.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=f64c802d-ca2c-4514-bbac-a023eea45cd5</wfw:commentRss>
      <title>Great new WCF demos available on the IDesign web site</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,f64c802d-ca2c-4514-bbac-a023eea45cd5.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/04/11/GreatNewWCFDemosAvailableOnTheIDesignWebSite.aspx</link>
      <pubDate>Tue, 11 Apr 2006 14:29:14 GMT</pubDate>
      <description>&lt;p&gt;
If you are starting to get your hands dirty with Windows Communication Foundation
(WCF), you can get some great samples to help you get started from our website at &lt;a href="http://www.idesign.net/"&gt;http://www.idesign.net/&lt;/a&gt; on
the downloads tab.
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;a title=http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&amp;amp;tabid=11 href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&amp;amp;tabid=11"&gt;http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&amp;amp;tabid=11&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=f64c802d-ca2c-4514-bbac-a023eea45cd5" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,f64c802d-ca2c-4514-bbac-a023eea45cd5.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=9a313063-56d6-417b-bb27-8c23404a10fa</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=9a313063-56d6-417b-bb27-8c23404a10fa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I presented four sessions at DevConnections last week and have been a little remiss
on getting the slides and demos posted, but here they are:
</p>
        <p>
Secure ClickOnce Deployments:  <a href="http://www.softinsight.com/downloads/DevConnections/VSC302_SecureSmartClientClickOnceDeployments.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/DevConnections/VSC302-SecureClickOnceDemos.zip">Demos</a></p>
        <p>
Connecting Smart Clients with WCF: <a href="http://www.softinsight.com/downloads/DevConnections/VWF302_SmartClientConnectivitywithWCF.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/DevConnections/VFW302-ConnectingSmartClientsWCFDemos.zip">Demos</a></p>
        <p>
Drive Application Behavior with User and Application Settings:  <a href="http://www.softinsight.com/downloads/DevConnections/VAC301-DriveApplicationBehaviorwithApplicationandUserConfigurationSettings.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/DevConnections/VAC301-SettingsDemos.zip">Demos</a></p>
        <p>
Build a Data Access Layer with Enterprise Library Data Access Block:  <a href="http://www.softinsight.com/downloads/DevConnections/APP301-ImplementaDataAccessLayerwithEntLib.pdf">Slides</a>  <a href="http://www.softinsight.com/downloads/DevConnections/App301-DAABDemos.zip">Demos</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=9a313063-56d6-417b-bb27-8c23404a10fa" />
      </body>
      <title>Slides and Demos from DevConnections Last Week</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/04/11/SlidesAndDemosFromDevConnectionsLastWeek.aspx</link>
      <pubDate>Tue, 11 Apr 2006 14:26:41 GMT</pubDate>
      <description>&lt;p&gt;
I presented four sessions at DevConnections last week and have been a little remiss
on getting the slides and demos posted, but here they are:
&lt;/p&gt;
&lt;p&gt;
Secure ClickOnce Deployments:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VSC302_SecureSmartClientClickOnceDeployments.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VSC302-SecureClickOnceDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Connecting Smart Clients with WCF: &lt;a href="http://www.softinsight.com/downloads/DevConnections/VWF302_SmartClientConnectivitywithWCF.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VFW302-ConnectingSmartClientsWCFDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Drive Application Behavior with User and Application Settings:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VAC301-DriveApplicationBehaviorwithApplicationandUserConfigurationSettings.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VAC301-SettingsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Build a Data Access Layer with Enterprise Library Data Access Block:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/APP301-ImplementaDataAccessLayerwithEntLib.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/App301-DAABDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=9a313063-56d6-417b-bb27-8c23404a10fa" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=0f76192d-af13-4cdd-99d8-35fc4afd2965</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,0f76192d-af13-4cdd-99d8-35fc4afd2965.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,0f76192d-af13-4cdd-99d8-35fc4afd2965.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=0f76192d-af13-4cdd-99d8-35fc4afd2965</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you didn't happen to notice it in your Visual Studio Start page RSS feed, this
is very cool. They have put out a very comprehensive Code Snippets library for C#,
available here:
</p>
        <p>
          <a href="http://msdn.microsoft.com/vstudio/downloads/codesnippets/default.aspx">http://msdn.microsoft.com/vstudio/downloads/codesnippets/default.aspx</a>
        </p>
        <p>
When I teach our <a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=1&amp;tabid=2#Master">Master
Class or Advanced Master Class </a>at IDesign, I often get the question of why Visual
Basic has a ton of code snippets and why C# only has a couple dozen. I always feel
like I am apologizing for the C# team or it is tempting to make a joke at the VB guys's
expense and say they need them more, which I really don't believe but is usually got
for a laugh (or a few death threats from the VB guys). :) 
</p>
        <p>
The fact is we C# guys need them just as bad and should use Code Snippets and other
forms of Code Generation such as <a href="http://www.devexpress.com/Products/NET/CodeRush/">CodeRush</a> and <a href="http://www.codesmithtools.com/">CodeSmith</a> to
the max. Resources like <a href="http://www.gotcodesnippets.com">www.gotcodesnippets.com</a> help
a lot for not always needing to create one from scratch for every specialized situation
you find yourself repeating, <a href="http://msdn.microsoft.com/vstudio/downloads/codesnippets/default.aspx">but
this library </a>gets us even closer with somewhat "out of the box" capabilities.
</p>
        <p>
It includes all kinds of code snippets from collections, to data access to creating
data types, cryptography, security, and Windows Forms common needs. These can not
only help you avoid writing repetitive code over and over, they give you completed
code samples for a lot of situations where you may not have ever written that kind
of code before.
</p>
        <p>
Thanks to whoever created this at Microsoft!
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=0f76192d-af13-4cdd-99d8-35fc4afd2965" />
      </body>
      <title>C# Code Snippets Library</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,0f76192d-af13-4cdd-99d8-35fc4afd2965.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/03/24/CCodeSnippetsLibrary.aspx</link>
      <pubDate>Fri, 24 Mar 2006 14:29:40 GMT</pubDate>
      <description>&lt;p&gt;
If you didn't happen to notice it in your Visual Studio Start page RSS feed, this
is very cool. They have put out a very comprehensive Code Snippets library for C#,
available here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/vstudio/downloads/codesnippets/default.aspx"&gt;http://msdn.microsoft.com/vstudio/downloads/codesnippets/default.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
When I teach our &lt;a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=1&amp;amp;tabid=2#Master"&gt;Master
Class or Advanced Master Class &lt;/a&gt;at IDesign, I often get the question of why Visual
Basic has a ton of code snippets and why C# only has a couple dozen. I always feel
like I am apologizing for the C# team or it is tempting to make a joke at the VB guys's
expense and say they need them more, which I really don't believe but is usually got
for a laugh (or a few death threats from the VB guys). :) 
&lt;/p&gt;
&lt;p&gt;
The fact is we C# guys need them just as bad and should use Code Snippets and other
forms of Code Generation such as &lt;a href="http://www.devexpress.com/Products/NET/CodeRush/"&gt;CodeRush&lt;/a&gt; and &lt;a href="http://www.codesmithtools.com/"&gt;CodeSmith&lt;/a&gt; to
the max. Resources like &lt;a href="http://www.gotcodesnippets.com"&gt;www.gotcodesnippets.com&lt;/a&gt; help
a lot for not always needing to create one from scratch for every specialized situation
you find yourself repeating, &lt;a href="http://msdn.microsoft.com/vstudio/downloads/codesnippets/default.aspx"&gt;but
this library &lt;/a&gt;gets us even closer with somewhat "out of the box" capabilities.
&lt;/p&gt;
&lt;p&gt;
It includes all kinds of code snippets from collections, to data access to creating
data types, cryptography, security, and Windows Forms common needs. These can not
only help you avoid writing repetitive code over and over, they give you completed
code samples for a lot of situations where you may not have ever written that kind
of code before.
&lt;/p&gt;
&lt;p&gt;
Thanks to whoever created this at Microsoft!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=0f76192d-af13-4cdd-99d8-35fc4afd2965" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,0f76192d-af13-4cdd-99d8-35fc4afd2965.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=ec7ef166-caf7-481f-b32c-c1ad983225e8</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,ec7ef166-caf7-481f-b32c-c1ad983225e8.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,ec7ef166-caf7-481f-b32c-c1ad983225e8.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=ec7ef166-caf7-481f-b32c-c1ad983225e8</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a talk on Data Binding with Windows Forms 2.0 at the San Diego .NET Developers
Group on Tuesday 7 Mar. 
</p>
        <p>
Here are the slides and demos:  <a href="http://www.softinsight.com/downloads/INETA/DataBindingwithWindowsForms2.0_Feb06.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/INETA/DataBindingWithWindowsFormsDemos_Mar06.zip">Demos</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ec7ef166-caf7-481f-b32c-c1ad983225e8" />
      </body>
      <title>Data Binding Talk in San Diego - Slides and Demos</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,ec7ef166-caf7-481f-b32c-c1ad983225e8.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/03/13/DataBindingTalkInSanDiegoSlidesAndDemos.aspx</link>
      <pubDate>Mon, 13 Mar 2006 06:30:14 GMT</pubDate>
      <description>&lt;p&gt;
I gave a talk on Data Binding with Windows Forms 2.0 at the San Diego .NET Developers
Group on Tuesday 7 Mar. 
&lt;/p&gt;
&lt;p&gt;
Here are the slides and demos:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/DataBindingwithWindowsForms2.0_Feb06.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/DataBindingWithWindowsFormsDemos_Mar06.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ec7ef166-caf7-481f-b32c-c1ad983225e8" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,ec7ef166-caf7-481f-b32c-c1ad983225e8.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=64275c83-d7af-4a19-b4f7-593146ab415f</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,64275c83-d7af-4a19-b4f7-593146ab415f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,64275c83-d7af-4a19-b4f7-593146ab415f.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=64275c83-d7af-4a19-b4f7-593146ab415f</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <title>What to do when BindingNavigator Raises Exception on AddNew</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,64275c83-d7af-4a19-b4f7-593146ab415f.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/02/27/WhatToDoWhenBindingNavigatorRaisesExceptionOnAddNew.aspx</link>
      <pubDate>Mon, 27 Feb 2006 18:29:04 GMT</pubDate>
      <description>&lt;p&gt;
I got a great question from a reader recently. It's essence reads like this:
&lt;/p&gt;
&lt;p&gt;
If I set up drag and drop data binding to a table that has non-nullable columns, and
then press the Add New button twice in the BindingNavigator, I get an unhandled exception
on the thread. Since all of the code involved in that call chain is in .NET code and
assemblies, how can I handle the exception to keep it from blowing up my app?
&lt;/p&gt;
&lt;p&gt;
If you are not already familiar, to get to this point, you have to create a data bound
UI using the Data Sources window, or by hooking up the controls manually. What you
end up with after dragging a collection from the Data Sources window onto a form is:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
A DataGridView or Details form of individual controls&lt;/li&gt;
&lt;li&gt;
A BindingSource component that is set as the data source of the grid or the individual
controls&lt;/li&gt;
&lt;li&gt;
A BindingNavigator control that is hooked up to the BindingSource component.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If your data source is a typed data set in the same project, you also get a table
adapter instance and data set instance as members on the form, and a Form.Load event
handler that fills the appropriate table of the data set so that the app functions
without any hand written code. If your data source is coming from a different assembly
(an Object data source), then it will be up to you to go retrieve an instance of the
collection type and set it as the DataSource property on the BindingSource at runtime
to complete the data binding chain.
&lt;/p&gt;
&lt;p&gt;
The way the BindingNavigator gets hooked up, it just points to the BindingSource component
and uses the API exposed by a BindingSource to navigate forward and back and to add
and delete items from the underlying collection. When you press the Add New button
on the BindingNavigator, it calls the AddNew method on BindingSource. The BindingSource
passes the call to the underlying collection if it implements the IBindingList interface.
Calling AddNew usually also implicitly calls EndEdit on the current item if that item
type implements the IEditableObject interface, depending on the collection type's
implementation of the AddNew method.
&lt;/p&gt;
&lt;p&gt;
So when dealing with a data table as your collection, you are actually bound to its
default DataView. The DataView class implements the IBindingList interface, and the
DataRowView class (the items in the collection) implement IEditableObject. When a
column in the table is set up so that it does not accept null values, the DataRowView
implementation of EndEdit will throw and exception when EndEdit is called if the non-nullable
columns have not been provided a value.
&lt;/p&gt;
&lt;p&gt;
The call chain that sets all this up for a standard data set based application is
that the BindingNavigator calls into the BindingSource and calls AddNew. This calls
into the DataView and adds a new row to the table and starts an editing transaction
by calling BeginEdit on the row. When you press the AddNew button a second time, EndEdit
is called on the first row you added, which, if you haven't filled in the non-nullable
columns, will throw an exception. Since the call chain goes from BindingNavigator
to BindingSource to DataView to DataRowView, there is no user code in the call chain
where you can logically insert an exception handler.
&lt;/p&gt;
&lt;p&gt;
You could handle the situation in a crude form by having an Application.ThreadException
handler, which will catch all unhandled exceptions on the thread. However, this doesn't
get called until the stack has unraveled all the way back out to the base of the call
stack, so it is a little late to be dealing with the exception in a recoverable way.
&lt;/p&gt;
&lt;p&gt;
A better solution is to inherit from the BindingSource component and provide your
own implementation to AddNew. The following implementation (thanks to Steve Lasker
and Daniel Herling on the product team in Redmond for coming up with this) shows how:
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: teal"&gt;MyBindingSource&lt;/span&gt;&lt;font color=#000000&gt; : &lt;/font&gt;&lt;span style="COLOR: teal"&gt;BindingSource&lt;/span&gt;&lt;/span&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;font color=#000000&gt; MyBindingSource()&lt;/font&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: &lt;/font&gt;&lt;span style="COLOR: blue"&gt;base&lt;/span&gt;&lt;font color=#000000&gt;()&lt;/font&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;override&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;object&lt;/span&gt;&lt;font color=#000000&gt; AddNew()&lt;/font&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;object&lt;/span&gt;&lt;font color=#000000&gt; o
= &lt;/font&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;font color=#000000&gt;;&lt;/font&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;try&lt;/span&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
o = &lt;/font&gt;&lt;span style="COLOR: blue"&gt;base&lt;/span&gt;&lt;font color=#000000&gt;.AddNew();&lt;/font&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;catch&lt;/span&gt;&lt;font color=#000000&gt; (System.&lt;/font&gt;&lt;span style="COLOR: teal"&gt;Exception&lt;/span&gt;&lt;font color=#000000&gt; ex)&lt;/font&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;&lt;font color=#000000&gt;.OnDataError(&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;new&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: teal"&gt;BindingManagerDataErrorEventArgs&lt;/span&gt;&lt;font color=#000000&gt;(ex));&lt;/font&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&lt;font color=#000000&gt; o;&lt;/font&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color=#000000&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
With this in place, you can just handle the DataError event on the BindingSource component
to do whatever is appropriate based on the exception.
&lt;/p&gt;
&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=64275c83-d7af-4a19-b4f7-593146ab415f" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,64275c83-d7af-4a19-b4f7-593146ab415f.aspx</comments>
      <category>.NET</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=51b0482d-e598-426a-8047-948950af8b8e</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,51b0482d-e598-426a-8047-948950af8b8e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,51b0482d-e598-426a-8047-948950af8b8e.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=51b0482d-e598-426a-8047-948950af8b8e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a talk on Connecting Smart Clients at the Microsoft Integration and Connected
Systems User Group (MICSUG) last night. I discussed and demoed the basics of using
Windows Communication Foundation (WCF) to connect applications, using the newly released
Feb CTP.
</p>
        <p>
You can get the slides and demos here:  <a href="http://www.softinsight.com/downloads/INETA/ConnectSmartClientsWithWCF_Feb06.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/INETA/ConnectingSmartClientsWithWCFDemos_Feb06.zip">Demos</a></p>
        <p>
In jumping through the hoops yesterday to get my demos running on the Feb CTP, there
were a number of changes that I had to get used to compared to previous builds.
</p>
        <p>
The biggest is that if you run svcutil against a service that uses wsHttpBinding to
generate a proxy, you get a proxy service contract that uses custom message contracts
to wrap the parameters and return values from each operation contract. XXXRequest
and XXXResponse classes are defined in the proxy file for each operation, along with
an XXXBody class that actually contains the raw parameter/DataContract types. 
</p>
        <p>
If you program against the service contract interface like so:
</p>
        <p>
IAccountsManager mgrProxy = new AccountsManagerProxy();
</p>
        <p>
You will have to create the XXXRequest message contract types to wrap all the
parameters you pass into the methods, and unwrap any return values from the XXXResponse
types. However, they also expose a public method on the proxy class directly that
encapsulates these details so that you can deal directly with the underlying parameters
and return values. 
</p>
        <p>
So instead of calling IAccountsManager.GetAllAccounts for example, you will have an
easier time calling AccountsManagerProxy.GetAllAccounts.
</p>
        <p>
This is true for wsHttpBinding because of the message level security involved in the
default binding. If you use basicHttpBinding, or turn down the security on the wsHttpBinding,
then you will get more straightforward service contract interface definitions on the
client side proxy.
</p>
        <p>
The resulting proxy and service contract look like the following:
</p>
        <font size="4">
          <p>
          </p>
        </font>
        <font size="3">
          <font face="Courier New">[System.CodeDom.Compiler.GeneratedCodeAttribute(</font>
          <font face="Courier New">
            <font color="#800000">"System.ServiceModel"</font>, <font color="#800000">"3.0.0.0"</font></font>
          <font face="Courier New">)]</font>
        </font>
        <p>
          <font face="Courier New" size="3">[System.ServiceModel.ServiceContractAttribute()]</font>
        </p>
        <font color="#0000ff">
          <p>
            <font face="Courier New" size="3">public</font>
          </p>
        </font>
        <font size="3">
          <font face="Courier New">
            <font color="#000000">
            </font>
            <font color="#0000ff">interface</font>
          </font>
          <font face="Courier New" color="#000000"> IAccountsManager</font>
        </font>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font color="#008000">
            <font face="Courier New" size="3">// CODEGEN: Generating message
contract since message part accountNo requires protection.</font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">[System.ServiceModel.OperationContractAttribute(Action=</font>
            <font face="Courier New">
              <font color="#800000">"http://tempuri.org/IAccountsManager/CreateAccount"</font>,
ReplyAction=<font color="#800000">"http://tempuri.org/IAccountsManager/CreateAccountResponse"</font></font>
            <font face="Courier New">)]</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">CreateAccountResponse CreateAccount(CreateAccountRequest
request);</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font color="#008000">
            <font face="Courier New" size="3">// CODEGEN: Generating message
contract since message part GetAllAccountsResult requires protection.</font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">[System.ServiceModel.OperationContractAttribute(Action=</font>
            <font face="Courier New">
              <font color="#800000">"http://tempuri.org/IAccountsManager/GetAllAccounts"</font>,
ReplyAction=<font color="#800000">"http://tempuri.org/IAccountsManager/GetAllAccountsResponse"</font></font>
            <font face="Courier New">)]</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">GetAllAccountsResponse GetAllAccounts(GetAllAccountsRequest
request);</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font color="#008000">
            <font face="Courier New" size="3">// CODEGEN: Generating message
contract since message part fromAccountNo requires protection.</font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">[System.ServiceModel.OperationContractAttribute(Action=</font>
            <font face="Courier New">
              <font color="#800000">"http://tempuri.org/IAccountsManager/Transfer"</font>,
ReplyAction=<font color="#800000">"http://tempuri.org/IAccountsManager/TransferResponse"</font></font>
            <font face="Courier New">)]</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">TransferResponse Transfer(TransferRequest request);</font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">[System.CodeDom.Compiler.GeneratedCodeAttribute(</font>
            <font face="Courier New">
              <font color="#800000">"System.ServiceModel"</font>, <font color="#800000">"3.0.0.0"</font>)]
</font>
          </font>
        </p>
        <font color="#0000ff">
          <p>
            <font face="Courier New" size="3">public</font>
          </p>
        </font>
        <font size="3">
          <font face="Courier New">
            <font color="#000000">
            </font>
            <font color="#0000ff">interface</font>
          </font>
          <font face="Courier New" color="#000000"> IAccountsManagerChannel
: IAccountsManager, System.ServiceModel.IClientChannel</font>
        </font>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">[System.CodeDom.Compiler.GeneratedCodeAttribute(</font>
            <font face="Courier New">
              <font color="#800000">"System.ServiceModel"</font>, <font color="#800000">"3.0.0.0"</font>)]
</font>
          </font>
        </p>
        <font color="#0000ff">
          <p>
            <font face="Courier New" size="3">public</font>
          </p>
        </font>
        <font size="3">
          <font face="Courier New">
            <font color="#000000">
            </font>
            <font color="#0000ff">partial</font>
            <font color="#000000">
            </font>
            <font color="#0000ff">class</font>
          </font>
          <font face="Courier New" color="#000000"> AccountsManagerProxy
: System.ServiceModel.ClientBase&lt;IAccountsManager&gt;, IAccountsManager</font>
        </font>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New" color="#0000ff">public</font>
            <font face="Courier New"> AccountsManagerProxy()</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">
              <font color="#0000ff">public</font> AccountsManagerProxy(<font color="#0000ff">string</font></font>
            <font face="Courier New"> endpointConfigurationName)
: </font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New" color="#0000ff">base</font>
            <font face="Courier New">(endpointConfigurationName)</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">
              <font color="#0000ff">public</font> AccountsManagerProxy(<font color="#0000ff">string</font> endpointConfigurationName, <font color="#0000ff">string</font></font>
            <font face="Courier New"> remoteAddress)
: </font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New" color="#0000ff">base</font>
            <font face="Courier New">(endpointConfigurationName,
remoteAddress)</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">
              <font color="#0000ff">public</font> AccountsManagerProxy(<font color="#0000ff">string</font></font>
            <font face="Courier New"> endpointConfigurationName,
System.ServiceModel.EndpointAddress remoteAddress) : </font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New" color="#0000ff">base</font>
            <font face="Courier New">(endpointConfigurationName,
remoteAddress)</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New" color="#0000ff">public</font>
            <font face="Courier New"> AccountsManagerProxy(System.ServiceModel.Channels.Binding
binding, System.ServiceModel.EndpointAddress remoteAddress) : </font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New" color="#0000ff">base</font>
            <font face="Courier New">(binding,
remoteAddress)</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">CreateAccountResponse IAccountsManager.CreateAccount(CreateAccountRequest
request)</font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">
              <font color="#0000ff">return</font>
              <font color="#0000ff">base</font>
            </font>
            <font face="Courier New">.InnerProxy.CreateAccount(request);</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">
              <font color="#0000ff">public</font>
              <font color="#0000ff">void</font> CreateAccount(<font color="#0000ff">int</font> accountNo, <font color="#0000ff">string</font> name, <font color="#0000ff">decimal</font></font>
            <font face="Courier New"> initialBalance)</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">CreateAccountRequest inValue = </font>
            <font face="Courier New" color="#0000ff">new</font>
            <font face="Courier New"> CreateAccountRequest();</font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">inValue.Body = </font>
            <font face="Courier New" color="#0000ff">new</font>
            <font face="Courier New"> CreateAccountRequestBody();</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">inValue.Body.accountNo = accountNo;</font>
        </p>
        <p>
          <font face="Courier New" size="3">inValue.Body.name = name;</font>
        </p>
        <p>
          <font face="Courier New" size="3">inValue.Body.initialBalance = initialBalance;</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">CreateAccountResponse retVal = ((IAccountsManager)(</font>
            <font face="Courier New" color="#0000ff">this</font>
            <font face="Courier New">)).CreateAccount(inValue);</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">GetAllAccountsResponse IAccountsManager.GetAllAccounts(GetAllAccountsRequest
request)</font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">
              <font color="#0000ff">return</font>
              <font color="#0000ff">base</font>
            </font>
            <font face="Courier New">.InnerProxy.GetAllAccounts(request);</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New" color="#0000ff">public</font>
            <font face="Courier New"> BankingBusinessLayer.Account[]
GetAllAccounts()</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">GetAllAccountsRequest inValue = </font>
            <font face="Courier New" color="#0000ff">new</font>
            <font face="Courier New"> GetAllAccountsRequest();</font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">inValue.Body = </font>
            <font face="Courier New" color="#0000ff">new</font>
            <font face="Courier New"> GetAllAccountsRequestBody();</font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">GetAllAccountsResponse retVal = ((IAccountsManager)(</font>
            <font face="Courier New" color="#0000ff">this</font>
            <font face="Courier New">)).GetAllAccounts(inValue);</font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New" color="#0000ff">return</font>
            <font face="Courier New"> retVal.Body.GetAllAccountsResult;</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">TransferResponse IAccountsManager.Transfer(TransferRequest
request)</font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">
              <font color="#0000ff">return</font>
              <font color="#0000ff">base</font>
            </font>
            <font face="Courier New">.InnerProxy.Transfer(request);</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">
              <font color="#0000ff">public</font>
              <font color="#0000ff">void</font> Transfer(<font color="#0000ff">int</font> fromAccountNo, <font color="#0000ff">int</font> toAccountNo, <font color="#0000ff">decimal</font></font>
            <font face="Courier New"> amount)</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">{</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">TransferRequest inValue = </font>
            <font face="Courier New" color="#0000ff">new</font>
            <font face="Courier New"> TransferRequest();</font>
          </font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">inValue.Body = </font>
            <font face="Courier New" color="#0000ff">new</font>
            <font face="Courier New"> TransferRequestBody();</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">inValue.Body.fromAccountNo = fromAccountNo;</font>
        </p>
        <p>
          <font face="Courier New" size="3">inValue.Body.toAccountNo = toAccountNo;</font>
        </p>
        <p>
          <font face="Courier New" size="3">inValue.Body.amount = amount;</font>
        </p>
        <p>
          <font size="3">
            <font face="Courier New">TransferResponse retVal = ((IAccountsManager)(</font>
            <font face="Courier New" color="#0000ff">this</font>
            <font face="Courier New">)).Transfer(inValue);</font>
          </font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
        </p>
        <p>
          <font face="Courier New" size="3">}</font>
          <font size="4">
          </font>
        </p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=51b0482d-e598-426a-8047-948950af8b8e" />
      </body>
      <title>Slides and Demos from Connecting Smart Clients with WCF talk last night - Feb CTP lessons learned</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,51b0482d-e598-426a-8047-948950af8b8e.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/02/24/SlidesAndDemosFromConnectingSmartClientsWithWCFTalkLastNightFebCTPLessonsLearned.aspx</link>
      <pubDate>Fri, 24 Feb 2006 15:04:57 GMT</pubDate>
      <description>&lt;p&gt;
I gave a talk on Connecting Smart Clients at the Microsoft Integration and Connected
Systems User Group (MICSUG) last night. I discussed and demoed the basics of using
Windows Communication Foundation (WCF) to connect applications, using the newly released
Feb CTP.
&lt;/p&gt;
&lt;p&gt;
You can get the slides and demos here:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/ConnectSmartClientsWithWCF_Feb06.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.softinsight.com/downloads/INETA/ConnectingSmartClientsWithWCFDemos_Feb06.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
In jumping through the hoops yesterday to get my demos running on the Feb CTP, there
were a number of changes that I had to get used to compared to previous builds.
&lt;/p&gt;
&lt;p&gt;
The biggest is that if you run svcutil against a service that uses wsHttpBinding to
generate a proxy, you get a proxy service contract that uses custom message contracts
to wrap the parameters and return values from each operation contract. XXXRequest
and XXXResponse classes are defined in the proxy file for each operation, along with
an XXXBody class that actually contains the raw parameter/DataContract types. 
&lt;/p&gt;
&lt;p&gt;
If you program against the&amp;nbsp;service contract interface like so:
&lt;/p&gt;
&lt;p&gt;
IAccountsManager mgrProxy = new AccountsManagerProxy();
&lt;/p&gt;
&lt;p&gt;
You will have to create the XXXRequest&amp;nbsp;message contract types to wrap all the
parameters you pass into the methods, and unwrap any return values from the XXXResponse
types. However, they also expose a public method on the proxy class directly that
encapsulates these details so that you can deal directly with the underlying parameters
and return values. 
&lt;/p&gt;
&lt;p&gt;
So instead of calling IAccountsManager.GetAllAccounts for example, you will have an
easier time calling AccountsManagerProxy.GetAllAccounts.
&lt;/p&gt;
&lt;p&gt;
This is true for wsHttpBinding because of the message level security involved in the
default binding. If you use basicHttpBinding, or turn down the security on the wsHttpBinding,
then you will get more straightforward service contract interface definitions on the
client side proxy.
&lt;/p&gt;
&lt;p&gt;
The resulting proxy and service contract look like the following:
&lt;/p&gt;
&lt;font size=4&gt; 
&lt;p&gt;
&lt;/font&gt;&lt;font size=3&gt;&lt;font face="Courier New"&gt;[System.CodeDom.Compiler.GeneratedCodeAttribute(&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;"System.ServiceModel"&lt;/font&gt;, &lt;font color=#800000&gt;"3.0.0.0"&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;)]&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;[System.ServiceModel.ServiceContractAttribute()]&lt;/font&gt;
&lt;/p&gt;
&lt;font color=#0000ff&gt; 
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;public&lt;/font&gt;
&lt;/font&gt;&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;font color=#0000ff&gt;interface&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" color=#000000&gt; IAccountsManager&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#008000&gt;&lt;font face="Courier New" size=3&gt;// CODEGEN: Generating message
contract since message part accountNo requires protection.&lt;/font&gt;
&lt;/p&gt;
&gt; 
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;[System.ServiceModel.OperationContractAttribute(Action=&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;"http://tempuri.org/IAccountsManager/CreateAccount"&lt;/font&gt;,
ReplyAction=&lt;font color=#800000&gt;"http://tempuri.org/IAccountsManager/CreateAccountResponse"&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;)]&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;CreateAccountResponse CreateAccount(CreateAccountRequest
request);&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#008000&gt;&lt;font face="Courier New" size=3&gt;// CODEGEN: Generating message
contract since message part GetAllAccountsResult requires protection.&lt;/font&gt;
&lt;/p&gt;
&gt; 
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;[System.ServiceModel.OperationContractAttribute(Action=&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;"http://tempuri.org/IAccountsManager/GetAllAccounts"&lt;/font&gt;,
ReplyAction=&lt;font color=#800000&gt;"http://tempuri.org/IAccountsManager/GetAllAccountsResponse"&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;)]&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;GetAllAccountsResponse GetAllAccounts(GetAllAccountsRequest
request);&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#008000&gt;&lt;font face="Courier New" size=3&gt;// CODEGEN: Generating message
contract since message part fromAccountNo requires protection.&lt;/font&gt;
&lt;/p&gt;
&gt; 
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;[System.ServiceModel.OperationContractAttribute(Action=&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;"http://tempuri.org/IAccountsManager/Transfer"&lt;/font&gt;,
ReplyAction=&lt;font color=#800000&gt;"http://tempuri.org/IAccountsManager/TransferResponse"&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;)]&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;TransferResponse Transfer(TransferRequest request);&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;[System.CodeDom.Compiler.GeneratedCodeAttribute(&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;"System.ServiceModel"&lt;/font&gt;, &lt;font color=#800000&gt;"3.0.0.0"&lt;/font&gt;)]
&lt;/p&gt;
&gt;&gt;&lt;font color=#0000ff&gt; 
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;public&lt;/font&gt;
&lt;/font&gt;&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;font color=#0000ff&gt;interface&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" color=#000000&gt; IAccountsManagerChannel
: IAccountsManager, System.ServiceModel.IClientChannel&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;[System.CodeDom.Compiler.GeneratedCodeAttribute(&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;"System.ServiceModel"&lt;/font&gt;, &lt;font color=#800000&gt;"3.0.0.0"&lt;/font&gt;)]
&lt;/p&gt;
&gt;&gt;&lt;font color=#0000ff&gt; 
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;public&lt;/font&gt;
&lt;/font&gt;&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;font color=#0000ff&gt;partial&lt;/font&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;font color=#0000ff&gt;class&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" color=#000000&gt; AccountsManagerProxy
: System.ServiceModel.ClientBase&amp;lt;IAccountsManager&amp;gt;, IAccountsManager&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New" color=#0000ff&gt;public&lt;/font&gt;&lt;font face="Courier New"&gt; AccountsManagerProxy()&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;public&lt;/font&gt; AccountsManagerProxy(&lt;font color=#0000ff&gt;string&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; endpointConfigurationName)
: &lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New" color=#0000ff&gt;base&lt;/font&gt;&lt;font face="Courier New"&gt;(endpointConfigurationName)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;public&lt;/font&gt; AccountsManagerProxy(&lt;font color=#0000ff&gt;string&lt;/font&gt; endpointConfigurationName, &lt;font color=#0000ff&gt;string&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; remoteAddress)
: &lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New" color=#0000ff&gt;base&lt;/font&gt;&lt;font face="Courier New"&gt;(endpointConfigurationName,
remoteAddress)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;public&lt;/font&gt; AccountsManagerProxy(&lt;font color=#0000ff&gt;string&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; endpointConfigurationName,
System.ServiceModel.EndpointAddress remoteAddress) : &lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New" color=#0000ff&gt;base&lt;/font&gt;&lt;font face="Courier New"&gt;(endpointConfigurationName,
remoteAddress)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New" color=#0000ff&gt;public&lt;/font&gt;&lt;font face="Courier New"&gt; AccountsManagerProxy(System.ServiceModel.Channels.Binding
binding, System.ServiceModel.EndpointAddress remoteAddress) : &lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New" color=#0000ff&gt;base&lt;/font&gt;&lt;font face="Courier New"&gt;(binding,
remoteAddress)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;CreateAccountResponse IAccountsManager.CreateAccount(CreateAccountRequest
request)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;return&lt;/font&gt; &lt;font color=#0000ff&gt;base&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;.InnerProxy.CreateAccount(request);&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;public&lt;/font&gt; &lt;font color=#0000ff&gt;void&lt;/font&gt; CreateAccount(&lt;font color=#0000ff&gt;int&lt;/font&gt; accountNo, &lt;font color=#0000ff&gt;string&lt;/font&gt; name, &lt;font color=#0000ff&gt;decimal&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; initialBalance)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;CreateAccountRequest inValue = &lt;/font&gt;&lt;font face="Courier New" color=#0000ff&gt;new&lt;/font&gt;&lt;font face="Courier New"&gt; CreateAccountRequest();&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;inValue.Body = &lt;/font&gt;&lt;font face="Courier New" color=#0000ff&gt;new&lt;/font&gt;&lt;font face="Courier New"&gt; CreateAccountRequestBody();&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;inValue.Body.accountNo = accountNo;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;inValue.Body.name = name;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;inValue.Body.initialBalance = initialBalance;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;CreateAccountResponse retVal = ((IAccountsManager)(&lt;/font&gt;&lt;font face="Courier New" color=#0000ff&gt;this&lt;/font&gt;&lt;font face="Courier New"&gt;)).CreateAccount(inValue);&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;GetAllAccountsResponse IAccountsManager.GetAllAccounts(GetAllAccountsRequest
request)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;return&lt;/font&gt; &lt;font color=#0000ff&gt;base&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;.InnerProxy.GetAllAccounts(request);&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New" color=#0000ff&gt;public&lt;/font&gt;&lt;font face="Courier New"&gt; BankingBusinessLayer.Account[]
GetAllAccounts()&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;GetAllAccountsRequest inValue = &lt;/font&gt;&lt;font face="Courier New" color=#0000ff&gt;new&lt;/font&gt;&lt;font face="Courier New"&gt; GetAllAccountsRequest();&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;inValue.Body = &lt;/font&gt;&lt;font face="Courier New" color=#0000ff&gt;new&lt;/font&gt;&lt;font face="Courier New"&gt; GetAllAccountsRequestBody();&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;GetAllAccountsResponse retVal = ((IAccountsManager)(&lt;/font&gt;&lt;font face="Courier New" color=#0000ff&gt;this&lt;/font&gt;&lt;font face="Courier New"&gt;)).GetAllAccounts(inValue);&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New" color=#0000ff&gt;return&lt;/font&gt;&lt;font face="Courier New"&gt; retVal.Body.GetAllAccountsResult;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;TransferResponse IAccountsManager.Transfer(TransferRequest
request)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;return&lt;/font&gt; &lt;font color=#0000ff&gt;base&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;.InnerProxy.Transfer(request);&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;public&lt;/font&gt; &lt;font color=#0000ff&gt;void&lt;/font&gt; Transfer(&lt;font color=#0000ff&gt;int&lt;/font&gt; fromAccountNo, &lt;font color=#0000ff&gt;int&lt;/font&gt; toAccountNo, &lt;font color=#0000ff&gt;decimal&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; amount)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;TransferRequest inValue = &lt;/font&gt;&lt;font face="Courier New" color=#0000ff&gt;new&lt;/font&gt;&lt;font face="Courier New"&gt; TransferRequest();&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;inValue.Body = &lt;/font&gt;&lt;font face="Courier New" color=#0000ff&gt;new&lt;/font&gt;&lt;font face="Courier New"&gt; TransferRequestBody();&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;inValue.Body.fromAccountNo = fromAccountNo;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;inValue.Body.toAccountNo = toAccountNo;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;inValue.Body.amount = amount;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;&lt;font face="Courier New"&gt;TransferResponse retVal = ((IAccountsManager)(&lt;/font&gt;&lt;font face="Courier New" color=#0000ff&gt;this&lt;/font&gt;&lt;font face="Courier New"&gt;)).Transfer(inValue);&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" size=3&gt;}&lt;/font&gt;&lt;font size=4&gt;
&lt;/p&gt;
&gt;&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=51b0482d-e598-426a-8047-948950af8b8e" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,51b0482d-e598-426a-8047-948950af8b8e.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=23d11276-49e4-4c1b-ad6a-0507fdc64189</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=23d11276-49e4-4c1b-ad6a-0507fdc64189</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recorded a DNR and DNRtv last week in New London and they are already up on the
site.
</p>
        <p>
You can download/listen to the .NET Rocks! epsidode here: <a href="http://www.dotnetrocks.com">http://www.dotnetrocks.com</a></p>
        <p>
And the DNRtv here: <a href="http://www.dnrtv.com">http://www.dnrtv.com</a></p>
        <p>
In the DNR episode, we talk about data binding, ClickOnce and a few other related
topics.
</p>
        <p>
This DNRtv shows how to do some of the data binding stuff in the designer. Keep your
eyes out for another episode in a week or so on ClickOnce deployment.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=23d11276-49e4-4c1b-ad6a-0507fdc64189" />
      </body>
      <title>.NET Rocks and DNRtv episodes up</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/02/24/NETRocksAndDNRtvEpisodesUp.aspx</link>
      <pubDate>Fri, 24 Feb 2006 14:45:20 GMT</pubDate>
      <description>&lt;p&gt;
I recorded a DNR and DNRtv last week in New London and they are already up on the
site.
&lt;/p&gt;
&lt;p&gt;
You can download/listen to the .NET Rocks! epsidode here: &lt;a href="http://www.dotnetrocks.com"&gt;http://www.dotnetrocks.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
And the DNRtv here: &lt;a href="http://www.dnrtv.com"&gt;http://www.dnrtv.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
In the DNR episode, we talk about data binding, ClickOnce and a few other related
topics.
&lt;/p&gt;
&lt;p&gt;
This DNRtv shows how to do some of the data binding stuff in the designer. Keep your
eyes out for another episode in a week or so on ClickOnce deployment.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=23d11276-49e4-4c1b-ad6a-0507fdc64189" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=ed45c5c6-24cf-469d-b8cf-aeeef64c4ed1</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,ed45c5c6-24cf-469d-b8cf-aeeef64c4ed1.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,ed45c5c6-24cf-469d-b8cf-aeeef64c4ed1.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=ed45c5c6-24cf-469d-b8cf-aeeef64c4ed1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here is a little trick that has bitten me on more than one occasion, and just bit
someone who attended my data binding session in NYC the other night.
</p>
        <p>
Here is the setup to be bitten by the defaults in Visual Studio:
</p>
        <p>
- Add a SQL Express database to your project
</p>
        <p>
- Edit the schema, add some tables, etc.
</p>
        <p>
- Write some code / data binding that uses the database
</p>
        <p>
- Run a debug session adding records or modifying ones you created through the designer.
</p>
        <p>
- Save the changes from your running debug session.
</p>
        <p>
- Shut down the app and run another debug session, and your changes are no longer
there. 
</p>
        <p>
First instinct at this point is "there is something screwed up with my data binding
/ data access code". That instinct may be wrong (although we are all good at writing
bugs as well).
</p>
        <p>
When VS adds the MDF file to your project, it places it and its related LDF file in
the project root folder, and add them to your project in solution explorer. The file
properties for the MDF file include Build Action = Content, and Copy To Output Directory
= Copy Always.
</p>
        <p>
What is happening is that your changes are being persisted to the copy of the MDF
file that was placed in your build output directory (bin\debug) on the first debug
run. Then on the second debug run, the unchanged MDF file from the project root folder
is copied down into the build output folder, overwriting the one that was there with
your changes from the previous run. As a result, it looks like your changes were not
persisted when in fact they were (or may have been if your code was correct).
</p>
        <p>
The solution is that whenever you add a SQL Express DB to your VS project, you probably
want to change the Copy To Output Directory property for the file to Copy If Newer.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ed45c5c6-24cf-469d-b8cf-aeeef64c4ed1" />
      </body>
      <title>Debugging SQL Express Apps - Beware VS Copy To Output Directory default</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,ed45c5c6-24cf-469d-b8cf-aeeef64c4ed1.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/02/22/DebuggingSQLExpressAppsBewareVSCopyToOutputDirectoryDefault.aspx</link>
      <pubDate>Wed, 22 Feb 2006 13:21:46 GMT</pubDate>
      <description>&lt;p&gt;
Here is a little trick that has bitten me on more than one occasion, and just bit
someone who attended my data binding session in NYC the other night.
&lt;/p&gt;
&lt;p&gt;
Here is the setup to be bitten by the defaults in Visual Studio:
&lt;/p&gt;
&lt;p&gt;
- Add a SQL Express database to your project
&lt;/p&gt;
&lt;p&gt;
- Edit the schema, add some tables, etc.
&lt;/p&gt;
&lt;p&gt;
- Write some code / data binding that uses the database
&lt;/p&gt;
&lt;p&gt;
- Run a debug session adding records or modifying ones you created through the designer.
&lt;/p&gt;
&lt;p&gt;
- Save the changes from your running debug session.
&lt;/p&gt;
&lt;p&gt;
- Shut down the app and run another debug session, and your changes are no longer
there. 
&lt;/p&gt;
&lt;p&gt;
First instinct at this point is "there is something screwed up with my data binding
/ data access code". That instinct may be wrong (although we are all good at writing
bugs as well).
&lt;/p&gt;
&lt;p&gt;
When VS adds the MDF file to your project, it places it and its related LDF file in
the project root folder, and add them to your project in solution explorer. The file
properties for the MDF file include Build Action = Content, and Copy To Output Directory
= Copy Always.
&lt;/p&gt;
&lt;p&gt;
What is happening is that your changes are being persisted to the copy of the MDF
file that was placed in your build output directory (bin\debug) on the first debug
run. Then on the second debug run, the unchanged MDF file from the project root folder
is copied down into the build output folder, overwriting the one that was there with
your changes from the previous run. As a result, it looks like your changes were not
persisted when in fact they were (or may have been if your code was correct).
&lt;/p&gt;
&lt;p&gt;
The solution is that whenever you add a SQL Express DB to your VS project, you probably
want to change the Copy To Output Directory property for the file to Copy If Newer.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ed45c5c6-24cf-469d-b8cf-aeeef64c4ed1" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,ed45c5c6-24cf-469d-b8cf-aeeef64c4ed1.aspx</comments>
      <category>.NET</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=cceb1d90-9f88-49e9-bf30-39889ae025c5</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,cceb1d90-9f88-49e9-bf30-39889ae025c5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,cceb1d90-9f88-49e9-bf30-39889ae025c5.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=cceb1d90-9f88-49e9-bf30-39889ae025c5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I went up to New London this week and taped
two episodes of <a href="http://www.dnrtv.com/">DNRtv</a> and one <a href="http://www.dotnetrocks.com/">DNR </a>with <a href="http://weblogs.asp.net/cfranklin">Carl </a>and <a href="http://www.campbellassociates.ca/blog/">Richard</a>.
The DNRtv episodes should go up in the next two weeks, one on data binding and one
on ClickOnce deployment. The DNR will air on 22 March. Check them out!<img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=cceb1d90-9f88-49e9-bf30-39889ae025c5" /></body>
      <title>.NET Rocks! and .NET Rocks! TV Episodes coming up</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,cceb1d90-9f88-49e9-bf30-39889ae025c5.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/02/20/NETRocksAndNETRocksTVEpisodesComingUp.aspx</link>
      <pubDate>Mon, 20 Feb 2006 18:10:56 GMT</pubDate>
      <description>I went up to New London this week and taped two episodes of &lt;a href="http://www.dnrtv.com/"&gt;DNRtv&lt;/a&gt; and
one &lt;a href="http://www.dotnetrocks.com/"&gt;DNR &lt;/a&gt;with &lt;a href="http://weblogs.asp.net/cfranklin"&gt;Carl &lt;/a&gt;and &lt;a href="http://www.campbellassociates.ca/blog/"&gt;Richard&lt;/a&gt;.
The DNRtv episodes should go up in the next two weeks, one on data binding and one
on ClickOnce deployment. The DNR will air on 22 March. Check them out!&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=cceb1d90-9f88-49e9-bf30-39889ae025c5" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,cceb1d90-9f88-49e9-bf30-39889ae025c5.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=32486811-1be2-418f-8f43-5d5e4f55942e</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,32486811-1be2-418f-8f43-5d5e4f55942e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,32486811-1be2-418f-8f43-5d5e4f55942e.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=32486811-1be2-418f-8f43-5d5e4f55942e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a talk on data binding in NYC this Thu night. Had a great time. Lively crowd
as always, lots of good questions and interaction.
</p>
        <p>
Here are the slides and demos:
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/INETA/DataBindingwithWindowsForms2.0_Feb06.pdf">Slides</a>    <a href="http://www.softinsight.com/downloads/INETA/DataBindingDemosFeb06.zip">Demos</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=32486811-1be2-418f-8f43-5d5e4f55942e" />
      </body>
      <title>Data Binding with Windows Forms 2.0 Slides/Demos from NYC.NET</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,32486811-1be2-418f-8f43-5d5e4f55942e.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/02/20/DataBindingWithWindowsForms20SlidesDemosFromNYCNET.aspx</link>
      <pubDate>Mon, 20 Feb 2006 18:06:58 GMT</pubDate>
      <description>&lt;p&gt;
I gave a talk on data binding in NYC this Thu night. Had a great time. Lively crowd
as always, lots of good questions and interaction.
&lt;/p&gt;
&lt;p&gt;
Here are the slides and demos:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/INETA/DataBindingwithWindowsForms2.0_Feb06.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/DataBindingDemosFeb06.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=32486811-1be2-418f-8f43-5d5e4f55942e" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,32486811-1be2-418f-8f43-5d5e4f55942e.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=1f9618cf-a893-4973-a294-9e020fb7d482</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,1f9618cf-a893-4973-a294-9e020fb7d482.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,1f9618cf-a893-4973-a294-9e020fb7d482.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=1f9618cf-a893-4973-a294-9e020fb7d482</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">For the folks from my Master class in CA
this week, <a href="http://www.softinsight.com/downloads/Classes/TDCdemos.zip">here
are the live demos</a>. Anyone's welcome to grab them, most have project names that
indicate what was being demoed.<img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=1f9618cf-a893-4973-a294-9e020fb7d482" /></body>
      <title>TDC Class Demos</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,1f9618cf-a893-4973-a294-9e020fb7d482.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/02/04/TDCClassDemos.aspx</link>
      <pubDate>Sat, 04 Feb 2006 13:28:28 GMT</pubDate>
      <description>For the folks from my Master class in CA this week, &lt;a href="http://www.softinsight.com/downloads/Classes/TDCdemos.zip"&gt;here
are the live demos&lt;/a&gt;. Anyone's welcome to grab them, most have project names that
indicate what was being demoed.&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=1f9618cf-a893-4973-a294-9e020fb7d482" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,1f9618cf-a893-4973-a294-9e020fb7d482.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=59671788-f800-4ee0-bd98-e756ac198db6</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,59671788-f800-4ee0-bd98-e756ac198db6.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,59671788-f800-4ee0-bd98-e756ac198db6.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=59671788-f800-4ee0-bd98-e756ac198db6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a presentation on WPF last night in Orlando to ONETUG. Great group, lots of
good questions, had a lot of fun. 
</p>
        <p>
Here are the slides and demos:  <a href="http://www.softinsight.com/downloads/INETA/FundamentalsofWPF.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/INETA/FundamentalsofWPFDemos.zip">Demos</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=59671788-f800-4ee0-bd98-e756ac198db6" />
      </body>
      <title>Fundamentals of Windows Presentation Foundation talk at ONETUG last night</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,59671788-f800-4ee0-bd98-e756ac198db6.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/01/19/FundamentalsOfWindowsPresentationFoundationTalkAtONETUGLastNight.aspx</link>
      <pubDate>Thu, 19 Jan 2006 14:08:05 GMT</pubDate>
      <description>&lt;p&gt;
I gave a presentation on WPF last night in Orlando to ONETUG. Great group, lots of
good questions, had a lot of fun. 
&lt;/p&gt;
&lt;p&gt;
Here are the slides and demos:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/FundamentalsofWPF.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/FundamentalsofWPFDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=59671788-f800-4ee0-bd98-e756ac198db6" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,59671788-f800-4ee0-bd98-e756ac198db6.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=ecf030b7-4b2f-4300-9c8e-e0c9077d5a59</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,ecf030b7-4b2f-4300-9c8e-e0c9077d5a59.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,ecf030b7-4b2f-4300-9c8e-e0c9077d5a59.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=ecf030b7-4b2f-4300-9c8e-e0c9077d5a59</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A couple people have suggested that I post the table of contents for my book to my
blog since it is not yet available on Amazon. 
</p>
        <p>
Here it is:
</p>
        <h4>
          <i>Foreword xxi</i>
        </h4>
        <h4>
          <i>Preface xxiii</i>
        </h4>
        <h4>
          <i>Acknowledgments xxxv</i>
        </h4>
        <h4>
          <i>About the Author xxxvii</i>
        </h4>
        <h3>Chapter 1: Building Data-Bound Applications with Windows Forms 1
</h3>
        <p>
What Is Data Binding? 2
</p>
        <p>
Your First Data-Bound Windows Forms 2.0 Application 3
</p>
        <p>
Data-Binding Landscape 14
</p>
        <p>
Data Sources 15
</p>
        <p>
Data Objects and Collections 16
</p>
        <p>
DataSets or Not, That Is the Question... 18
</p>
        <p>
Data-Bound Controls 20
</p>
        <p>
Layered Application Architecture 21
</p>
        <p>
What Is a Smart Client? 27
</p>
        <p>
Where Are We? 28
</p>
        <h3>Chapter 2: Working with Typed Data Sets and Table Adapters 31
</h3>
        <p>
A Quick Review of DataSets 31
</p>
        <p>
The Quest for Type Safety 34
</p>
        <p>
Typed Data Set Internals 37
</p>
        <p>
Creating Typed Data Sets 41
</p>
        <p>
Creating Typed Data Sets with the Data Set Designer 42
</p>
        <p>
Typed Data Set-Generated Code 49
</p>
        <p>
Introduction to Table Adapters 52
</p>
        <p>
Filling and Updating a Typed Data Set with a Table Adapter 56
</p>
        <p>
Connection Management 58
</p>
        <p>
Adding Transaction Support to a Table Adapter 62
</p>
        <p>
Adding Helper Data Access Methods 66
</p>
        <p>
Basing Table Adapters on Stored Procedures or Views 67
</p>
        <p>
Adding Queries to Table Adapters 69
</p>
        <p>
Creating Typed Data Sets with Command Line Tools 77
</p>
        <p>
Using Typed Data Sets in Your Code 78
</p>
        <p>
Where Are We? 79
</p>
        <h3>Chapter 3: Introducing Data Binding in Windows Forms 81
</h3>
        <p>
The 40,000-Foot View of Data Binding 81
</p>
        <p>
Binding Data Collections to a Grid 86
</p>
        <p>
Binding Data Collections to Multi-Valued Controls 88
</p>
        <p>
Binding Data to Individual Controls on a Form 90
</p>
        <p>
Data Paths Within Data Sources 92
</p>
        <p>
Synchronizing Data Between Controls 96
</p>
        <p>
Smarter Data Containment 97
</p>
        <p>
Paging Through Data 99
</p>
        <p>
Master-Details Data Binding 104
</p>
        <p>
Updating Data Sources Through Data Binding 106
</p>
        <p>
Where Are We? 108
</p>
        <h3>Chapter 4: Binding Controls to Data Sources 111
</h3>
        <p>
Getting to Know the BindingSource Component 111
</p>
        <p>
Simple Data Binding with Binding Sources 112
</p>
        <p>
Chaining Binding Sources for Master-Details Data Binding 116
</p>
        <p>
Navigating Data Through a Binding Source 121
</p>
        <p>
Manipulating Data Through a Binding Source 122
</p>
        <p>
Using a Binding Source as a Data Storage Container 124
</p>
        <p>
Filling a Binding Source with a Data Reader 126
</p>
        <p>
Sorting, Searching, and Filtering Presented Data with a Binding Source 128
</p>
        <p>
Monitoring the Data with Events 131
</p>
        <p>
Restricting Changes to the Data 133
</p>
        <p>
Underneath the Covers of Data Binding for Complex Types 134
</p>
        <p>
Binding an Image Column to a PictureBox Control 141
</p>
        <p>
Binding a DateTime Column to a DateTimePicker 142
</p>
        <p>
Binding a DateTime Column to a TextBox 144
</p>
        <p>
Binding a Numeric Column to a TextBox 145
</p>
        <p>
Automatic Formatting and Parsing Summary 147
</p>
        <p>
Going Beyond Built-In Type Conversion with Binding Events 148
</p>
        <p>
Handling the Format Event 154
</p>
        <p>
Handling the Parse Event 156
</p>
        <p>
Completing the Editing Process 157
</p>
        <p>
Making the User’s Life Easier with AutoComplete 160
</p>
        <p>
Data Binding Lifecycle 162
</p>
        <p>
Smarter Child-Parent Data Binding 163
</p>
        <p>
Binding to Multiple Copies of Data 165
</p>
        <p>
Updating Parent Data-Bound Controls from Child Data-Bound Controls 168
</p>
        <p>
Synchronizing Many-to-Many Related Collections 172
</p>
        <p>
Where Are We? 176
</p>
        <h3>Chapter 5: Generating Bound Controls with the Visual Studio Designer 177
</h3>
        <p>
Working with the Data Sources Window 177
</p>
        <p>
Adding Data Sources to a Project 179
</p>
        <p>
Choosing the Type of Data Source 180
</p>
        <p>
Adding a Database Data Source 181
</p>
        <p>
Adding a Web Service Data Source 185
</p>
        <p>
Adding an Object Data Source 186
</p>
        <p>
Generating Bound Controls from Data Sources 189
</p>
        <p>
Selecting the Bound Control Type 196
</p>
        <p>
Customizing the Bound Control Types 196
</p>
        <p>
Binding Existing Controls to Data Sources 199
</p>
        <p>
Behind the Scenes: Designer Code and Data Sources Files 202
</p>
        <p>
Other Designer Data-Binding Code Generation 205
</p>
        <p>
Setting Control Data Binding Through the Properties Window 206
</p>
        <p>
Generating Data Bindings with Smart Tags 210
</p>
        <p>
Generating Master-Details Data-Bound Controls with the Designer 214
</p>
        <p>
Where Are We? 216
</p>
        <h3>Chapter 6: Presenting Data with the DataGridView Control 217
</h3>
        <p>
DataGridView Overview 218
</p>
        <p>
Basic Data Binding with the DataGridView 219
</p>
        <p>
Controlling Modifications to Data in the Grid 221
</p>
        <p>
Programmatic DataGridView Construction 222
</p>
        <p>
Custom Column Content with Unbound Columns 226
</p>
        <p>
Displaying Computed Data in Virtual Mode 233
</p>
        <p>
Using the Built-In Column Types 241
</p>
        <p>
Built-In Header Cells 255
</p>
        <p>
Handling Grid Data Edits 256
</p>
        <p>
Automatic Column Sizing 259
</p>
        <p>
Column and Row Freezing 262
</p>
        <p>
Using the Designer to Define Grids 263
</p>
        <p>
Column Reordering 266
</p>
        <p>
Defining Custom Column and Cell Types 269
</p>
        <p>
Utilizing Cell-Oriented Grid Features 277
</p>
        <p>
Formatting with Styles 281
</p>
        <p>
Where Are We? 284
</p>
        <h3>Chapter 7: Understanding Data-Binding Interfaces 285
</h3>
        <p>
What Does Data Binding Have to Do with Interfaces? 286
</p>
        <p>
The IEnumerable and IEnumerator Interfaces: Supporting Iteration Through Collections
289
</p>
        <p>
The ICollection Interface: Controlling Access to a Collection 295
</p>
        <p>
The IList Interface: Enabling Data Binding 298
</p>
        <p>
The IListSource Interface: Exposing Collections of Collections 303
</p>
        <p>
Property Descriptors: Allowing Dynamic Data Item Information Discovery 305
</p>
        <p>
The ITypedList Interface: Exposing Data-Binding Properties 307
</p>
        <p>
The IBindingList Interface: Providing Rich Binding Support 310
</p>
        <p>
The IBindingListView Interface: Supporting Advanced Sorting and Filtering 323
</p>
        <p>
The ICancelAddNew Interface: Supporting Transactional Inserts in a Collection 325
</p>
        <p>
The IRaiseItemChangedEvents Interface: Providing Item Modification Notifications on
Collections 327
</p>
        <p>
The IEditableObject Interface: Supporting Transactional Item Modifications 328
</p>
        <p>
The INotifyPropertyChanged Interface: Publishing Item Change Notifications 329
</p>
        <p>
The ICustomTypeDescriptor Interface: Exposing Custom Type Information 332
</p>
        <p>
The ISupportInitialize Interface: Supporting Designer Initialization 334
</p>
        <p>
The IDataErrorInfo Interface: Providing Error Information 330
</p>
        <p>
The ISupportInitializeNotification Interface: Supporting Interdependent Component
Initialization 337
</p>
        <p>
The ICurrencyManagerProvider Interface: Exposing a Data Container’s CurrencyManager
341
</p>
        <p>
Where Are We? 341
</p>
        <h3>Chapter 8: Implementing Custom Data-Bound Controls 343
</h3>
        <p>
Extending Framework Data-Bound Controls 344
</p>
        <p>
Creating a Grouped Column DataGridView 345
</p>
        <p>
Using Custom Controls 350
</p>
        <p>
The User Control Test Container 352
</p>
        <p>
Developing Data-Bound Container Controls 353
</p>
        <p>
Building a Filtered Grid Control 354
</p>
        <p>
Adding Data-Binding Capability to a Custom Control 357
</p>
        <p>
Supporting Designer Initialization of Data Binding 359
</p>
        <p>
Specifying Binding Properties on a Control 360
</p>
        <p>
Supporting Delayed Initialization with ISupportInitialize 362
</p>
        <p>
Dynamically Determining the Properties of a Data Source 367
</p>
        <p>
Autocompleting Input in a TextBox Control 371
</p>
        <p>
Autosizing Columns in the Grid 375
</p>
        <p>
Winding Up the Filtered Grid Example 376
</p>
        <p>
Building a Custom Data-Bound Control from Scratch 379
</p>
        <p>
Building a Data-Bound Charting Control for Decision Support 379
</p>
        <p>
Coding a Data-Bound Custom Control 384
</p>
        <p>
Adding Editing Support to a Custom Data Bound Control 391
</p>
        <p>
Where Are We? 397
</p>
        <h3>Chapter 9: Implementing Custom Data-Bound Business Objects and Collections 399
</h3>
        <p>
Defining and Working with Data-Bound Business Objects 400
</p>
        <p>
Defining and Working with Data-Bound Business Object Collections 405
</p>
        <p>
.NET Framework Generic Collection Classes 406
</p>
        <p>
The CustomBusinessObjects Example 408
</p>
        <p>
Setting the Textual Data-Binding Behavior of Custom Objects 415
</p>
        <p>
Supporting Transacted Object Editing with IEditableObject 416
</p>
        <p>
Supporting Object Edit Notifications with Property Change Events 420
</p>
        <p>
Supporting Object Edit Notifications with INotifyPropertyChanged 423
</p>
        <p>
Using BindingList&lt;T&gt; to Create Rich Object Collections 424
</p>
        <p>
Creating a Custom Collection Type Based on BindingList&lt;T&gt; 426
</p>
        <p>
Managing Transacted Additions to a Collection 439
</p>
        <p>
Raising Item Changed Events 441
</p>
        <p>
Adding IBindingListView Functionality 443
</p>
        <p>
Binding to Business Objects Through the Data Sources Window 453
</p>
        <p>
Where Are We? 455
</p>
        <h3>Chapter 10: Validating Data Input and Handling Errors 457
</h3>
        <p>
Windows Forms Validation 458
</p>
        <p>
Handling Validation Events 459
</p>
        <p>
DataGridView Validation Events 462
</p>
        <p>
Validation Up the Control Hierarchy 463
</p>
        <p>
Displaying Validation Errors with the ErrorProvider Control 464
</p>
        <p>
DataGridView Error Displays 467
</p>
        <p>
DataGridView DataError Event 468
</p>
        <p>
Controlling Validation Behavior with the AutoValidate Property 471
</p>
        <p>
Validation down the Control Hierarchy 472
</p>
        <p>
Extended Validation Controls 474
</p>
        <p>
Capturing Data Errors on Data Sets 475
</p>
        <p>
Providing Error Information from Custom Objects with IDataErrorInfo 479
</p>
        <p>
Data Concurrency Resolution 483
</p>
        <p>
Where Are We? 484
</p>
        <h3>Appendix A: Binding to Data in ASP.NET 487
</h3>
        <p>
ASP.NET Page Processing Basics 489
</p>
        <p>
Data Binding in ASP.NET 1.X 490
</p>
        <p>
Data-Binding Overview in ASP.NET 2.0 498
</p>
        <p>
Data Sources 499
</p>
        <p>
Data-Binding Expressions 508
</p>
        <p>
GridView Control 509
</p>
        <p>
DetailsView Control 512
</p>
        <p>
FormView Control 514
</p>
        <p>
Master-Details Binding 515
</p>
        <p>
Hierarchical Binding 518
</p>
        <p>
Where Are We? 519
</p>
        <h3>Appendix B: Binding Data in WinFx Applications 521
</h3>
        <p>
WinFx UI Programming and Capabilities Overview 522
</p>
        <p>
Writing a Simple WinFx Application 525
</p>
        <p>
WinFx Data Binding 101 532
</p>
        <p>
Data Contexts and Data Sources 536
</p>
        <p>
What About XAML? 537
</p>
        <p>
Binding a Collection to a Grid with Templates 541
</p>
        <p>
Control Styling in WinFx 543
</p>
        <p>
Where Are We? 545
</p>
        <h3>Appendix C: Programming Windows Forms Applications 547
</h3>
        <p>
Your First Windows Forms Data Application 548
</p>
        <p>
Creating Windows Forms Applications with Visual Studio 554
</p>
        <p>
Windows Forms Designer-Generated Code (New in 2.0) 563
</p>
        <p>
A Brief Tour of the Windows Forms Architecture 567
</p>
        <p>
The Dawn of .NET Execution—The Main Method 570
</p>
        <p>
Handling Control Events 574
</p>
        <p>
Displaying Other Forms 576
</p>
        <p>
Containing Forms Within a Parent Form 577
</p>
        <p>
Common Data Display Controls 578
</p>
        <p>
Creating a Custom User Control 586
</p>
        <p>
Laying Out Controls on a Form 589
</p>
        <p>
Setting Tab Order 596
</p>
        <p>
Command and Control of Your Windows Forms Applications (New in 2.0) 598
</p>
        <p>
Where Are We? 600
</p>
        <h3>Appendix D: Accessing Data with ADO.NET 601
</h3>
        <p>
Relational Data Access 603
</p>
        <p>
The Ubiquitous DataSet 607
</p>
        <p>
Loading Data Sets from a File 609
</p>
        <p>
Creating a Data Set Programmatically 611
</p>
        <p>
Loading Data Sets from a Database 613
</p>
        <p>
Loading a DataTable with a DataReader 619
</p>
        <p>
Master-Details DataSets 621
</p>
        <p>
Retrieving Data with Stored Procedures 623
</p>
        <p>
Updating the Database Using Data Sets 624
</p>
        <p>
Handling Concurrency 628
</p>
        <p>
Updating with Data Sets and Stored Procedures 632
</p>
        <p>
Searching Data Sets 637
</p>
        <p>
Merging Data from Multiple Data Sets 639
</p>
        <p>
Working with Data Views 641
</p>
        <p>
Working with Transactions 643
</p>
        <p>
Scoping Transactions with System.Transactions 647
</p>
        <p>
Client-Side Transactions 650
</p>
        <p>
Data Set and Data Adapter Events 651
</p>
        <p>
Reading Data into Business Objects 654
</p>
        <p>
XML Data Access 658
</p>
        <p>
Working with the XmlDataDocument Class 659
</p>
        <p>
Working with the XPathDocument Class 663
</p>
        <p>
Loading Data into an XPathDocument 664
</p>
        <p>
Querying XML Data 665
</p>
        <p>
Navigating an XML Document 667
</p>
        <p>
Where Are We? 670
</p>
        <h4>
          <i>Index 671</i>
        </h4>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ecf030b7-4b2f-4300-9c8e-e0c9077d5a59" />
      </body>
      <title>Data Binding with Windows Forms 2.0 Table of Contents</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,ecf030b7-4b2f-4300-9c8e-e0c9077d5a59.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/01/19/DataBindingWithWindowsForms20TableOfContents.aspx</link>
      <pubDate>Thu, 19 Jan 2006 13:58:00 GMT</pubDate>
      <description>&lt;p&gt;
A couple people have suggested that I post the table of contents for my book to my
blog since it is not yet available on Amazon. 
&lt;/p&gt;
&lt;p&gt;
Here it is:
&lt;/p&gt;
&lt;h4&gt;&lt;i&gt;Foreword xxi&lt;/i&gt;
&lt;/h4&gt;
&lt;h4&gt;&lt;i&gt;Preface xxiii&lt;/i&gt;
&lt;/h4&gt;
&lt;h4&gt;&lt;i&gt;Acknowledgments xxxv&lt;/i&gt;
&lt;/h4&gt;
&lt;h4&gt;&lt;i&gt;About the Author xxxvii&lt;/i&gt;
&lt;/h4&gt;
&lt;h3&gt;Chapter 1: Building Data-Bound Applications with Windows Forms 1
&lt;/h3&gt;
&lt;p&gt;
What Is Data Binding? 2
&lt;/p&gt;
&lt;p&gt;
Your First Data-Bound Windows Forms 2.0 Application 3
&lt;/p&gt;
&lt;p&gt;
Data-Binding Landscape 14
&lt;/p&gt;
&lt;p&gt;
Data Sources 15
&lt;/p&gt;
&lt;p&gt;
Data Objects and Collections 16
&lt;/p&gt;
&lt;p&gt;
DataSets or Not, That Is the Question... 18
&lt;/p&gt;
&lt;p&gt;
Data-Bound Controls 20
&lt;/p&gt;
&lt;p&gt;
Layered Application Architecture 21
&lt;/p&gt;
&lt;p&gt;
What Is a Smart Client? 27
&lt;/p&gt;
&lt;p&gt;
Where Are We? 28
&lt;/p&gt;
&lt;h3&gt;Chapter 2: Working with Typed Data Sets and Table Adapters 31
&lt;/h3&gt;
&lt;p&gt;
A Quick Review of DataSets 31
&lt;/p&gt;
&lt;p&gt;
The Quest for Type Safety 34
&lt;/p&gt;
&lt;p&gt;
Typed Data Set Internals 37
&lt;/p&gt;
&lt;p&gt;
Creating Typed Data Sets 41
&lt;/p&gt;
&lt;p&gt;
Creating Typed Data Sets with the Data Set Designer 42
&lt;/p&gt;
&lt;p&gt;
Typed Data Set-Generated Code 49
&lt;/p&gt;
&lt;p&gt;
Introduction to Table Adapters 52
&lt;/p&gt;
&lt;p&gt;
Filling and Updating a Typed Data Set with a Table Adapter 56
&lt;/p&gt;
&lt;p&gt;
Connection Management 58
&lt;/p&gt;
&lt;p&gt;
Adding Transaction Support to a Table Adapter 62
&lt;/p&gt;
&lt;p&gt;
Adding Helper Data Access Methods 66
&lt;/p&gt;
&lt;p&gt;
Basing Table Adapters on Stored Procedures or Views 67
&lt;/p&gt;
&lt;p&gt;
Adding Queries to Table Adapters 69
&lt;/p&gt;
&lt;p&gt;
Creating Typed Data Sets with Command Line Tools 77
&lt;/p&gt;
&lt;p&gt;
Using Typed Data Sets in Your Code 78
&lt;/p&gt;
&lt;p&gt;
Where Are We? 79
&lt;/p&gt;
&lt;h3&gt;Chapter 3: Introducing Data Binding in Windows Forms 81
&lt;/h3&gt;
&lt;p&gt;
The 40,000-Foot View of Data Binding 81
&lt;/p&gt;
&lt;p&gt;
Binding Data Collections to a Grid 86
&lt;/p&gt;
&lt;p&gt;
Binding Data Collections to Multi-Valued Controls 88
&lt;/p&gt;
&lt;p&gt;
Binding Data to Individual Controls on a Form 90
&lt;/p&gt;
&lt;p&gt;
Data Paths Within Data Sources 92
&lt;/p&gt;
&lt;p&gt;
Synchronizing Data Between Controls 96
&lt;/p&gt;
&lt;p&gt;
Smarter Data Containment 97
&lt;/p&gt;
&lt;p&gt;
Paging Through Data 99
&lt;/p&gt;
&lt;p&gt;
Master-Details Data Binding 104
&lt;/p&gt;
&lt;p&gt;
Updating Data Sources Through Data Binding 106
&lt;/p&gt;
&lt;p&gt;
Where Are We? 108
&lt;/p&gt;
&lt;h3&gt;Chapter 4: Binding Controls to Data Sources 111
&lt;/h3&gt;
&lt;p&gt;
Getting to Know the BindingSource Component 111
&lt;/p&gt;
&lt;p&gt;
Simple Data Binding with Binding Sources 112
&lt;/p&gt;
&lt;p&gt;
Chaining Binding Sources for Master-Details Data Binding 116
&lt;/p&gt;
&lt;p&gt;
Navigating Data Through a Binding Source 121
&lt;/p&gt;
&lt;p&gt;
Manipulating Data Through a Binding Source 122
&lt;/p&gt;
&lt;p&gt;
Using a Binding Source as a Data Storage Container 124
&lt;/p&gt;
&lt;p&gt;
Filling a Binding Source with a Data Reader 126
&lt;/p&gt;
&lt;p&gt;
Sorting, Searching, and Filtering Presented Data with a Binding Source 128
&lt;/p&gt;
&lt;p&gt;
Monitoring the Data with Events 131
&lt;/p&gt;
&lt;p&gt;
Restricting Changes to the Data 133
&lt;/p&gt;
&lt;p&gt;
Underneath the Covers of Data Binding for Complex Types 134
&lt;/p&gt;
&lt;p&gt;
Binding an Image Column to a PictureBox Control 141
&lt;/p&gt;
&lt;p&gt;
Binding a DateTime Column to a DateTimePicker 142
&lt;/p&gt;
&lt;p&gt;
Binding a DateTime Column to a TextBox 144
&lt;/p&gt;
&lt;p&gt;
Binding a Numeric Column to a TextBox 145
&lt;/p&gt;
&lt;p&gt;
Automatic Formatting and Parsing Summary 147
&lt;/p&gt;
&lt;p&gt;
Going Beyond Built-In Type Conversion with Binding Events 148
&lt;/p&gt;
&lt;p&gt;
Handling the Format Event 154
&lt;/p&gt;
&lt;p&gt;
Handling the Parse Event 156
&lt;/p&gt;
&lt;p&gt;
Completing the Editing Process 157
&lt;/p&gt;
&lt;p&gt;
Making the User’s Life Easier with AutoComplete 160
&lt;/p&gt;
&lt;p&gt;
Data Binding Lifecycle 162
&lt;/p&gt;
&lt;p&gt;
Smarter Child-Parent Data Binding 163
&lt;/p&gt;
&lt;p&gt;
Binding to Multiple Copies of Data 165
&lt;/p&gt;
&lt;p&gt;
Updating Parent Data-Bound Controls from Child Data-Bound Controls 168
&lt;/p&gt;
&lt;p&gt;
Synchronizing Many-to-Many Related Collections 172
&lt;/p&gt;
&lt;p&gt;
Where Are We? 176
&lt;/p&gt;
&lt;h3&gt;Chapter 5: Generating Bound Controls with the Visual Studio Designer 177
&lt;/h3&gt;
&lt;p&gt;
Working with the Data Sources Window 177
&lt;/p&gt;
&lt;p&gt;
Adding Data Sources to a Project 179
&lt;/p&gt;
&lt;p&gt;
Choosing the Type of Data Source 180
&lt;/p&gt;
&lt;p&gt;
Adding a Database Data Source 181
&lt;/p&gt;
&lt;p&gt;
Adding a Web Service Data Source 185
&lt;/p&gt;
&lt;p&gt;
Adding an Object Data Source 186
&lt;/p&gt;
&lt;p&gt;
Generating Bound Controls from Data Sources 189
&lt;/p&gt;
&lt;p&gt;
Selecting the Bound Control Type 196
&lt;/p&gt;
&lt;p&gt;
Customizing the Bound Control Types 196
&lt;/p&gt;
&lt;p&gt;
Binding Existing Controls to Data Sources 199
&lt;/p&gt;
&lt;p&gt;
Behind the Scenes: Designer Code and Data Sources Files 202
&lt;/p&gt;
&lt;p&gt;
Other Designer Data-Binding Code Generation 205
&lt;/p&gt;
&lt;p&gt;
Setting Control Data Binding Through the Properties Window 206
&lt;/p&gt;
&lt;p&gt;
Generating Data Bindings with Smart Tags 210
&lt;/p&gt;
&lt;p&gt;
Generating Master-Details Data-Bound Controls with the Designer 214
&lt;/p&gt;
&lt;p&gt;
Where Are We? 216
&lt;/p&gt;
&lt;h3&gt;Chapter 6: Presenting Data with the DataGridView Control 217
&lt;/h3&gt;
&lt;p&gt;
DataGridView Overview 218
&lt;/p&gt;
&lt;p&gt;
Basic Data Binding with the DataGridView 219
&lt;/p&gt;
&lt;p&gt;
Controlling Modifications to Data in the Grid 221
&lt;/p&gt;
&lt;p&gt;
Programmatic DataGridView Construction 222
&lt;/p&gt;
&lt;p&gt;
Custom Column Content with Unbound Columns 226
&lt;/p&gt;
&lt;p&gt;
Displaying Computed Data in Virtual Mode 233
&lt;/p&gt;
&lt;p&gt;
Using the Built-In Column Types 241
&lt;/p&gt;
&lt;p&gt;
Built-In Header Cells 255
&lt;/p&gt;
&lt;p&gt;
Handling Grid Data Edits 256
&lt;/p&gt;
&lt;p&gt;
Automatic Column Sizing 259
&lt;/p&gt;
&lt;p&gt;
Column and Row Freezing 262
&lt;/p&gt;
&lt;p&gt;
Using the Designer to Define Grids 263
&lt;/p&gt;
&lt;p&gt;
Column Reordering 266
&lt;/p&gt;
&lt;p&gt;
Defining Custom Column and Cell Types 269
&lt;/p&gt;
&lt;p&gt;
Utilizing Cell-Oriented Grid Features 277
&lt;/p&gt;
&lt;p&gt;
Formatting with Styles 281
&lt;/p&gt;
&lt;p&gt;
Where Are We? 284
&lt;/p&gt;
&lt;h3&gt;Chapter 7: Understanding Data-Binding Interfaces 285
&lt;/h3&gt;
&lt;p&gt;
What Does Data Binding Have to Do with Interfaces? 286
&lt;/p&gt;
&lt;p&gt;
The IEnumerable and IEnumerator Interfaces: Supporting Iteration Through Collections
289
&lt;/p&gt;
&lt;p&gt;
The ICollection Interface: Controlling Access to a Collection 295
&lt;/p&gt;
&lt;p&gt;
The IList Interface: Enabling Data Binding 298
&lt;/p&gt;
&lt;p&gt;
The IListSource Interface: Exposing Collections of Collections 303
&lt;/p&gt;
&lt;p&gt;
Property Descriptors: Allowing Dynamic Data Item Information Discovery 305
&lt;/p&gt;
&lt;p&gt;
The ITypedList Interface: Exposing Data-Binding Properties 307
&lt;/p&gt;
&lt;p&gt;
The IBindingList Interface: Providing Rich Binding Support 310
&lt;/p&gt;
&lt;p&gt;
The IBindingListView Interface: Supporting Advanced Sorting and Filtering 323
&lt;/p&gt;
&lt;p&gt;
The ICancelAddNew Interface: Supporting Transactional Inserts in a Collection 325
&lt;/p&gt;
&lt;p&gt;
The IRaiseItemChangedEvents Interface: Providing Item Modification Notifications on
Collections 327
&lt;/p&gt;
&lt;p&gt;
The IEditableObject Interface: Supporting Transactional Item Modifications 328
&lt;/p&gt;
&lt;p&gt;
The INotifyPropertyChanged Interface: Publishing Item Change Notifications 329
&lt;/p&gt;
&lt;p&gt;
The ICustomTypeDescriptor Interface: Exposing Custom Type Information 332
&lt;/p&gt;
&lt;p&gt;
The ISupportInitialize Interface: Supporting Designer Initialization 334
&lt;/p&gt;
&lt;p&gt;
The IDataErrorInfo Interface: Providing Error Information 330
&lt;/p&gt;
&lt;p&gt;
The ISupportInitializeNotification Interface: Supporting Interdependent Component
Initialization 337
&lt;/p&gt;
&lt;p&gt;
The ICurrencyManagerProvider Interface: Exposing a Data Container’s CurrencyManager
341
&lt;/p&gt;
&lt;p&gt;
Where Are We? 341
&lt;/p&gt;
&lt;h3&gt;Chapter 8: Implementing Custom Data-Bound Controls 343
&lt;/h3&gt;
&lt;p&gt;
Extending Framework Data-Bound Controls 344
&lt;/p&gt;
&lt;p&gt;
Creating a Grouped Column DataGridView 345
&lt;/p&gt;
&lt;p&gt;
Using Custom Controls 350
&lt;/p&gt;
&lt;p&gt;
The User Control Test Container 352
&lt;/p&gt;
&lt;p&gt;
Developing Data-Bound Container Controls 353
&lt;/p&gt;
&lt;p&gt;
Building a Filtered Grid Control 354
&lt;/p&gt;
&lt;p&gt;
Adding Data-Binding Capability to a Custom Control 357
&lt;/p&gt;
&lt;p&gt;
Supporting Designer Initialization of Data Binding 359
&lt;/p&gt;
&lt;p&gt;
Specifying Binding Properties on a Control 360
&lt;/p&gt;
&lt;p&gt;
Supporting Delayed Initialization with ISupportInitialize 362
&lt;/p&gt;
&lt;p&gt;
Dynamically Determining the Properties of a Data Source 367
&lt;/p&gt;
&lt;p&gt;
Autocompleting Input in a TextBox Control 371
&lt;/p&gt;
&lt;p&gt;
Autosizing Columns in the Grid 375
&lt;/p&gt;
&lt;p&gt;
Winding Up the Filtered Grid Example 376
&lt;/p&gt;
&lt;p&gt;
Building a Custom Data-Bound Control from Scratch 379
&lt;/p&gt;
&lt;p&gt;
Building a Data-Bound Charting Control for Decision Support 379
&lt;/p&gt;
&lt;p&gt;
Coding a Data-Bound Custom Control 384
&lt;/p&gt;
&lt;p&gt;
Adding Editing Support to a Custom Data Bound Control 391
&lt;/p&gt;
&lt;p&gt;
Where Are We? 397
&lt;/p&gt;
&lt;h3&gt;Chapter 9: Implementing Custom Data-Bound Business Objects and Collections 399
&lt;/h3&gt;
&lt;p&gt;
Defining and Working with Data-Bound Business Objects 400
&lt;/p&gt;
&lt;p&gt;
Defining and Working with Data-Bound Business Object Collections 405
&lt;/p&gt;
&lt;p&gt;
.NET Framework Generic Collection Classes 406
&lt;/p&gt;
&lt;p&gt;
The CustomBusinessObjects Example 408
&lt;/p&gt;
&lt;p&gt;
Setting the Textual Data-Binding Behavior of Custom Objects 415
&lt;/p&gt;
&lt;p&gt;
Supporting Transacted Object Editing with IEditableObject 416
&lt;/p&gt;
&lt;p&gt;
Supporting Object Edit Notifications with Property Change Events 420
&lt;/p&gt;
&lt;p&gt;
Supporting Object Edit Notifications with INotifyPropertyChanged 423
&lt;/p&gt;
&lt;p&gt;
Using BindingList&amp;lt;T&amp;gt; to Create Rich Object Collections 424
&lt;/p&gt;
&lt;p&gt;
Creating a Custom Collection Type Based on BindingList&amp;lt;T&amp;gt; 426
&lt;/p&gt;
&lt;p&gt;
Managing Transacted Additions to a Collection 439
&lt;/p&gt;
&lt;p&gt;
Raising Item Changed Events 441
&lt;/p&gt;
&lt;p&gt;
Adding IBindingListView Functionality 443
&lt;/p&gt;
&lt;p&gt;
Binding to Business Objects Through the Data Sources Window 453
&lt;/p&gt;
&lt;p&gt;
Where Are We? 455
&lt;/p&gt;
&lt;h3&gt;Chapter 10: Validating Data Input and Handling Errors 457
&lt;/h3&gt;
&lt;p&gt;
Windows Forms Validation 458
&lt;/p&gt;
&lt;p&gt;
Handling Validation Events 459
&lt;/p&gt;
&lt;p&gt;
DataGridView Validation Events 462
&lt;/p&gt;
&lt;p&gt;
Validation Up the Control Hierarchy 463
&lt;/p&gt;
&lt;p&gt;
Displaying Validation Errors with the ErrorProvider Control 464
&lt;/p&gt;
&lt;p&gt;
DataGridView Error Displays 467
&lt;/p&gt;
&lt;p&gt;
DataGridView DataError Event 468
&lt;/p&gt;
&lt;p&gt;
Controlling Validation Behavior with the AutoValidate Property 471
&lt;/p&gt;
&lt;p&gt;
Validation down the Control Hierarchy 472
&lt;/p&gt;
&lt;p&gt;
Extended Validation Controls 474
&lt;/p&gt;
&lt;p&gt;
Capturing Data Errors on Data Sets 475
&lt;/p&gt;
&lt;p&gt;
Providing Error Information from Custom Objects with IDataErrorInfo 479
&lt;/p&gt;
&lt;p&gt;
Data Concurrency Resolution 483
&lt;/p&gt;
&lt;p&gt;
Where Are We? 484
&lt;/p&gt;
&lt;h3&gt;Appendix A: Binding to Data in ASP.NET 487
&lt;/h3&gt;
&lt;p&gt;
ASP.NET Page Processing Basics 489
&lt;/p&gt;
&lt;p&gt;
Data Binding in ASP.NET 1.X 490
&lt;/p&gt;
&lt;p&gt;
Data-Binding Overview in ASP.NET 2.0 498
&lt;/p&gt;
&lt;p&gt;
Data Sources 499
&lt;/p&gt;
&lt;p&gt;
Data-Binding Expressions 508
&lt;/p&gt;
&lt;p&gt;
GridView Control 509
&lt;/p&gt;
&lt;p&gt;
DetailsView Control 512
&lt;/p&gt;
&lt;p&gt;
FormView Control 514
&lt;/p&gt;
&lt;p&gt;
Master-Details Binding 515
&lt;/p&gt;
&lt;p&gt;
Hierarchical Binding 518
&lt;/p&gt;
&lt;p&gt;
Where Are We? 519
&lt;/p&gt;
&lt;h3&gt;Appendix B: Binding Data in WinFx Applications 521
&lt;/h3&gt;
&lt;p&gt;
WinFx UI Programming and Capabilities Overview 522
&lt;/p&gt;
&lt;p&gt;
Writing a Simple WinFx Application 525
&lt;/p&gt;
&lt;p&gt;
WinFx Data Binding 101 532
&lt;/p&gt;
&lt;p&gt;
Data Contexts and Data Sources 536
&lt;/p&gt;
&lt;p&gt;
What About XAML? 537
&lt;/p&gt;
&lt;p&gt;
Binding a Collection to a Grid with Templates 541
&lt;/p&gt;
&lt;p&gt;
Control Styling in WinFx 543
&lt;/p&gt;
&lt;p&gt;
Where Are We? 545
&lt;/p&gt;
&lt;h3&gt;Appendix C: Programming Windows Forms Applications 547
&lt;/h3&gt;
&lt;p&gt;
Your First Windows Forms Data Application 548
&lt;/p&gt;
&lt;p&gt;
Creating Windows Forms Applications with Visual Studio 554
&lt;/p&gt;
&lt;p&gt;
Windows Forms Designer-Generated Code (New in 2.0) 563
&lt;/p&gt;
&lt;p&gt;
A Brief Tour of the Windows Forms Architecture 567
&lt;/p&gt;
&lt;p&gt;
The Dawn of .NET Execution—The Main Method 570
&lt;/p&gt;
&lt;p&gt;
Handling Control Events 574
&lt;/p&gt;
&lt;p&gt;
Displaying Other Forms 576
&lt;/p&gt;
&lt;p&gt;
Containing Forms Within a Parent Form 577
&lt;/p&gt;
&lt;p&gt;
Common Data Display Controls 578
&lt;/p&gt;
&lt;p&gt;
Creating a Custom User Control 586
&lt;/p&gt;
&lt;p&gt;
Laying Out Controls on a Form 589
&lt;/p&gt;
&lt;p&gt;
Setting Tab Order 596
&lt;/p&gt;
&lt;p&gt;
Command and Control of Your Windows Forms Applications (New in 2.0) 598
&lt;/p&gt;
&lt;p&gt;
Where Are We? 600
&lt;/p&gt;
&lt;h3&gt;Appendix D: Accessing Data with ADO.NET 601
&lt;/h3&gt;
&lt;p&gt;
Relational Data Access 603
&lt;/p&gt;
&lt;p&gt;
The Ubiquitous DataSet 607
&lt;/p&gt;
&lt;p&gt;
Loading Data Sets from a File 609
&lt;/p&gt;
&lt;p&gt;
Creating a Data Set Programmatically 611
&lt;/p&gt;
&lt;p&gt;
Loading Data Sets from a Database 613
&lt;/p&gt;
&lt;p&gt;
Loading a DataTable with a DataReader 619
&lt;/p&gt;
&lt;p&gt;
Master-Details DataSets 621
&lt;/p&gt;
&lt;p&gt;
Retrieving Data with Stored Procedures 623
&lt;/p&gt;
&lt;p&gt;
Updating the Database Using Data Sets 624
&lt;/p&gt;
&lt;p&gt;
Handling Concurrency 628
&lt;/p&gt;
&lt;p&gt;
Updating with Data Sets and Stored Procedures 632
&lt;/p&gt;
&lt;p&gt;
Searching Data Sets 637
&lt;/p&gt;
&lt;p&gt;
Merging Data from Multiple Data Sets 639
&lt;/p&gt;
&lt;p&gt;
Working with Data Views 641
&lt;/p&gt;
&lt;p&gt;
Working with Transactions 643
&lt;/p&gt;
&lt;p&gt;
Scoping Transactions with System.Transactions 647
&lt;/p&gt;
&lt;p&gt;
Client-Side Transactions 650
&lt;/p&gt;
&lt;p&gt;
Data Set and Data Adapter Events 651
&lt;/p&gt;
&lt;p&gt;
Reading Data into Business Objects 654
&lt;/p&gt;
&lt;p&gt;
XML Data Access 658
&lt;/p&gt;
&lt;p&gt;
Working with the XmlDataDocument Class 659
&lt;/p&gt;
&lt;p&gt;
Working with the XPathDocument Class 663
&lt;/p&gt;
&lt;p&gt;
Loading Data into an XPathDocument 664
&lt;/p&gt;
&lt;p&gt;
Querying XML Data 665
&lt;/p&gt;
&lt;p&gt;
Navigating an XML Document 667
&lt;/p&gt;
&lt;p&gt;
Where Are We? 670
&lt;/p&gt;
&lt;h4&gt;&lt;i&gt;Index 671&lt;/i&gt;
&lt;/h4&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ecf030b7-4b2f-4300-9c8e-e0c9077d5a59" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,ecf030b7-4b2f-4300-9c8e-e0c9077d5a59.aspx</comments>
      <category>.NET</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=aa54dc2b-a4e9-4bb8-97ec-a0debbbd868a</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,aa54dc2b-a4e9-4bb8-97ec-a0debbbd868a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,aa54dc2b-a4e9-4bb8-97ec-a0debbbd868a.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=aa54dc2b-a4e9-4bb8-97ec-a0debbbd868a</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a talk on data binding at the Sarasota FL .NEt Users Group last night. Had
a great time, and it was especially fun to present this topic this time since it was
the first time presenting on data binding since my book came out. Gave away a couple
copies. It was also great to go have some beers with the group members afterwards,
including fellow MVPs <a href="http://www.vbnetexpert.com/">Stan Schultes</a> and <a href="http://codebetter.com/blogs/david.hayden/default.aspx">David
Hayden</a>.
</p>
        <p>
You can grab the slides and demos here:  <a href="http://www.softinsight.com/downloads/INETA/DataBindingwithWindowsForms2.0.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/INETA/WindowsFormsDataBinding_Jan06.zip">Demos</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=aa54dc2b-a4e9-4bb8-97ec-a0debbbd868a" />
      </body>
      <title>Data Binding with Windows Forms 2.0 Talk in Sarasota last night</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,aa54dc2b-a4e9-4bb8-97ec-a0debbbd868a.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/01/18/DataBindingWithWindowsForms20TalkInSarasotaLastNight.aspx</link>
      <pubDate>Wed, 18 Jan 2006 14:16:15 GMT</pubDate>
      <description>&lt;p&gt;
I gave a talk on data binding at the Sarasota FL .NEt Users Group last night. Had
a great time, and it was especially fun to present this topic this time since it was
the first time presenting on data binding since my book came out. Gave away a couple
copies. It was also great to go have some beers with the group members afterwards,
including fellow MVPs &lt;a href="http://www.vbnetexpert.com/"&gt;Stan Schultes&lt;/a&gt; and &lt;a href="http://codebetter.com/blogs/david.hayden/default.aspx"&gt;David
Hayden&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
You can grab the slides and demos here:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/DataBindingwithWindowsForms2.0.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/WindowsFormsDataBinding_Jan06.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=aa54dc2b-a4e9-4bb8-97ec-a0debbbd868a" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,aa54dc2b-a4e9-4bb8-97ec-a0debbbd868a.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=c606c1fc-8adc-4802-b973-59f7d9d53e81</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,c606c1fc-8adc-4802-b973-59f7d9d53e81.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,c606c1fc-8adc-4802-b973-59f7d9d53e81.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=c606c1fc-8adc-4802-b973-59f7d9d53e81</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It was a very cool feeling to have a box of my books delivered to me on Friday. After
starting way too early on it and rewriting many of the chapters multiple times as
the capabilities evolved in Visual Studio 2005 and .NET 2.0, it felt very good to
finish the writing a couple months ago. But having the finished product show up on
my doorstep was very cool.
</p>
        <p>
So stop reading this and <a href="http://www.amazon.com/gp/product/032126892X/qid=1124482085/sr=11-1/ref=sr_11_1/102-9037627-4093720?n=283155">go
buy one</a> dammit! :)
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=c606c1fc-8adc-4802-b973-59f7d9d53e81" />
      </body>
      <title>Data Binding with Windows Forms 2.0 is out!</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,c606c1fc-8adc-4802-b973-59f7d9d53e81.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/01/18/DataBindingWithWindowsForms20IsOut.aspx</link>
      <pubDate>Wed, 18 Jan 2006 14:10:01 GMT</pubDate>
      <description>&lt;p&gt;
It was a very cool feeling to have a box of my books delivered to me on Friday. After
starting way too early on it and rewriting many of the chapters multiple times as
the capabilities evolved in Visual Studio 2005 and .NET 2.0, it felt very good to
finish the writing a couple months ago. But having the finished product show up on
my doorstep was very cool.
&lt;/p&gt;
&lt;p&gt;
So stop reading this and &lt;a href="http://www.amazon.com/gp/product/032126892X/qid=1124482085/sr=11-1/ref=sr_11_1/102-9037627-4093720?n=283155"&gt;go
buy one&lt;/a&gt; dammit! :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=c606c1fc-8adc-4802-b973-59f7d9d53e81" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,c606c1fc-8adc-4802-b973-59f7d9d53e81.aspx</comments>
      <category>.NET</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=2757c885-e786-401f-80dc-f4d271f3f1bf</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,2757c885-e786-401f-80dc-f4d271f3f1bf.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,2757c885-e786-401f-80dc-f4d271f3f1bf.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=2757c885-e786-401f-80dc-f4d271f3f1bf</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I co-presented the Smart Client session at the DC Launch event yesterday at the Washington
Convention Center with Marc Schweigert, a Microsoft Developer Evangelist for the Federal
Sector. We covered a lot of good material on Windows Forms 2.0 capabilities including
data binding and ClickOnce, two topics close to my heart since I have written/am writing
books on them. I also spent most of the day in the Ask the Experts booth along with
other local DC area experts like <a href="http://codebetter.com/blogs/sahil.malik/">Sahil
Malik</a>, Randy Hayes, <a href="http://blogs.msdn.com/gduthie/default.aspx">G. Andrew
Duthie</a>, <a href="http://dotnetjunkies.com/WebLog/darrell.norton/">Darrell Norton</a>, <a href="http://weblogs.asp.net/jcogley/">Jonathan
Cogley </a>and <a href="http://weblogs.asp.net/vlele/">Vishwas Lele</a>. Besides being
a great opportunity to catch up with all these guys and exchange ideas, it was a great
day talking to developers from the area and seeing how much enthusiasm there is around
the availability of VS 2005 and .NET 2.0. Most of the people there had spent little
to no time looking at the new stuff, so there was the usual "wow!" reaction when they
saw all the great features and capabilities that are now available to them. 
</p>
        <p>
I think we ended up with over 2000 attendees at the event, with about a thousand or
so sticking around to the bitter end for our session, which was last up at 4:30-5:45.
</p>
        <p>
The folks at Microsoft that put together the event (Darryl Schaffer in particular)
did a great job organizing and running the event. 
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=2757c885-e786-401f-80dc-f4d271f3f1bf" />
      </body>
      <title>VS 2005 DC Launch Event</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,2757c885-e786-401f-80dc-f4d271f3f1bf.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/01/12/VS2005DCLaunchEvent.aspx</link>
      <pubDate>Thu, 12 Jan 2006 20:47:01 GMT</pubDate>
      <description>&lt;p&gt;
I co-presented the Smart Client session at the DC Launch event yesterday at the Washington
Convention Center with Marc Schweigert, a Microsoft Developer Evangelist for the Federal
Sector. We covered a lot of good material on Windows Forms 2.0 capabilities including
data binding and ClickOnce, two topics close to my heart since I have written/am writing
books on them. I also spent most of the day in the Ask the Experts booth along with
other local DC area experts like &lt;a href="http://codebetter.com/blogs/sahil.malik/"&gt;Sahil
Malik&lt;/a&gt;, Randy Hayes, &lt;a href="http://blogs.msdn.com/gduthie/default.aspx"&gt;G. Andrew
Duthie&lt;/a&gt;, &lt;a href="http://dotnetjunkies.com/WebLog/darrell.norton/"&gt;Darrell Norton&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/jcogley/"&gt;Jonathan
Cogley &lt;/a&gt;and &lt;a href="http://weblogs.asp.net/vlele/"&gt;Vishwas Lele&lt;/a&gt;. Besides being
a great opportunity to catch up with all these guys and exchange ideas, it was a great
day talking to developers from the area and seeing how much enthusiasm there is around
the availability of VS 2005 and .NET 2.0. Most of the people there had spent little
to no time looking at the new stuff, so there was the usual "wow!" reaction when they
saw all the great features and capabilities that are now available to them. 
&lt;/p&gt;
&lt;p&gt;
I think we ended up with over 2000 attendees at the event, with about a thousand or
so sticking around to the bitter end for our session, which was last up at 4:30-5:45.
&lt;/p&gt;
&lt;p&gt;
The folks at Microsoft that put together the event (Darryl Schaffer in particular)
did a great job organizing and running the event. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=2757c885-e786-401f-80dc-f4d271f3f1bf" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,2757c885-e786-401f-80dc-f4d271f3f1bf.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=00af11e8-c4f9-4b00-8069-a88235deac84</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,00af11e8-c4f9-4b00-8069-a88235deac84.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,00af11e8-c4f9-4b00-8069-a88235deac84.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=00af11e8-c4f9-4b00-8069-a88235deac84</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I posted all the sample code for my book Data Binding with Windows Forms 2.0 on the
book Web site at <a href="http://www.softinsight.com/databindingbook">http://www.softinsight.com/databindingbook</a>.
The samples are available in both C# and VB, even though all the code in the book
is in C#. The book should be hitting the shelves very soon and is already selling
well on Amazon.
</p>
        <p>
I also posted instructions for running the samples if you do not have a non-default
instance of SQL Server or don't have Northwind on your machine yet, also how to run
the samples with SQL Server 2005 Express, Visual C# 2005 Express and Visual Basic
2005 Express.
</p>
        <p>
Happy Data Binding!
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=00af11e8-c4f9-4b00-8069-a88235deac84" />
      </body>
      <title>Data Binding with Windows Forms 2.0 Sample Code Posted</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,00af11e8-c4f9-4b00-8069-a88235deac84.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2006/01/05/DataBindingWithWindowsForms20SampleCodePosted.aspx</link>
      <pubDate>Thu, 05 Jan 2006 15:06:29 GMT</pubDate>
      <description>&lt;p&gt;
I posted all the sample code for my book Data Binding with Windows Forms 2.0 on the
book Web site at &lt;a href="http://www.softinsight.com/databindingbook"&gt;http://www.softinsight.com/databindingbook&lt;/a&gt;.
The samples are available in both C# and VB, even though all the code in the book
is in C#. The book should be hitting the shelves very soon and is already selling
well on Amazon.
&lt;/p&gt;
&lt;p&gt;
I also posted instructions for running the samples if you do not have a non-default
instance of SQL Server or don't have Northwind on your machine yet, also how to run
the samples with SQL Server 2005 Express, Visual C# 2005 Express and Visual Basic
2005 Express.
&lt;/p&gt;
&lt;p&gt;
Happy Data Binding!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=00af11e8-c4f9-4b00-8069-a88235deac84" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,00af11e8-c4f9-4b00-8069-a88235deac84.aspx</comments>
      <category>.NET</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=d5dccf90-32a4-41e0-88a2-12e8898e6224</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,d5dccf90-32a4-41e0-88a2-12e8898e6224.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,d5dccf90-32a4-41e0-88a2-12e8898e6224.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=d5dccf90-32a4-41e0-88a2-12e8898e6224</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A common requirement and question that is very easy to solve with the DataGrid is
the need to have a column or columns in a grid that contain a drop down list of lookup
values from a related table. For example, in Northwind, we have the Products table
with a foreign key column SupplierID that relates the to Suppliers table. The values
in the Suppliers table could be treated as a list of lookup values for editing the
supplier associated with a product:
</p>
        <p>
          <img alt="Application image" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/comboapp.png" align="baseline" border="0" />
        </p>
        <p>
When a supplier is selected from the drop down list, it should set the SupplierID
column value for that row in the products table. This is very easy to achieve through
the Windows Forms designer and the smart tag for a DataGridView control. 
</p>
        <p>
Do the following to try it out:
</p>
        <p>
1. Create a Windows Forms Project.<br />
2. Add a data source to a data set that contains Products and Suppliers tables from
the Northwind database. This could be any kind of Data Source (Database, Object, Web
service), but for simplicity for trying out the designer, just use a database one
which adds the typed data set into the Windows Forms project. Products is the table
of data we will display in the grid, and Suppliers is the lookup table related through
a foreign key column in the Products table that we want to display as a combo box
of selectable values in the grid.<br />
3. Drag and drop Products from the Data Sources window onto the form. This will generate
the grid, a data set instance, a table adapter to fill it, a BindingSource component
hooked up to the data set and the Products table within it, a grid hooked up to the
products binding source, and a binding navigator hooked up to the binding source.<br />
4. Click on the grid smart tag (little triangle on upper right border of control).<br />
5. Select Dock in Parent Container.<br />
6. Select Edit Columns.<br />
7. Select the SupplierID column in the list on the left.<br />
8. Select the ColumnType property and set it to DataGridViewComboBoxColumn.<br />
9. Select the DataSource property and navigate down through the data source tree through
Other Data Sources &gt; Project Data Sources &gt; NorthwindDataSet &gt; Suppliers
table.
</p>
        <p>
          <img alt="data sources property editor" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/datasourcespropertyeditor.png" align="baseline" border="0" />
          <br />
10. Select the DisplayMember property and select CompanyName.<br />
11. Select the ValueMember property and select SupplierID.<br />
12. Click OK to close the Edit Columns dialog.<br />
13. Run the app and observe that you get the drop down list of suppliers. Selecting
a supplier actually changes the SupplierID column value for that row in the products
table to the appropriate foreign key value.
</p>
        <p>
You can download a completed sample that was generated with these steps <a href="http://www.softinsight.com/downloads/ComboColumnInGrid.zip">here</a>.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=d5dccf90-32a4-41e0-88a2-12e8898e6224" />
      </body>
      <title>Adding a Drop-Down List (ComboBox) Column of Lookup Values in a DataGridView</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,d5dccf90-32a4-41e0-88a2-12e8898e6224.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/12/01/AddingADropDownListComboBoxColumnOfLookupValuesInADataGridView.aspx</link>
      <pubDate>Thu, 01 Dec 2005 15:05:10 GMT</pubDate>
      <description>&lt;p&gt;
A common requirement and question that is very easy to solve with the DataGrid is
the need to have a column or columns in a grid that contain a drop down list of lookup
values from a related table. For example, in Northwind, we have the Products table
with a foreign key column SupplierID that relates the to Suppliers table. The values
in the Suppliers table could be treated as a list of lookup values for editing the
supplier associated with a product:
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Application image" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/comboapp.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
When a supplier is selected from the drop down list, it should set the SupplierID
column value for that row in the products table. This is very easy to achieve through
the Windows Forms designer and the smart tag for a DataGridView control. 
&lt;/p&gt;
&lt;p&gt;
Do the following to try it out:
&lt;/p&gt;
&lt;p&gt;
1. Create a Windows Forms Project.&lt;br&gt;
2. Add a data source to a data set that contains Products and Suppliers tables from
the Northwind database. This could be any kind of Data Source (Database, Object, Web
service), but for simplicity for trying out the designer, just use a database one
which adds the typed data set into the Windows Forms project. Products is the table
of data we will display in the grid, and Suppliers is the lookup table related through
a foreign key column in the Products table that we want to display as a combo box
of selectable values in the grid.&lt;br&gt;
3. Drag and drop Products from the Data Sources window onto the form. This will generate
the grid, a data set instance, a table adapter to fill it, a BindingSource component
hooked up to the data set and the Products table within it, a grid hooked up to the
products binding source, and a binding navigator hooked up to the binding source.&lt;br&gt;
4. Click on the grid smart tag (little triangle on upper right border of control).&lt;br&gt;
5. Select Dock in Parent Container.&lt;br&gt;
6. Select Edit Columns.&lt;br&gt;
7. Select the SupplierID column in the list on the left.&lt;br&gt;
8. Select the ColumnType property and set it to DataGridViewComboBoxColumn.&lt;br&gt;
9. Select the DataSource property and navigate down through the data source tree through
Other Data Sources &amp;gt; Project Data Sources &amp;gt; NorthwindDataSet &amp;gt; Suppliers
table.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="data sources property editor" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/datasourcespropertyeditor.png" align=baseline border=0&gt;
&lt;br&gt;
10. Select the DisplayMember property and select CompanyName.&lt;br&gt;
11. Select the ValueMember property and select SupplierID.&lt;br&gt;
12. Click OK to close the Edit Columns dialog.&lt;br&gt;
13. Run the app and observe that you get the drop down list of suppliers. Selecting
a supplier actually changes the SupplierID column value for that row in the products
table to the appropriate foreign key value.
&lt;/p&gt;
&lt;p&gt;
You can download a completed sample that was generated with these steps &lt;a href="http://www.softinsight.com/downloads/ComboColumnInGrid.zip"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=d5dccf90-32a4-41e0-88a2-12e8898e6224" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,d5dccf90-32a4-41e0-88a2-12e8898e6224.aspx</comments>
      <category>.NET</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=2d39e57c-831b-466a-a666-a0839f9eab70</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,2d39e57c-831b-466a-a666-a0839f9eab70.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,2d39e57c-831b-466a-a666-a0839f9eab70.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=2d39e57c-831b-466a-a666-a0839f9eab70</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The question came up from several attendees at my MSDN Webcast on ClickOnce yesterday:
</p>
        <p>
"Can I launch a XXX application using ClickOnce?" (fill in XXX with VB6, MFC, etc.
- non-.NET applications)
</p>
        <p>
The answer is yes, you will just have to employ a little trick.
</p>
        <p>
What you need is a simple little launcher application that IS a Windows .NET application.
So do the following:
</p>
        <ol>
          <li>
Create a new Windows Application project with VS 2005. 
</li>
          <li>
Delete the Form1 from the project.</li>
          <li>
Add the unmanaged EXE and any supporting files to the VS 2005 project, which makes
them part of this application from a ClickOnce perspective. As a result, they will
get deployed with this application to its cache folder and can be executed by this
launcher app.</li>
          <li>
Edit the Program.cs file Main method and delete the current method body (which launches
the application and the form) and replace it with code to launch the unmanaged executable.
This just requires a single line of code: Process.Start("MyUnamangedApp.exe");</li>
        </ol>
        <p>
Note: You will need to give the launcher app full trust in the ClickOnce security
settings.
</p>
        <p>
Note2: If the unmanaged app relies on ActiveX or COM objects, those need to be added
to the project as well, and you will need to add a reference to the COM DLL's to the
project to get their reg-free COM information added to the manifest. See <a href="http://msdn.microsoft.com/vbasic/default.aspx?pull=/msdnmag/issues/05/04/RegFreeCOM/default.aspx">this
article </a>for more details.
</p>
        <p>
You can <a href="http://www.softinsight.com/downloads/COAppLauncher.zip">download
a sample implementation here</a>.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=2d39e57c-831b-466a-a666-a0839f9eab70" />
      </body>
      <title>Launching unmanaged applications with ClickOnce</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,2d39e57c-831b-466a-a666-a0839f9eab70.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/30/LaunchingUnmanagedApplicationsWithClickOnce.aspx</link>
      <pubDate>Wed, 30 Nov 2005 15:29:32 GMT</pubDate>
      <description>&lt;p&gt;
The question came up from several attendees at my MSDN Webcast on ClickOnce yesterday:
&lt;/p&gt;
&lt;p&gt;
"Can I launch a XXX application using ClickOnce?" (fill in XXX with VB6, MFC, etc.
- non-.NET applications)
&lt;/p&gt;
&lt;p&gt;
The answer is yes, you will just have to employ a little trick.
&lt;/p&gt;
&lt;p&gt;
What you need is a simple little launcher application that IS a Windows .NET application.
So do the following:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Create a new Windows Application project with VS 2005. 
&lt;/li&gt;
&lt;li&gt;
Delete the Form1 from the project.&lt;/li&gt;
&lt;li&gt;
Add the unmanaged EXE and any supporting files to the VS 2005 project, which makes
them part of this application from a ClickOnce perspective. As a result, they will
get deployed with this application to its cache folder and can be executed by this
launcher app.&lt;/li&gt;
&lt;li&gt;
Edit the Program.cs file Main method and delete the current method body (which launches
the application and the form) and replace it with code to launch the unmanaged executable.
This just requires a single line of code: Process.Start("MyUnamangedApp.exe");&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Note: You will need to give the launcher app full trust in the ClickOnce security
settings.
&lt;/p&gt;
&lt;p&gt;
Note2: If the unmanaged app relies on ActiveX or COM objects, those need to be added
to the project as well, and you will need to add a reference to the COM DLL's to the
project to get their reg-free COM information added to the manifest. See &lt;a href="http://msdn.microsoft.com/vbasic/default.aspx?pull=/msdnmag/issues/05/04/RegFreeCOM/default.aspx"&gt;this
article &lt;/a&gt;for more details.
&lt;/p&gt;
&lt;p&gt;
You can &lt;a href="http://www.softinsight.com/downloads/COAppLauncher.zip"&gt;download
a sample implementation here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=2d39e57c-831b-466a-a666-a0839f9eab70" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,2d39e57c-831b-466a-a666-a0839f9eab70.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=9cc9ee60-f212-44d6-af33-dcf5279976fd</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,9cc9ee60-f212-44d6-af33-dcf5279976fd.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,9cc9ee60-f212-44d6-af33-dcf5279976fd.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=9cc9ee60-f212-44d6-af33-dcf5279976fd</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For those who attended or are interested, <a href="http://www.softinsight.com/downloads/MSDNWebcasts/ClickOnceDemos.zip">here
are the demos </a>from my MSDN Webcast on ClickOnce yesterday.
</p>
        <p>
You can find the webcast link for <a href="http://www.softinsight.com/bnoyes/ct.ashx?id=59ae0941-a088-4d69-8d9e-c48dab56bc2d&amp;url=http%3a%2f%2fwww.microsoft.com%2fevents%2fseries%2fmsdnlaunch2005.mspx%23Smart%2520Client">on-demand
viewing here</a>.
</p>
        <p>
For the demo that went awry demonstrating on-demand updates, the little mistake I
made was that I said that if you turn off automatic updates (Check for updates option
at top of Updates dialog), then you need to put in an Update location, which is true.
But what I was doing was fully qualifying the path to the deployment manifest, which
is incorrect. What you need to put is just the URL to the root folder where the deployment
manifest resides. VS will automatically append the deployment manifest file name.
So when I was putting in:
</p>
        <p>
          <a href="http://localhost/ClickOnceOnDemand/ClickOnceOnDemand.application">http://localhost/ClickOnceOnDemand/ClickOnceOnDemand.application</a>
        </p>
        <p>
I should have just been putting
</p>
        <p>
          <a href="http://localhost/ClickOnceOnDemand/">http://localhost/ClickOnceOnDemand/</a>
        </p>
        <p>
Another little tidbit I didn't mention is that you will need Full Trust for on-demand
updates, which is unfortunate because it means the app has to request full trust even
though it may not be doing anything privileged beyond on-demand updates.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=9cc9ee60-f212-44d6-af33-dcf5279976fd" />
      </body>
      <title>Demos from ClickOnce MSDN Webcast</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,9cc9ee60-f212-44d6-af33-dcf5279976fd.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/30/DemosFromClickOnceMSDNWebcast.aspx</link>
      <pubDate>Wed, 30 Nov 2005 14:31:21 GMT</pubDate>
      <description>&lt;p&gt;
For those who attended or are interested, &lt;a href="http://www.softinsight.com/downloads/MSDNWebcasts/ClickOnceDemos.zip"&gt;here
are the demos &lt;/a&gt;from my MSDN Webcast on ClickOnce yesterday.
&lt;/p&gt;
&lt;p&gt;
You can find the webcast link for &lt;a href="http://www.softinsight.com/bnoyes/ct.ashx?id=59ae0941-a088-4d69-8d9e-c48dab56bc2d&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fevents%2fseries%2fmsdnlaunch2005.mspx%23Smart%2520Client"&gt;on-demand
viewing here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
For the demo that went awry demonstrating on-demand updates, the little mistake I
made was that I said that if you turn off automatic updates (Check for updates option
at top of Updates dialog), then you need to put in an Update location, which is true.
But what I was doing was fully qualifying the path to the deployment manifest, which
is incorrect. What you need to put is just the URL to the root folder where the deployment
manifest resides. VS will automatically append the deployment manifest file name.
So when I was putting in:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://localhost/ClickOnceOnDemand/ClickOnceOnDemand.application"&gt;http://localhost/ClickOnceOnDemand/ClickOnceOnDemand.application&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I should have just been putting
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://localhost/ClickOnceOnDemand/"&gt;http://localhost/ClickOnceOnDemand/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Another little tidbit I didn't mention is that you will need Full Trust for on-demand
updates, which is unfortunate because it means the app has to request full trust even
though it may not be doing anything privileged beyond on-demand updates.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=9cc9ee60-f212-44d6-af33-dcf5279976fd" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,9cc9ee60-f212-44d6-af33-dcf5279976fd.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=37ad9ecc-7661-4f0b-8cc7-42e11b18c514</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,37ad9ecc-7661-4f0b-8cc7-42e11b18c514.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,37ad9ecc-7661-4f0b-8cc7-42e11b18c514.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=37ad9ecc-7661-4f0b-8cc7-42e11b18c514</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In previous builds of WCF (Indigo), you had to have a particular namespace included
in your config file. Specifically, instead of the default root element of:
</p>
        <p>
&lt;configuration&gt;<br />
&lt;!-- The rest of your config settings --&gt;<br />
&lt;/configuration&gt;
</p>
        <p>
You needed to have:
</p>
        <p>
&lt;configuration xmlns="<a href="http://schemas.microsoft.com/.NetConfiguration/v2.0">http://schemas.microsoft.com/.NetConfiguration/v2.0</a>"&gt;<br />
&lt;!-- The rest of your config settings --&gt;<br />
&lt;/configuration&gt;
</p>
        <p>
By doing that in previous builds, you got intellisense for the schema elements and
attributes of the &lt;system.serviceModel&gt; element, letting you discover the
right entries to get features like transactions, security, bindings and so on correctly
configured.
</p>
        <p>
When I installed the Nov CTP, I was immediately lost because my intellisense seemed
to have gone away. If you add a WinFx Service from the Web Site templates, the web.config
still has the namespace shown in the second config snippet above. But the trick is
that it is no longer needed, and in fact confuses VS on what schema elements to expose
through intellisense. The system.serviceModel schema elements are now merged with
the C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas\DotNetConfig.xsd schema
as part of the VS extenstions install, so they are there by default now in the config
file intellisense.
</p>
        <p>
Thanks to my colleague Juval Lowy for discovering this fact and giving me back my
intellicrack!
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=37ad9ecc-7661-4f0b-8cc7-42e11b18c514" />
      </body>
      <title>WCF Config file intellisense... why hath thou forsake me?</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,37ad9ecc-7661-4f0b-8cc7-42e11b18c514.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/29/WCFConfigFileIntellisenseWhyHathThouForsakeMe.aspx</link>
      <pubDate>Tue, 29 Nov 2005 20:02:24 GMT</pubDate>
      <description>&lt;p&gt;
In previous builds of WCF (Indigo), you had to have a particular namespace included
in your config file. Specifically, instead of the default root element of:
&lt;/p&gt;
&lt;p&gt;
&amp;lt;configuration&amp;gt;&lt;br&gt;
&amp;lt;!-- The rest of your config settings --&amp;gt;&lt;br&gt;
&amp;lt;/configuration&amp;gt;
&lt;/p&gt;
&lt;p&gt;
You needed to have:
&lt;/p&gt;
&lt;p&gt;
&amp;lt;configuration xmlns="&lt;a href="http://schemas.microsoft.com/.NetConfiguration/v2.0"&gt;http://schemas.microsoft.com/.NetConfiguration/v2.0&lt;/a&gt;"&amp;gt;&lt;br&gt;
&amp;lt;!-- The rest of your config settings --&amp;gt;&lt;br&gt;
&amp;lt;/configuration&amp;gt;
&lt;/p&gt;
&lt;p&gt;
By doing that in previous builds, you got intellisense for the schema elements and
attributes&amp;nbsp;of the &amp;lt;system.serviceModel&amp;gt; element, letting you discover the
right entries to get features like transactions, security, bindings and so on correctly
configured.
&lt;/p&gt;
&lt;p&gt;
When I installed the Nov CTP, I was immediately lost because my intellisense seemed
to have gone away. If you add a WinFx Service from the Web Site templates, the web.config
still has the namespace shown in the second config snippet above. But the trick is
that it is no longer needed, and in fact confuses VS on what schema elements to expose
through intellisense. The system.serviceModel schema elements are now merged with
the C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas\DotNetConfig.xsd schema
as part of the VS extenstions install, so they are there by default now in the config
file intellisense.
&lt;/p&gt;
&lt;p&gt;
Thanks to my colleague Juval Lowy for discovering this fact and giving me back my
intellicrack!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=37ad9ecc-7661-4f0b-8cc7-42e11b18c514" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,37ad9ecc-7661-4f0b-8cc7-42e11b18c514.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=59ae0941-a088-4d69-8d9e-c48dab56bc2d</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,59ae0941-a088-4d69-8d9e-c48dab56bc2d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,59ae0941-a088-4d69-8d9e-c48dab56bc2d.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=59ae0941-a088-4d69-8d9e-c48dab56bc2d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.softinsight.com/downloads/MSDNWebcasts/DataGridViewDemos.zip">Here
are the demos</a> from my MSDN Webcast today on the DataGridView control. 
</p>
        <p>
You can find the sample DataGridView chapter for my book <a href="http://searchsqlserver.techtarget.com/searchsqlserver/downloads/data_binding_proof.pdf">here</a>.
</p>
        <p>
You can view the webcast on demand through the links <a href="http://www.microsoft.com/events/series/msdnlaunch2005.mspx#Smart%20Client">here</a>.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=59ae0941-a088-4d69-8d9e-c48dab56bc2d" />
      </body>
      <title>DataGridView Webcast demos</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,59ae0941-a088-4d69-8d9e-c48dab56bc2d.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/29/DataGridViewWebcastDemos.aspx</link>
      <pubDate>Tue, 29 Nov 2005 19:44:11 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/MSDNWebcasts/DataGridViewDemos.zip"&gt;Here
are the demos&lt;/a&gt; from my MSDN Webcast today on the DataGridView control. 
&lt;/p&gt;
&lt;p&gt;
You can find the sample DataGridView chapter for my book &lt;a href="http://searchsqlserver.techtarget.com/searchsqlserver/downloads/data_binding_proof.pdf"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
You can view the webcast on demand through the links &lt;a href="http://www.microsoft.com/events/series/msdnlaunch2005.mspx#Smart%20Client"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=59ae0941-a088-4d69-8d9e-c48dab56bc2d" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,59ae0941-a088-4d69-8d9e-c48dab56bc2d.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=48ae99d3-42bc-4678-9f2b-44ef6314c6fe</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,48ae99d3-42bc-4678-9f2b-44ef6314c6fe.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,48ae99d3-42bc-4678-9f2b-44ef6314c6fe.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=48ae99d3-42bc-4678-9f2b-44ef6314c6fe</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a talk on connecting smart clients with WCF on Tuesday at Boulder .NET. Had
a good turnout desipte the proximity to the holiday and had a good time.
</p>
        <p>
The talk covered the fundamentals of connecting applications with WCF since most of
the people there had never seen anything on WCF. Then I moved into some of the specific
client concerns when using WCF, similar to my talk at VSConnections.
</p>
        <p>
You can get the slides and demos here:  <a href="http://www.softinsight.com/downloads/INETA/ConnectSmartClientApplicationswithWCF.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/INETA/ConnectingSmartClientsWithWCF.zip">Demos</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=48ae99d3-42bc-4678-9f2b-44ef6314c6fe" />
      </body>
      <title>Slides and demos from Boulder .NET</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,48ae99d3-42bc-4678-9f2b-44ef6314c6fe.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/24/SlidesAndDemosFromBoulderNET.aspx</link>
      <pubDate>Thu, 24 Nov 2005 15:24:32 GMT</pubDate>
      <description>&lt;p&gt;
I gave a talk on connecting smart clients with WCF on Tuesday at Boulder .NET. Had
a good turnout desipte the proximity to the holiday and had a good time.
&lt;/p&gt;
&lt;p&gt;
The talk covered the fundamentals of connecting applications with WCF since most of
the people there had never seen anything on WCF. Then I moved into some of the specific
client concerns when using WCF, similar to my talk at VSConnections.
&lt;/p&gt;
&lt;p&gt;
You can get the slides and demos here:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/ConnectSmartClientApplicationswithWCF.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/INETA/ConnectingSmartClientsWithWCF.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=48ae99d3-42bc-4678-9f2b-44ef6314c6fe" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,48ae99d3-42bc-4678-9f2b-44ef6314c6fe.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=f9834693-e992-4bf1-9408-1ab8d2cb518c</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,f9834693-e992-4bf1-9408-1ab8d2cb518c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,f9834693-e992-4bf1-9408-1ab8d2cb518c.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=f9834693-e992-4bf1-9408-1ab8d2cb518c</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>Interface-based Programming example employing the Factory pattern</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,f9834693-e992-4bf1-9408-1ab8d2cb518c.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/20/InterfacebasedProgrammingExampleEmployingTheFactoryPattern.aspx</link>
      <pubDate>Sun, 20 Nov 2005 16:16:02 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;When
I demonstrate the use of interface-based programming in a class, I always give a demo
of using interface-based programming combined with a factory pattern to add dynamic
behaviors to an application. This is basically a scaled down version of what the provider
model in ASP.NET 2.0 and the Enterprise Library do to allow you to externally configure
components that will be called by the framework at runtime. ASP.NET actually uses
abstract base classes instead of interfaces because they also provide some shared
implementation, but the concepts are basically the same.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;I use a simple
little example of a client that defines an IDog interface (in a separate interface
only assembly that it can share with component providers) that specifies the contract
that providers are expected to implement. I then show how to build components separately
that the client has no specific type information about, and load and invoke the behavior
defined in those components dynamically through a factory and based on the interface
definition that is the contract for how those components expose their behavior and
some configuration file entries that the factory can use to load and instantiate the
types. The client is able to do this without requiring any code modifications to accept
new components, and can even have new behaviors added at runtime without needing to
restart the application.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;I have repacked
the demo I normally give in class to:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Make it a
little cleaner&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Separate out
the factory into a generic factory in a separate assembly that could be reused for
any project&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Use the new
Settings features in the .NET 2.0 framework to enter the type information into a configuration
file instead of using a separate XML file like I used to. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;The factory
method looks like the following:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt;&lt;font color=#000000&gt; T[]
ConstructType&amp;lt;T&amp;gt;() &lt;/font&gt;&lt;span style="COLOR: blue"&gt;where&lt;/span&gt;&lt;font color=#000000&gt; T
: &lt;/font&gt;&lt;span style="COLOR: blue"&gt;class&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Refresh the config cache in case the config file has been edited at runtime&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;Settings&lt;/span&gt;&lt;font color=#000000&gt;.Default.Reload();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Load the collection of components from the string collection in config&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;StringCollection&lt;/span&gt;&lt;font color=#000000&gt; componentTypeInfoColl
= &lt;/font&gt;&lt;span style="COLOR: teal"&gt;Settings&lt;/span&gt;&lt;font color=#000000&gt;.Default.Components;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Create a list to add the components to as they are created&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;List&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;T&amp;gt;
components = &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: teal"&gt;List&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;T&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;// 
&lt;st1:place w:st="on"&gt;Loop&lt;/st1:place&gt;
through the config strings trying to create instances of the appropriate type&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt;&lt;font color=#000000&gt; (&lt;/font&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;font color=#000000&gt; componentTypeInfo &lt;/font&gt;&lt;span style="COLOR: blue"&gt;in&lt;/span&gt;&lt;font color=#000000&gt; componentTypeInfoColl)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;try&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Config entries should be in the form:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Fully.Qualified.TypeName, AssemblyName&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Split into its two parts&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;font color=#000000&gt;[]
typeInfo = componentTypeInfo.Split(&lt;/font&gt;&lt;span style="BACKGROUND: aqua; COLOR: maroon; mso-highlight: aqua"&gt;','&lt;/span&gt;&lt;font color=#000000&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Dynamic load the assembly&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;Assembly&lt;/span&gt;&lt;font color=#000000&gt; assem
= &lt;/font&gt;&lt;span style="COLOR: teal"&gt;Assembly&lt;/span&gt;&lt;font color=#000000&gt;.Load(typeInfo[1].Trim());&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Dynamic instance creation&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;T
instance = assem.CreateInstance(typeInfo[0].Trim()) &lt;/font&gt;&lt;span style="COLOR: blue"&gt;as&lt;/span&gt;&lt;font color=#000000&gt; T;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;font color=#000000&gt; (instance
!= &lt;/font&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;font color=#000000&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;components.Add(instance);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;catch&lt;/span&gt;&lt;font color=#000000&gt; {
} &lt;/font&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Just ignore invalid types&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&lt;font color=#000000&gt; components.ToArray();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;So the only
things you need to know to use this as a factory for other purposes than this demo
is that it expects the type information to be entered in the client configuration
file with an application settings section like the following:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;configuration&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;configSections&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;sectionGroup&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;applicationSettings&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;System.Configuration.ApplicationSettingsGroup,
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;section&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;DynamicFactoryLibrary.Properties.Settings&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;System.Configuration.ClientSettingsSection,
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;requirePermission&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;sectionGroup&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;configSections&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;applicationSettings&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;DynamicFactoryLibrary.Properties.Settings&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;setting&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;Components&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;serializeAs&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;Xml&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;value&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;ArrayOfString&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;&lt;font color=#000000&gt;"&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;xmlns:xsd&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;string&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;Animals.Dog,
Animals&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;string&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;!--&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;string&amp;gt;Animals.GermanShepherd,
Animals&amp;lt;/string&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;string&amp;gt;Animals2.Shitzu,
Animals2&amp;lt;/string&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;ArrayOfString&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;value&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;setting&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;DynamicFactoryLibrary.Properties.Settings&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;applicationSettings&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;configuration&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;I’m
just using a StringCollection as the type for the component type collection, so each
component that you want to add to the collection should be added to the section in
the form:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;string&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;Animals.Dog,
Animals&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;string&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;You can see
a couple of additional components commented out for dynamically adding them into the
application (even while it is running). The type information uses a standard convention
for specifying type information through a config file: specifically the fully qualified
type name of the type, followed by a comma, followed by an Assembly name to load it
from.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;You can &lt;a href="http://www.softinsight.com/downloads/InterfaceBasedProgramming.zip"&gt;grab
the whole sample here&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;To demonstrate
the example in action:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul style="MARGIN-TOP: 0in" type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;First build
the InterfaceBasedProgramming solution, which builds the interface contract assembly,
the factory library, and the client application. The default client config file has
all of the type information for available components commented out.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Open the build
output folder of the client (InterfaceBasedClient\bin\debug) and run the client by
double clicking on InterfaceBasedClient.exe.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Push the button
and observe that you get nothing because no types have been provided or plugged in
though the config file yet. Leave the client running.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Next open
the Animals solution, build it, and copy the build output (Animals.dll) from the bin\Debug
folder into the client’s bin\Debug folder.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Edit the InterfaceBasedClient.exe.config
file through an editor, and uncomment the Dog type information as shown in the snippet
of config file above, save the file.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Hit the button
in the client again, you should see a standard Dog Bark (through a message box).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Edit the config
file again, uncommenting the type information for a GermanShepherd (which is also
defined in the Animals assembly), and save.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Push the button
again and you will see that type is dynamically used from the already loaded assembly.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Go open the
Animals2 solution and build it.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Copy the Animals2.dll
from its bin\Debug folder into the bin\Debug folder for the client.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Edit the config
file for the client again to uncomment the type information for the Shitzu type, and
save.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Click the
button in the client again and you should see all three types of dogs bark.&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=f9834693-e992-4bf1-9408-1ab8d2cb518c" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,f9834693-e992-4bf1-9408-1ab8d2cb518c.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=8776ec97-355c-4a9f-b8c3-901ffd524a23</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,8776ec97-355c-4a9f-b8c3-901ffd524a23.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,8776ec97-355c-4a9f-b8c3-901ffd524a23.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=8776ec97-355c-4a9f-b8c3-901ffd524a23</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For the students from my recent class in Sweden, you can download all the demos I
did dynamically (as opposed to the ones you already have in your demos folder
and available on our site at <a href="http://www.idesign.net">www.idesign.net</a>)
from the following link:
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/Linsoft05ClassDemos.zip">http://www.softinsight.com/downloads/Linsoft05ClassDemos.zip</a>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=8776ec97-355c-4a9f-b8c3-901ffd524a23" />
      </body>
      <title>.NET Systems Programming class dynamic demos</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,8776ec97-355c-4a9f-b8c3-901ffd524a23.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/20/NETSystemsProgrammingClassDynamicDemos.aspx</link>
      <pubDate>Sun, 20 Nov 2005 15:43:04 GMT</pubDate>
      <description>&lt;p&gt;
For the students from my recent class in Sweden, you can download all the demos I
did dynamically (as opposed to the ones you already have in&amp;nbsp;your demos folder
and available on our site at &lt;a href="http://www.idesign.net"&gt;www.idesign.net&lt;/a&gt;)
from the following link:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/Linsoft05ClassDemos.zip"&gt;http://www.softinsight.com/downloads/Linsoft05ClassDemos.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=8776ec97-355c-4a9f-b8c3-901ffd524a23" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,8776ec97-355c-4a9f-b8c3-901ffd524a23.aspx</comments>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=9f288f62-c155-445f-9655-660bdd98b220</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,9f288f62-c155-445f-9655-660bdd98b220.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,9f288f62-c155-445f-9655-660bdd98b220.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=9f288f62-c155-445f-9655-660bdd98b220</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave two WCF (Indigo) talks at DevConnections today:
</p>
        <p>
Build Event Driven Applications with Indigo:   <a href="http://www.softinsight.com/bnoyes/ct.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f&amp;url=http%3a%2f%2fwww.softinsight.com%2fdownloads%2fDevConnections/BuildEventDrivenApplicationswithIndigo.pdf">Slides</a>   <a href="http://www.softinsight.com/bnoyes/ct.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f&amp;url=http%3a%2f%2fwww.softinsight.com%2fdownloads%2fDevConnections%2fEventDrivenApplicationsDemos.zip">Demos</a></p>
        <p>
Connecting Smart Client Applications with Indigo:  <a href="http://www.softinsight.com/bnoyes/ct.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f&amp;url=http%3a%2f%2fwww.softinsight.com%2fdownloads%2fDevConnections%2fConnectingSmartClientApplicationswithIndigo.pdf">Slides</a>   <a href="http://www.softinsight.com/bnoyes/ct.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f&amp;url=http%3a%2f%2fwww.softinsight.com%2fdownloads%2fDevConnections%2fConnectingSmartClientsDemos.zip">Demos</a></p>
        <p>
In the Event Driven Applications session I cover creating list based subscription
services with direct callback services in the clients, using duplex channels to set
up callbacks, and a Pub-Sub implementation that gives loosely coupled events that
I will have more information on here in the near future.
</p>
        <p>
In the smart client session, I covered client concerns with respect to channel selection,
asynchronous calls, sessions, transactions, callbacks, security, and peer-to-peer.
</p>
        <p>
Good time!
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=9f288f62-c155-445f-9655-660bdd98b220" />
      </body>
      <title>WCF Talks: Event Driven Applications and Connecting Smart Clients</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,9f288f62-c155-445f-9655-660bdd98b220.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/11/WCFTalksEventDrivenApplicationsAndConnectingSmartClients.aspx</link>
      <pubDate>Fri, 11 Nov 2005 02:41:25 GMT</pubDate>
      <description>&lt;p&gt;
I gave two WCF (Indigo) talks at DevConnections today:
&lt;/p&gt;
&lt;p&gt;
Build Event Driven Applications with Indigo:&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/bnoyes/ct.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f&amp;amp;url=http%3a%2f%2fwww.softinsight.com%2fdownloads%2fDevConnections/BuildEventDrivenApplicationswithIndigo.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/bnoyes/ct.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f&amp;amp;url=http%3a%2f%2fwww.softinsight.com%2fdownloads%2fDevConnections%2fEventDrivenApplicationsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Connecting Smart Client Applications with Indigo:&amp;nbsp; &lt;a href="http://www.softinsight.com/bnoyes/ct.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f&amp;amp;url=http%3a%2f%2fwww.softinsight.com%2fdownloads%2fDevConnections%2fConnectingSmartClientApplicationswithIndigo.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/bnoyes/ct.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f&amp;amp;url=http%3a%2f%2fwww.softinsight.com%2fdownloads%2fDevConnections%2fConnectingSmartClientsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
In the Event Driven Applications session I cover creating list based subscription
services with direct callback services in the clients, using duplex channels to set
up callbacks, and a Pub-Sub implementation that gives loosely coupled events that
I will have more information on here in the near future.
&lt;/p&gt;
&lt;p&gt;
In the smart client session, I covered client concerns with respect to channel selection,
asynchronous calls, sessions, transactions, callbacks, security, and peer-to-peer.
&lt;/p&gt;
&lt;p&gt;
Good time!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=9f288f62-c155-445f-9655-660bdd98b220" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,9f288f62-c155-445f-9655-660bdd98b220.aspx</comments>
      <category>.NET</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=70eec0be-72c8-4287-9b2d-3f75adbe1a1f</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,70eec0be-72c8-4287-9b2d-3f75adbe1a1f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,70eec0be-72c8-4287-9b2d-3f75adbe1a1f.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=70eec0be-72c8-4287-9b2d-3f75adbe1a1f</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Secure ClickOnce Demployment Talk at DevConnections yesterday</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,70eec0be-72c8-4287-9b2d-3f75adbe1a1f.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/11/SecureClickOnceDemploymentTalkAtDevConnectionsYesterday.aspx</link>
      <pubDate>Fri, 11 Nov 2005 02:33:37 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;My
second session of the day yesterday at DevConnections was on ClickOnce deployments,
and specifically the various security protections and options that ClickOnce offers
for preventing unauthorized applications from being able to run through a ClickOnce
launch.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;You can grab the
slides and demos here:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/SecureSmartClientClickOnceDeployments.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/SecureClickOnceDemos.zip"&gt;Demos&lt;o:p&gt;&lt;/o:p&gt;
&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Some of the key
takeaways from this session were the following:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;ul type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;ClickOnce provides a simple, powerful,
and easy to use mechanism for deploying smart client applications with minimal maintenance
effort and IT Admin involvement&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;ClickOnce provides runtime security
protections through the Code Access Security (CAS) infrastructure of .NET to prevent
applications launched from ClickOnce from being granted permissions to perform any
operations or access any resources that the application was not specifically allowed
to do.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;ClickOnce app default permissions
are determined by the launch URL and how it maps to built-in CAS location-based code
groups (MyComputer, LocalIntranet, Internet, TrustedSites, UntrustedSites).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;If the application manifest requests
permissions greater than those that would be granted based on the CAS location-based
code groups, permission elevation needs to occur. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;By default, permissions can be
elevated in one of two ways: user prompting or trusted publishers.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;If an application is launched
through a link to a deployment manifest that is signed by a publisher certificate
that is not in the Trusted Publishers certificate store on the client machine, the
user will be prompted by default and can accept or reject the application. If they
accept it, the permissions for that application will be elevated to whatever permissions
the application manifest has requested.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;If an application is launched
that was signed with a publisher certificate that is in the client machine's Trusted
Publishers certificate store, then no user prompting will occur and the application
permissions will be automatically elevated to whatever the application manifest requests
because it is coming from a trusted source identified implicitly by IT admin when
they installed the publisher certificate in the Trusted Publishers store.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;If
you want to prevent the user from ever being prompted and only allow applications
from trusted publishers to be launched through ClickOnce (a good idea in an enterprise
environment), then you should create the registry key discussed in the slides from
the session and set the string values to Disabled for all the zones.&lt;/span&gt;&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,70eec0be-72c8-4287-9b2d-3f75adbe1a1f.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=70acabc4-8554-43cc-8511-c2f6a2827942</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,70acabc4-8554-43cc-8511-c2f6a2827942.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,70acabc4-8554-43cc-8511-c2f6a2827942.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=70acabc4-8554-43cc-8511-c2f6a2827942</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just got finished doing my first talk here at DevConnections in Vegas and I think
it went pretty well. Great crowd, good questions, fun topic. 
</p>
        <p>
You can grab the slides and demos here: <a href="http://www.softinsight.com/downloads/DevConnections/BuildCustomDataBoundBusinessObjectsandCollections.pdf">Slides </a>  <a href="http://www.softinsight.com/downloads/DevConnections/DataBoundObjectsDemos.zip">Demos</a></p>
        <p>
The talk highlighted how to define custom objects and collections to make them suitable
for data binding, mostly for Windows Forms, but some of it is applicable to ASP.NET
as well.
</p>
        <p>
The key takeaways from the talk are:
</p>
        <ul>
          <li>
Implement INotifyPropertyChanged on any business entitity type you define that you
expect to use in data binding scenarios. This interface defines a contract for the
objects to raise PropertyChanged events whenever a property is set on the object.
It allows containing collections or bound controls to be notified when the contents
of the data object change, which helps with keeping controls synchronized in a form. 
</li>
          <li>
Use BindingList&lt;T&gt; to create strongly typed collections of objects that support
rich data binding. It provides full implementation of IList, ICollection, IEnumerable
and their generic strongly typed counterparts for whatever type parameter you provide,
and it provides a partial implementation of the IBindingList interface. The part that
it implements is firing ListChanged events when items are added or removed from the
collection. It also looks at the objects type that you provide as a type parameter,
and if it implements INotifyPropertyChanged, the collection will subscribe to the
PropertyChanged event on each object and raise ListChanged events with a change type
of PropertyChanged whenever the contents of an object in the collection change. These
features make BindingList&lt;T&gt; collections work seamlessly with data binding to
multiple controls and keeps the controls all in sync. 
</li>
          <li>
Use my BindingListView&lt;T&gt; class (in the demos and in my book) to get a generic
container that supports sorting (both IBindingList based single property sorts and
IBindingListView multi-property sorts), searching, and filtering.</li>
        </ul>
        <p>
If you were there at the end and saw the on-the-fly demo where I didn't see the saving
behavior that I thought I had just implemented, I tracked down the problem. the changes
were actually being saved. It was just the way I hooked up the data binding I wasn't
seeing those changes. 
</p>
        <p>
In the demo, I used the data sources window to generate a Details view (control collection)
bound to a collection of Album data. I changed one of the controls in the collection
which was bound to a GenreID property on the Album objects to a ComboBox. I then used
the Data Sources window to add data binidng to a Genre object collection to populate
the list of Genres in the combo box. This sets up the ComboBox to have its contents
determined by the Genre collection, but its SelectedValue property is bound to the
GenreID property on the current item in the Album collection - generally exactly what
you want to be able to edit a property on one object collection item through a lookup
list of values in another collection of objects. The problem was that after I selected
a new value in the combo box and saved the changes, then restarted the app, I wasn't
seeing the modified value set for the Album I was viewing in the other controls.
</p>
        <p>
It turns out the problem was just the order that I did the initial binding of the
control collection and the combobox BindingSources. In the form load I had added the
following two lines of code to bind the control collection and the combo box binding
sources:
</p>
        <p>
albumBindingSource.DataSource = <font color="#008080">Album</font><font size="4"><font size="2">.GetAlbums();<br />
genreBindingSource.DataSource = <font color="#008080">Genre</font>.GetGenres();</font></font></p>
        <p>
          <font size="4">
            <font size="2">The problem is that when you set the DataSource, that
is when it intializes the bound controls. So I was initializing the data bindings
for all of the controls based on the album data, then intializing the combo box of
Genres with a new set of data. That set the SelectedIndex of the ComboBox back to
zero, so I wasn't seeing the actual value of the Genre for the current Album, I was
just seeing the first Genre value in the Genre collection. The fix is simply to do
the initial binding in the reverse order:</font>
          </font>
        </p>
        <font size="4">
          <font size="2">
            <p>
              <font size="4">
                <font size="2">genreBindingSource.DataSource = <font color="#008080">Genre</font>.GetGenres();<br />
albumBindingSource.DataSource = <font color="#008080">Album</font><font size="4"><font size="2">.GetAlbums();</font></font></font>
              </font>
            </p>
            <p>
Then it works as expected.
</p>
            <p>
Some resources I mentioned in the talk, as well as some additional ones I gave related
to after-session questions:
</p>
            <p>
My Book: Data Binding in Windows Forms 2.0, Addison Wesley, January 2006<br /><a href="http://www.amazon.com/exec/obidos/ASIN/032126892X/qid%3D1124482085/sr%3D11-1/ref%3Dsr%5F11%5F1/102-3039504-6850510">http://www.amazon.com/exec/obidos/ASIN/032126892X/qid%3D1124482085/sr%3D11-1/ref%3Dsr%5F11%5F1/102-3039504-6850510</a><br />
Rocky Lhotka binding refresh problem post:<br /><a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=d8306469-7e76-4734-9811-777498808b85">http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=d8306469-7e76-4734-9811-777498808b85</a><br />
Rocky Lhotka article on binding to business objects: Windows Forms Object Data Binding
in .NET 2.0, 15seconds.com, <a href="http://www.15seconds.com/issue/040614.htm">http://www.15seconds.com/issue/040614.htm</a><br />
My recent article on The Server Side .NET: Build a Data Access Layer with the Visual
Studio DataSet Designer, The Server Side .NET, Oct 2005, <a href="http://www.theserverside.net/articles/showarticle.tss?id=DataSetDesigner">http://www.theserverside.net/articles/showarticle.tss?id=DataSetDesigner</a><br />
My recent article in CoDe magazine: Tackle Complex Data Binding in Windows Forms 2.0,
CoDe Magazine, July/Aug 2005, <a href="http://www.code-magazine.com/Article.aspx?quickid=0507051">http://www.code-magazine.com/Article.aspx?quickid=0507051</a><font size="4"><font size="2"><font size="4"><font size="2"></font></font></font></font></p>
          </font>
        </font>
        <p>
          <span style="FONT-SIZE: 111%; COLOR: #ffff66">
            <font color="#000000">Enjoy!</font>
          </span>
        </p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=70acabc4-8554-43cc-8511-c2f6a2827942" />
      </body>
      <title>Build Custom Data Bound Business Objects and Collections Talk at DevConnections this morning</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,70acabc4-8554-43cc-8511-c2f6a2827942.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/09/BuildCustomDataBoundBusinessObjectsAndCollectionsTalkAtDevConnectionsThisMorning.aspx</link>
      <pubDate>Wed, 09 Nov 2005 20:26:45 GMT</pubDate>
      <description>&lt;p&gt;
I just got finished doing my first talk here at DevConnections in Vegas and I think
it went pretty well. Great crowd, good questions, fun topic. 
&lt;/p&gt;
&lt;p&gt;
You can grab the slides and demos here: &lt;a href="http://www.softinsight.com/downloads/DevConnections/BuildCustomDataBoundBusinessObjectsandCollections.pdf"&gt;Slides&amp;nbsp;&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/DataBoundObjectsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The talk highlighted how to define custom objects and collections to make them suitable
for data binding, mostly for Windows Forms, but some of it is applicable to ASP.NET
as well.
&lt;/p&gt;
&lt;p&gt;
The key takeaways from the talk are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Implement INotifyPropertyChanged on any business entitity type you define that you
expect to use in data binding scenarios. This interface defines a contract for the
objects to raise PropertyChanged events whenever a property is set on the object.
It allows containing collections or bound controls to be notified when the contents
of the data object change, which helps with keeping controls synchronized in a form. 
&lt;li&gt;
Use BindingList&amp;lt;T&amp;gt; to create strongly typed collections of objects that support
rich data binding. It provides full implementation of IList, ICollection, IEnumerable
and their generic strongly typed counterparts for whatever type parameter you provide,
and it provides a partial implementation of the IBindingList interface. The part that
it implements is firing ListChanged events when items are added or removed from the
collection. It also looks at the objects type that you provide as a type parameter,
and if it implements INotifyPropertyChanged, the collection will subscribe to the
PropertyChanged event on each object and raise ListChanged events with a change type
of PropertyChanged whenever the contents of an object in the collection change. These
features make BindingList&amp;lt;T&amp;gt; collections work seamlessly with data binding to
multiple controls and keeps the controls all in sync. 
&lt;li&gt;
Use my BindingListView&amp;lt;T&amp;gt; class (in the demos and in my book) to get a generic
container that supports sorting (both IBindingList based single property sorts and
IBindingListView multi-property sorts), searching, and filtering.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you were there at the end and saw the on-the-fly demo where I didn't see the saving
behavior that I thought I had just implemented, I tracked down the problem. the changes
were actually being saved. It was just the way I hooked up the data binding I wasn't
seeing those changes. 
&lt;/p&gt;
&lt;p&gt;
In the demo, I used the data sources window to generate a Details view (control collection)
bound to a collection of Album data. I changed one of the controls in the collection
which was bound to a GenreID property on the Album objects to a ComboBox. I then used
the Data Sources window to add data binidng to a Genre object collection to populate
the list of Genres in the combo box. This sets up the ComboBox to have its contents
determined by the Genre collection, but its SelectedValue property is bound to the
GenreID property on the current item in the Album collection - generally exactly what
you want to be able to edit a property on one object collection item through a lookup
list of values in another collection of objects. The problem was that after I selected
a new value in the combo box and saved the changes, then restarted the app, I wasn't
seeing the modified value set for the Album I was viewing in the other controls.
&lt;/p&gt;
&lt;p&gt;
It turns out the problem was just the order that I did the initial binding of the
control collection and the combobox BindingSources. In the form load I had added the
following two lines of code to bind the control collection and the combo box binding
sources:
&lt;/p&gt;
&lt;p&gt;
albumBindingSource.DataSource = &lt;font color=#008080&gt;Album&lt;/font&gt;&lt;font size=4&gt;&lt;font size=2&gt;.GetAlbums();&lt;br&gt;
genreBindingSource.DataSource = &lt;font color=#008080&gt;Genre&lt;/font&gt;.GetGenres();&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=4&gt;&lt;font size=2&gt;The problem is that when you set the DataSource, that is
when it intializes the bound controls. So I was initializing the data bindings for
all of the controls based on the album data, then intializing the combo box of Genres
with a new set of data. That set the SelectedIndex of the ComboBox back to zero, so
I wasn't seeing the actual value of the Genre for the current Album, I was just seeing
the first Genre value in the Genre collection. The fix is simply to do the initial
binding in the reverse order:&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;font size=4&gt;&lt;font size=2&gt; 
&lt;p&gt;
&lt;font size=4&gt;&lt;font size=2&gt;genreBindingSource.DataSource = &lt;font color=#008080&gt;Genre&lt;/font&gt;.GetGenres();&lt;br&gt;
albumBindingSource.DataSource = &lt;font color=#008080&gt;Album&lt;/font&gt;&lt;font size=4&gt;&lt;font size=2&gt;.GetAlbums();&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Then it works as expected.
&lt;/p&gt;
&lt;p&gt;
Some resources I mentioned in the talk, as well as some additional ones I gave related
to after-session questions:
&lt;/p&gt;
&lt;p&gt;
My Book: Data Binding in Windows Forms 2.0, Addison Wesley, January 2006&lt;br&gt;
&lt;a href="http://www.amazon.com/exec/obidos/ASIN/032126892X/qid%3D1124482085/sr%3D11-1/ref%3Dsr%5F11%5F1/102-3039504-6850510"&gt;http://www.amazon.com/exec/obidos/ASIN/032126892X/qid%3D1124482085/sr%3D11-1/ref%3Dsr%5F11%5F1/102-3039504-6850510&lt;/a&gt; 
&lt;br&gt;
Rocky Lhotka binding refresh problem post:&lt;br&gt;
&lt;a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=d8306469-7e76-4734-9811-777498808b85"&gt;http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=d8306469-7e76-4734-9811-777498808b85&lt;/a&gt; 
&lt;br&gt;
Rocky Lhotka article on binding to business objects: Windows Forms Object Data Binding
in .NET 2.0, 15seconds.com, &lt;a href="http://www.15seconds.com/issue/040614.htm"&gt;http://www.15seconds.com/issue/040614.htm&lt;/a&gt; 
&lt;br&gt;
My recent article on The Server Side .NET: Build a Data Access Layer with the Visual
Studio DataSet Designer, The Server Side .NET, Oct 2005, &lt;a href="http://www.theserverside.net/articles/showarticle.tss?id=DataSetDesigner"&gt;http://www.theserverside.net/articles/showarticle.tss?id=DataSetDesigner&lt;/a&gt; 
&lt;br&gt;
My recent article in CoDe magazine: Tackle Complex Data Binding in Windows Forms 2.0,
CoDe Magazine, July/Aug 2005, &lt;a href="http://www.code-magazine.com/Article.aspx?quickid=0507051"&gt;http://www.code-magazine.com/Article.aspx?quickid=0507051&lt;/a&gt; &lt;font size=4&gt;&lt;font size=2&gt;&lt;font size=4&gt;&lt;font size=2&gt;
&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&gt;&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 111%; COLOR: #ffff66"&gt;&lt;font color=#000000&gt;Enjoy!&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&gt;&gt;&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=70acabc4-8554-43cc-8511-c2f6a2827942" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,70acabc4-8554-43cc-8511-c2f6a2827942.aspx</comments>
      <category>.NET</category>
      <category>Data Binding</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=352749cf-f624-4103-9a0a-f9176b92b1d0</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,352749cf-f624-4103-9a0a-f9176b92b1d0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,352749cf-f624-4103-9a0a-f9176b92b1d0.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=352749cf-f624-4103-9a0a-f9176b92b1d0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.dasblonde.net/PermaLink.aspx?guid=d27b43d3-bbcb-4611-96a0-89cdea5dee21">Great
post </a>by my colleague <a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=3&amp;tabid=5#bustamante">Michele</a> from
IDesign following a discussion we had on ClickOnce permissions and what users are
allowed to do. Check it out!<img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=352749cf-f624-4103-9a0a-f9176b92b1d0" /></body>
      <title>ClickOnce user privilege requirements discussion</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,352749cf-f624-4103-9a0a-f9176b92b1d0.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/09/ClickOnceUserPrivilegeRequirementsDiscussion.aspx</link>
      <pubDate>Wed, 09 Nov 2005 04:26:54 GMT</pubDate>
      <description>&lt;a href="http://www.dasblonde.net/PermaLink.aspx?guid=d27b43d3-bbcb-4611-96a0-89cdea5dee21"&gt;Great
post &lt;/a&gt;by my colleague &lt;a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=3&amp;amp;tabid=5#bustamante"&gt;Michele&lt;/a&gt; from
IDesign following a discussion we had on ClickOnce permissions and what users are
allowed to do. Check it out!&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=352749cf-f624-4103-9a0a-f9176b92b1d0" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,352749cf-f624-4103-9a0a-f9176b92b1d0.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=0a11df39-72f7-47fb-a0a8-7222e0c8d19c</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,0a11df39-72f7-47fb-a0a8-7222e0c8d19c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,0a11df39-72f7-47fb-a0a8-7222e0c8d19c.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=0a11df39-72f7-47fb-a0a8-7222e0c8d19c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm catching a flight early tomorrow morning to Vegas for <a href="http://www.vsconnections.com">VS
Connections </a>and am really looking forward to it. VS Connections in particular,
and <a href="http://www.devconnections.com">DevConnections</a> in general (the overall
conference event) is well run, in great locations, and always has a lot of great content
that I can benefit from as well.
</p>
        <p>
I've been spending most of my recent prep time fine tuning the demos for my two WCF
sessions, Build Event Driven Applications with Indigo and Connecting Smart Client
Applications with Indigo. The more I work with Windows Communications Foundation (aka
"Indigo"), I am struck by a number of things:
</p>
        <ul>
          <li>
I am impressed by how capable Indigo is. 
</li>
          <li>
I am awed by how elegant and simple solutions are to complex aspects like security,
transactions, queuing, callbacks, and so on. 
</li>
          <li>
I am dumbfounded by how hard it is to figure out how to get to those elegant and simple
solutions.</li>
        </ul>
        <p>
The last bullet is not really a criticism of what they have come up with, it is just
the nature of the beast. I would draw on an analogy <a href="http://www.softinsight.com/LifeBeforeProgramming.aspx">from
my flying days </a>to explain why this is so. Imagine the cockpit of a WW I fighter
aircraft. You probably have half a dozen or less simple dials and gauges, and a stick
and throttle. Imagine trying to use that set of controls on an aircraft that can fly
at high subsonic speeds at high altitude carrying hundreds of passengers for 12 hour
transoceanic flights. Not going to work too well. This is basically where you were
at with past technologies to build complex, distributed, heterogenous, connected enterprise
systems. It could be done, but the end result was not going to be pretty and it was
going to take you a long time to get there.
</p>
        <p>
Now with WCF, it is more like climbing into the <a href="http://www.militaryfactory.com/cockpits/777_cockpit.asp">cockpit
of a 777</a>. There is a technological elegance to everything that is there. But there
are still hundreds (if not thousands) of individual switches, controls, displays,
electronic gages and dials, menu driven control panels, etc. A great deal of human
engineering has gone into everything that is in there so that for any given common
task, there are only a couple of relevant controls that you have to touch and put
into place to get the job done. The challenge is in knowing which one of those hundreds
of knobs and dials to tweak.
</p>
        <p>
The same is true for WCF. Microsoft has created an incredibly powerful and technologically
advanced platform that is well adapted to building large distributed enterprise systems.
In order to do that, there needs to be hundreds of switches and knobs that you can
throw to address different scenarios. The downside to that is bullet number three
above - you have to learn which switches and knobs are relevant for a given task,
and in what order to throw them.
</p>
        <p>
This is somewhat aggravated right now in that we are only at Beta 1 of WinFx (and
its parts WCF, WPF, and WinWF), and the names, shapes, and locations of all the knobs
and switches is constantly changing as they work on that human engineering task of
trying to make it easier to use. Meanwhile the documentation and samples are seriously
lagging, so working with it right now is a little like stepping into that 777 cockpit
without any labels on the controls. When you say to yourself, "I just need transactions
and certificate based security", it is kind of like saying "I just need to call the
flight attendant at the second aft flight station". Simple to describe, but God help
you in figuring out which switches and knobs to throw. At least there are not really
any destructive ones that you can throw by accident. If you get it wrong, your app
may not work, but you would have to go out of your way to write some code that would
do bad things when WCF fails to let you communicate.
</p>
        <p>
I'm looking forward to continuing to work with this technology and learn what all
those knobs and buttons are for. Learning all the controls of the aft cockpit of the
F-14 to run the weapons system, navigation systems, communications systems, and other
tasks was one of the funnest things I have done in my life. The fact that we got to
do that while strapped to a couple of 50K lb + of thrust zorching through the sky
pulling G's and landing on the carrier certainly helped make it interesting. Sitting
at a computer leaves a little to be desired in that department, but the learning challenge
is still just as fun.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=0a11df39-72f7-47fb-a0a8-7222e0c8d19c" />
      </body>
      <title>Las Vegas Bound - Impressions of WCF</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,0a11df39-72f7-47fb-a0a8-7222e0c8d19c.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/11/08/LasVegasBoundImpressionsOfWCF.aspx</link>
      <pubDate>Tue, 08 Nov 2005 07:13:55 GMT</pubDate>
      <description>&lt;p&gt;
I'm catching a flight early tomorrow morning to Vegas for &lt;a href="http://www.vsconnections.com"&gt;VS
Connections &lt;/a&gt;and am really looking forward to it. VS Connections in particular,
and &lt;a href="http://www.devconnections.com"&gt;DevConnections&lt;/a&gt; in general (the overall
conference event) is well run, in great locations, and always has a lot of great content
that I can benefit from as well.
&lt;/p&gt;
&lt;p&gt;
I've been spending most of my recent prep time fine tuning the demos for my two WCF
sessions, Build Event Driven Applications with Indigo and Connecting Smart Client
Applications with Indigo. The more I work with Windows Communications Foundation (aka
"Indigo"), I am struck by a number of things:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
I am impressed by how capable Indigo is. 
&lt;li&gt;
I am awed by how elegant and simple solutions are to complex aspects like security,
transactions, queuing, callbacks, and so on. 
&lt;li&gt;
I am dumbfounded by how hard it is to figure out how to get to those elegant and simple
solutions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The last bullet is not really a criticism of what they have come up with, it is just
the nature of the beast. I would draw on an analogy &lt;a href="http://www.softinsight.com/LifeBeforeProgramming.aspx"&gt;from
my flying days &lt;/a&gt;to explain why this is so. Imagine the cockpit of a WW I fighter
aircraft. You probably have half a dozen or less simple dials and gauges, and a stick
and throttle. Imagine trying to use that set of controls on an aircraft that can fly
at high subsonic speeds at high altitude carrying hundreds of passengers for 12 hour
transoceanic flights. Not going to work too well. This is basically where you were
at with past technologies to build complex, distributed, heterogenous, connected&amp;nbsp;enterprise
systems. It could be done, but the end result was not going to be pretty and it was
going to take you a long time to get there.
&lt;/p&gt;
&lt;p&gt;
Now with WCF, it is more like climbing into the &lt;a href="http://www.militaryfactory.com/cockpits/777_cockpit.asp"&gt;cockpit
of a 777&lt;/a&gt;. There is a technological elegance to everything that is there. But there
are still hundreds (if not thousands) of individual switches, controls, displays,
electronic gages and dials, menu driven control panels, etc. A great deal of human
engineering has gone into everything that is in there so that for any given common
task, there are only a couple of relevant controls that you have to touch and put
into place to get the job done. The challenge is in knowing which one of those hundreds
of knobs and dials to tweak.
&lt;/p&gt;
&lt;p&gt;
The same is true for WCF. Microsoft has created an incredibly powerful and technologically
advanced platform that is well adapted to building large distributed enterprise systems.
In order to do that, there needs to be hundreds of switches and knobs that you can
throw to address different scenarios. The downside to that is bullet number three
above - you have to learn which switches and knobs are relevant for a given task,
and in what order to throw them.
&lt;/p&gt;
&lt;p&gt;
This is somewhat aggravated right now in that we are only at Beta 1 of WinFx (and
its parts WCF, WPF, and WinWF), and the names, shapes, and locations of all the knobs
and switches is constantly changing as they work on that human engineering task of
trying to make it easier to use. Meanwhile the documentation and samples are seriously
lagging, so working with it right now is a little like stepping into that 777 cockpit
without any labels on the controls. When you say to yourself, "I just need transactions
and certificate based security", it is kind of like saying "I just need to call the
flight attendant at the second aft flight station". Simple to describe, but God help
you in figuring out which switches and knobs to throw. At least there are not really
any destructive ones that you can throw by accident. If you get it wrong, your app
may not work, but you would have to go out of your way to write some code that would
do bad things when WCF fails to let you communicate.
&lt;/p&gt;
&lt;p&gt;
I'm looking forward to continuing to work with this technology and learn what all
those knobs and buttons are for. Learning all the controls of the aft cockpit of the
F-14 to run the weapons system, navigation systems, communications systems, and other
tasks was one of the funnest things I have done in my life. The fact that we got to
do that while strapped to a couple of 50K lb + of thrust zorching through the sky
pulling G's and landing on the carrier certainly helped make it interesting. Sitting
at a computer leaves a little to be desired in that department, but the learning challenge
is still just as fun.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=0a11df39-72f7-47fb-a0a8-7222e0c8d19c" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,0a11df39-72f7-47fb-a0a8-7222e0c8d19c.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=266b9ab2-ebc4-4a20-9583-ffa65e9f188c</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,266b9ab2-ebc4-4a20-9583-ffa65e9f188c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,266b9ab2-ebc4-4a20-9583-ffa65e9f188c.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=266b9ab2-ebc4-4a20-9583-ffa65e9f188c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Get yer <a href="http://www.msdn.microsoft.com/subscriptions/">RTM
here</a>, hot fresh RTMs...<img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=266b9ab2-ebc4-4a20-9583-ffa65e9f188c" /></body>
      <title>Production versions of VS 2005 up on subscriber downloads</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,266b9ab2-ebc4-4a20-9583-ffa65e9f188c.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/10/27/ProductionVersionsOfVS2005UpOnSubscriberDownloads.aspx</link>
      <pubDate>Thu, 27 Oct 2005 17:25:16 GMT</pubDate>
      <description>Get yer &lt;a href="http://www.msdn.microsoft.com/subscriptions/"&gt;RTM here&lt;/a&gt;, hot fresh
RTMs...&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=266b9ab2-ebc4-4a20-9583-ffa65e9f188c" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,266b9ab2-ebc4-4a20-9583-ffa65e9f188c.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=69fc7632-be37-4dde-8290-6c9aa4e57fc4</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=69fc7632-be37-4dde-8290-6c9aa4e57fc4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'll be speaking at <a href="http://www.vsconnections.com">Visual Studio Connections </a>(part
of <a href="http://www.devconnections.com">DevConnections</a>) in Las Vegas from 5-8
November. This is a great and growing conference that happens twice annually in the
US, usually Orlando in the spring and Las Vegas in the fall, that I have been privileged
to speak at for the last couple years. If you haven't been to one yet, you ought to
be hammering your boss for permisson/funding to attend for the following reasons:
</p>
        <ul>
          <li>
It will rapidly and time-effectively expose you to new solution technologies you might
not get a chance to explore on your own 
</li>
          <li>
You will get concentrated advanced training in current and future technologies, getting
you up to speed on them in far less time than you can achieve on your own 
</li>
          <li>
You will get presentations from the top speakers in the business 
</li>
          <li>
You will get a chance to network with peers in the industry, learn from others experiences
employing .NET technologies, which will make you more effective at employing them
yourself 
</li>
          <li>
You will have a lot of fun (OK, maybe don't tell your boss this...)</li>
        </ul>
        <p>
You can learn a lot peripherally from the conference too by reading the <a href="http://aspadvice.com/blogs/devconnections/default.aspx">DevConnections
blog here</a>. There are posts from other speakers as they develop their talks and
their own observations and experiences at the conference.
</p>
        <p>
I'll be presenting the following sessions:
</p>
        <p>
          <strong>VSM356: Build Custom Data Bound Business Objects and Collections</strong>
          <br />
          <strong>VSM351: Secure Smart Client ClickOnce Deployments</strong>
          <br />
          <strong>VID306: Build Event-Driven Applications with Indigo</strong>
          <br />
          <strong>VID309: Connect Smart Client Applications with Indigo</strong>
        </p>
        <p>
If you make it to the show (and you should!!), stop by and say hi!
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=69fc7632-be37-4dde-8290-6c9aa4e57fc4" />
      </body>
      <title>Upcoming DevConnections Talks</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2005/10/24/UpcomingDevConnectionsTalks.aspx</link>
      <pubDate>Mon, 24 Oct 2005 20:48:04 GMT</pubDate>
      <description>&lt;p&gt;
I'll be speaking at &lt;a href="http://www.vsconnections.com"&gt;Visual Studio Connections &lt;/a&gt;(part
of &lt;a href="http://www.devconnections.com"&gt;DevConnections&lt;/a&gt;) in Las Vegas from 5-8
November. This is a great and growing conference that happens twice annually in the
US, usually Orlando in the spring and Las Vegas in the fall, that I have been privileged
to speak at for the last couple years. If you haven't been to one yet, you ought to
be hammering your boss for permisson/funding to attend for the following reasons:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
It will rapidly and time-effectively expose you to new solution technologies you might
not get a chance to explore on your own 
&lt;li&gt;
You will get concentrated advanced training in current and future technologies, getting
you up to speed on them in far less time than you can achieve on your own 
&lt;li&gt;
You will get presentations from the top speakers in the business 
&lt;li&gt;
You will get a chance to network with peers in the industry, learn from others experiences
employing .NET technologies, which will make you more effective at employing them
yourself 
&lt;li&gt;
You will have a lot of fun (OK, maybe don't tell your boss this...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can learn a lot peripherally from the conference too by reading the &lt;a href="http://aspadvice.com/blogs/devconnections/default.aspx"&gt;DevConnections
blog here&lt;/a&gt;. There are posts from other speakers as they develop their talks and
their own observations and experiences at the conference.
&lt;/p&gt;
&lt;p&gt;
I'll be presenting the following sessions:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;VSM356:&amp;nbsp;Build Custom Data Bound Business Objects and Collections&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;VSM351:&amp;nbsp;Secure Smart Client ClickOnce Deployments&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;VID306:&amp;nbsp;Build Event-Driven Applications with Indigo&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;VID309:&amp;nbsp;Connect Smart Client Applications with Indigo&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
If you make it to the show (and you should!!), stop by and say hi!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=69fc7632-be37-4dde-8290-6c9aa4e57fc4" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>DevConnections</category>
    </item>
  </channel>
</rss>