<?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>Brian Noyes' Blog - .NET</title>
    <link>http://briannoyes.net/</link>
    <description>.NET Ramblings</description>
    <language>en-us</language>
    <copyright>Brian Noyes</copyright>
    <lastBuildDate>Thu, 24 Apr 2008 23:10:20 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.12105.0</generator>
    <managingEditor>brian.noyes@gmail.com</managingEditor>
    <webMaster>brian.noyes@gmail.com</webMaster>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=acd43605-4d8a-462b-855d-abe798900a18</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,acd43605-4d8a-462b-855d-abe798900a18.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,acd43605-4d8a-462b-855d-abe798900a18.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=acd43605-4d8a-462b-855d-abe798900a18</wfw:commentRss>
      <title>DevConnections Orlando Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,acd43605-4d8a-462b-855d-abe798900a18.aspx</guid>
      <link>http://briannoyes.net/2008/04/24/DevConnectionsOrlandoSlidesAndDemos.aspx</link>
      <pubDate>Thu, 24 Apr 2008 23:10:20 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face=Calibri&gt;I spoke this week at DevConnections
in Orlando. As always a great time and a good show. For those that attended my talks,
thanks for the great participation and questions! For those that didn't, you really
need to work harder on convincing your boss to send you to a DevConnections conference.
The line up of speakers is amazing and the venue is always great.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face=Calibri&gt;The three talks I gave were on
building custom activities in WF, WPF Tools, and Service Oriented workflows.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face=Calibri&gt;You can grab the slides and demos
from the links below.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face=Calibri&gt;Custom WF Activities:&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/Noyes_VS_VWF310_Encapsulate_Custom_Business_Processes_with_Custom_WF_Activities.ppt"&gt;Slides&lt;/a&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VWF310_CustomWFActivitiesDemos.zip"&gt;Demos&lt;o:p&gt;&lt;/o:p&gt;
&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face=Calibri&gt;WPF Tools:&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/Noyes_VS_VPF304_Leverage_WPF_Development_Tools.ppt"&gt;Slides&lt;/a&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face=Calibri&gt;SO Workflows:&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/Noyes_VS_VAR318_Developing_Service_Oriented_Workflows.ppt"&gt;Slides&lt;/a&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VAR318_SOWorkflowsDemos.zip"&gt;Demos&lt;o:p&gt;&lt;/o:p&gt;
&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=acd43605-4d8a-462b-855d-abe798900a18" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,acd43605-4d8a-462b-855d-abe798900a18.aspx</comments>
      <category>.NET</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=0c52ed06-2860-46a2-9099-3f73c69110c1</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,0c52ed06-2860-46a2-9099-3f73c69110c1.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,0c52ed06-2860-46a2-9099-3f73c69110c1.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0c52ed06-2860-46a2-9099-3f73c69110c1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My latest publishing project, which I haven't talked about much on the blog, is a
LiveLesson training DVD on WF. This product has now released and you can find all
the details here:
</p>
        <p>
          <a title="http://www.awprofessional.com/title/0321503139" href="http://www.awprofessional.com/title/0321503139">http://www.awprofessional.com/title/0321503139</a>
        </p>
        <p>
It contains about 5 hours of video instruction on the breadth of WF, including sequential
workflows, state machine workflows, showing how to use each of the base activity library
activities, how to communicate with workflows, how to handle exceptions, custom activities,
and much more. Because of the length of the instruction, it is more of a shallow dive
into each of the topics to get you started, rather than being very deep in any one
area. The content is mostly Camtasia screen capture while demonstrating the techniques
being discussed.
</p>
        <p>
There is also a sample lesson available through YouTube:
</p>
        <p>
          <a title="http://www.youtube.com/livelessons" href="http://www.youtube.com/livelessons">http://www.youtube.com/livelessons</a>
        </p>
        <p>
If you are getting started using WF, this would be a good way to get bootstrapped.
</p>
        <p>
Spread the word!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0c52ed06-2860-46a2-9099-3f73c69110c1" />
      </body>
      <title>Developing Applications with Windows Workflow Foundation LiveLesson</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,0c52ed06-2860-46a2-9099-3f73c69110c1.aspx</guid>
      <link>http://briannoyes.net/2007/06/14/DevelopingApplicationsWithWindowsWorkflowFoundationLiveLesson.aspx</link>
      <pubDate>Thu, 14 Jun 2007 16:17:17 GMT</pubDate>
      <description>&lt;p&gt;
My latest publishing project, which I haven't talked about much on the blog, is a
LiveLesson training DVD on WF. This product has now released and you can find all
the details here:
&lt;/p&gt;
&lt;p&gt;
&lt;a title=http://www.awprofessional.com/title/0321503139 href="http://www.awprofessional.com/title/0321503139"&gt;http://www.awprofessional.com/title/0321503139&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
It contains about 5 hours of video instruction on the breadth of WF, including sequential
workflows, state machine workflows, showing how to use each of the base activity library
activities, how to communicate with workflows, how to handle exceptions, custom activities,
and much more. Because of the length of the instruction, it is more of a shallow dive
into each of the topics to get you started, rather than being very deep in any one
area. The content is mostly Camtasia screen capture while demonstrating the techniques
being discussed.
&lt;/p&gt;
&lt;p&gt;
There is also a sample lesson available through YouTube:
&lt;/p&gt;
&lt;p&gt;
&lt;a title=http://www.youtube.com/livelessons href="http://www.youtube.com/livelessons"&gt;http://www.youtube.com/livelessons&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If you are getting started using WF, this would be a good way to get bootstrapped.
&lt;/p&gt;
&lt;p&gt;
Spread the word!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0c52ed06-2860-46a2-9099-3f73c69110c1" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,0c52ed06-2860-46a2-9099-3f73c69110c1.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=ba6d5462-5901-492b-84f2-0af3536419b4</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,ba6d5462-5901-492b-84f2-0af3536419b4.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,ba6d5462-5901-492b-84f2-0af3536419b4.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ba6d5462-5901-492b-84f2-0af3536419b4</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a talk on WPF for ASP.NET developers this evening at the .NET SIG in Cleveland.
Good size crowd and great questions. It was a challenging talk because of trying to
cover all of WPF and Silverlight for ASP.NET developers and for those in the crowd
who were Windows Forms developers. 
</p>
        <p>
I covered the various deployment models of WPF including:
</p>
        <p>
- Windows Application
</p>
        <p>
- XAML Browser Application (XBAP)
</p>
        <p>
- Plain Old XAML Page (POXP?)
</p>
        <p>
- Silverlight App
</p>
        <p>
Whenever I present this stuff, the overwhelming reaction is: Stop giving us so many
choices!!! We can't figure out what to use when! 
</p>
        <p>
There is also often a desire for a conclusion to be drawn that one of these will be
the end state and all UI will be written in it. I just don't think that will be the
case. I think that maybe 5 years from now, if the tools come along a lot farther than
they are now, and if the control suite grows, the list of options could shorten to
just WPF Windows App, Silverlight App, and ASP.NET AJAX app. But I don't think it
will shrink beyond that. Windows Apps make sense when you control the desktop to take
maximum advantage of the client platform and give the best user experience. Silverlight
makes sense for broader reach while sticking to the same tools and programming models.
ASP.NET AJAX will be broader still and will address the platforms that Silverlight
can't reach, and will also (like Windows Forms) be more evolved for data over forms
apps for a while to come.
</p>
        <p>
Anyway, here are the slides and demos for those who are interested:
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/WPFforASP.NETDevelopers.pdf">Slides</a>    <a href="http://www.softinsight.com/downloads/WPFforASPNETDevsDemos.zip">Demos</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=ba6d5462-5901-492b-84f2-0af3536419b4" />
      </body>
      <title>Slides and demos from Cleveland .NET SIG</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,ba6d5462-5901-492b-84f2-0af3536419b4.aspx</guid>
      <link>http://briannoyes.net/2007/06/13/SlidesAndDemosFromClevelandNETSIG.aspx</link>
      <pubDate>Wed, 13 Jun 2007 01:05:36 GMT</pubDate>
      <description>&lt;p&gt;
I gave a talk on WPF for ASP.NET developers this evening at the .NET SIG in Cleveland.
Good size crowd and great questions. It was a challenging talk because of trying to
cover all of WPF and Silverlight for ASP.NET developers and for those in the crowd
who were Windows Forms developers. 
&lt;/p&gt;
&lt;p&gt;
I covered the various deployment models of WPF including:
&lt;/p&gt;
&lt;p&gt;
- Windows Application
&lt;/p&gt;
&lt;p&gt;
- XAML Browser Application (XBAP)
&lt;/p&gt;
&lt;p&gt;
- Plain Old XAML Page (POXP?)
&lt;/p&gt;
&lt;p&gt;
- Silverlight App
&lt;/p&gt;
&lt;p&gt;
Whenever I present this stuff, the overwhelming reaction is: Stop giving us so many
choices!!! We can't figure out what to use when! 
&lt;/p&gt;
&lt;p&gt;
There is also often a desire for a conclusion to be drawn that one of these will be
the end state and all UI will be written in it. I just don't think that will be the
case. I think that maybe 5 years from now, if the tools come along a lot farther than
they are now, and if the control suite grows, the list of options could shorten to
just WPF Windows App, Silverlight App, and ASP.NET AJAX app. But I don't think it
will shrink beyond that. Windows Apps make sense when you control the desktop to take
maximum advantage of the client platform and give the best user experience. Silverlight
makes sense for broader reach while sticking to the same tools and programming models.
ASP.NET AJAX will be broader still and will address the platforms that Silverlight
can't reach, and will also (like Windows Forms) be more evolved for data over forms
apps for a while to come.
&lt;/p&gt;
&lt;p&gt;
Anyway, here are the slides and demos for those who are interested:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/WPFforASP.NETDevelopers.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/WPFforASPNETDevsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=ba6d5462-5901-492b-84f2-0af3536419b4" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,ba6d5462-5901-492b-84f2-0af3536419b4.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=bff4995d-a9a9-4b94-8444-e99aceaddd78</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,bff4995d-a9a9-4b94-8444-e99aceaddd78.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,bff4995d-a9a9-4b94-8444-e99aceaddd78.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=bff4995d-a9a9-4b94-8444-e99aceaddd78</wfw:commentRss>
      <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://briannoyes.net/aggbug.ashx?id=bff4995d-a9a9-4b94-8444-e99aceaddd78" />
      </body>
      <title>Silverlight - not just pretty graphics - Cross platform .NET Framework!</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,bff4995d-a9a9-4b94-8444-e99aceaddd78.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=bff4995d-a9a9-4b94-8444-e99aceaddd78" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,bff4995d-a9a9-4b94-8444-e99aceaddd78.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=ffa69b0b-d616-4208-b5e5-3434c5db7f7a</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,ffa69b0b-d616-4208-b5e5-3434c5db7f7a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,ffa69b0b-d616-4208-b5e5-3434c5db7f7a.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/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://briannoyes.net/PermaLink,guid,ffa69b0b-d616-4208-b5e5-3434c5db7f7a.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=ffa69b0b-d616-4208-b5e5-3434c5db7f7a" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,ffa69b0b-d616-4208-b5e5-3434c5db7f7a.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=86567802-cb16-4697-8b77-8f4b99fe2f61</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,86567802-cb16-4697-8b77-8f4b99fe2f61.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,86567802-cb16-4697-8b77-8f4b99fe2f61.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=86567802-cb16-4697-8b77-8f4b99fe2f61</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've arrived in Orlando and am looking forward to giving my sessions tomorrow and
Wed in the Visual Studio connections track. I'll be presenting the following sessions:
</p>
        <p>
- WPF in Windows Forms and vice versa: This talk will cover the interop story for
containing WPF controls in Windows Forms applications and Windows Forms controls in
WPF applications. Quite a compelling story for migrating incrementally to WPF, but
not without its share of pain points.
</p>
        <p>
- Real World .NET 3.0 Smart Client Deployment: This is a modification of my Real World
ClickOnce talk, covering the key aspects of ClickOnce deployment but with a slant
towards the special considerations introduced by .NET 3.0 for security and WPF deployment
models.
</p>
        <p>
- Encapsulate Business Processes in Custom WF Activities: This talk covers how to
create custom simple and composite WF activities and all the many things you need
to take into consideration to make a robust, reusable activity.
</p>
        <p>
This year the conferences is at the World Center Marriott, a change from the Hyatt
Grand Regency of the last few years. Verdict is still out whether this is an improvement...
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=86567802-cb16-4697-8b77-8f4b99fe2f61" />
      </body>
      <title>DevConnections Orlando - a tale of three sessions</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,86567802-cb16-4697-8b77-8f4b99fe2f61.aspx</guid>
      <link>http://briannoyes.net/2007/03/26/DevConnectionsOrlandoATaleOfThreeSessions.aspx</link>
      <pubDate>Mon, 26 Mar 2007 22:43:18 GMT</pubDate>
      <description>&lt;p&gt;
I've arrived in Orlando and am looking forward to giving my sessions tomorrow and
Wed in the Visual Studio connections track. I'll be presenting the following sessions:
&lt;/p&gt;
&lt;p&gt;
- WPF in Windows Forms and vice versa: This talk will cover the interop story for
containing WPF controls in Windows Forms applications and Windows Forms controls in
WPF applications. Quite a compelling story for migrating incrementally to WPF, but
not without its share of pain points.
&lt;/p&gt;
&lt;p&gt;
- Real World .NET 3.0 Smart Client Deployment: This is a modification of my Real World
ClickOnce talk, covering the key aspects of ClickOnce deployment but with a slant
towards the special considerations introduced by .NET 3.0 for security and WPF deployment
models.
&lt;/p&gt;
&lt;p&gt;
- Encapsulate Business Processes in Custom WF Activities: This talk covers how to
create custom simple and composite WF activities and all the many things you need
to take into consideration to make a robust, reusable activity.
&lt;/p&gt;
&lt;p&gt;
This year the conferences is at the World Center Marriott, a change from the Hyatt
Grand Regency of the last few years. Verdict is still out whether this is an improvement...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=86567802-cb16-4697-8b77-8f4b99fe2f61" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,86567802-cb16-4697-8b77-8f4b99fe2f61.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>DevConnections</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=142d9f10-53cf-43b7-95a2-4cd20a8c18be</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,142d9f10-53cf-43b7-95a2-4cd20a8c18be.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,142d9f10-53cf-43b7-95a2-4cd20a8c18be.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=142d9f10-53cf-43b7-95a2-4cd20a8c18be</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been doing a lot of WPF work lately and recently read Adam Nathan's WPF Unleashed
to brush up on a few of the more advanced topics that I had not yet spent a lot of
time on.
</p>
        <p>
I can't say enough about how fantastic this book is. Never mind that it is extremely
well written, easy to read, flows nicely, and yet is very dense in content. The organization
is excellent and he wastes no time on fluff but gets right to the meat of what is
different about WPF from Windows Forms or ASP.NET right up front. 
</p>
        <p>
Then the clincher - the ENTIRE BOOK IS IN COLOR! Code snippets, figures, Tips and
FAQ callouts, everything. Naturally you would want some color for something that is
all about rich graphics like WPF, but it didn't even occur to me how wonderful it
would be to have the whole book in color until I experienced it. Now, it is like my
first taste of a color monitor after years of green screens and greyscales - wow.
It was a whole different experience and I don't want to go back to those black and
white paper thingies. Alas, I think it will be quite some time before all programming
books are in color, but it will be a happy day when they are.
</p>
        <p>
A plea to all publishers: Please at least offer a color variant. I'll pay more!! It
is worth it!
</p>
        <p>
A word to Adam: Thanks for this great book. You have raised the bar for the rest of
us authors.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=142d9f10-53cf-43b7-95a2-4cd20a8c18be" />
      </body>
      <title>The WPF Book You Can't Live Without - WPF Unleashed</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,142d9f10-53cf-43b7-95a2-4cd20a8c18be.aspx</guid>
      <link>http://briannoyes.net/2007/03/20/TheWPFBookYouCantLiveWithoutWPFUnleashed.aspx</link>
      <pubDate>Tue, 20 Mar 2007 21:48:11 GMT</pubDate>
      <description>&lt;p&gt;
I've been doing a lot of WPF work lately and recently read Adam Nathan's WPF Unleashed
to brush up on a few of the more advanced topics that I had not yet spent a lot of
time on.
&lt;/p&gt;
&lt;p&gt;
I can't say enough about how fantastic this book is. Never mind that it is extremely
well written, easy to read, flows nicely, and yet is very dense in content. The organization
is excellent and he wastes no time on fluff but gets right to the meat of what is
different about WPF from Windows Forms or ASP.NET right up front. 
&lt;/p&gt;
&lt;p&gt;
Then the clincher - the ENTIRE BOOK IS IN COLOR! Code snippets, figures, Tips and
FAQ callouts, everything. Naturally you would want some color for something that is
all about rich graphics like WPF, but it didn't even occur to me how wonderful it
would be to have the whole book in color until I experienced it. Now, it is like my
first taste of a color monitor after years of green screens and greyscales - wow.
It was a whole different experience and I don't want to go back to those black and
white paper thingies. Alas, I think it will be quite some time before all programming
books are in color, but it will be a happy day when they are.
&lt;/p&gt;
&lt;p&gt;
A plea to all publishers: Please at least offer a color variant. I'll pay more!! It
is worth it!
&lt;/p&gt;
&lt;p&gt;
A word to Adam: Thanks for this great book. You have raised the bar for the rest of
us authors.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=142d9f10-53cf-43b7-95a2-4cd20a8c18be" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,142d9f10-53cf-43b7-95a2-4cd20a8c18be.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=4642a111-f04c-4a28-9395-8454c4eb5ced</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4642a111-f04c-4a28-9395-8454c4eb5ced</wfw:commentRss>
      <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://briannoyes.net/aggbug.ashx?id=4642a111-f04c-4a28-9395-8454c4eb5ced" />
      </body>
      <title>ClickOnce Community Resource Kit has found a new home</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=4642a111-f04c-4a28-9395-8454c4eb5ced" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=ab44a772-a802-4789-88ec-3b3356451b90</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,ab44a772-a802-4789-88ec-3b3356451b90.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,ab44a772-a802-4789-88ec-3b3356451b90.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=ab44a772-a802-4789-88ec-3b3356451b90" />
      </body>
      <title>Hands on WPF - dnrTV - Part 1</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,ab44a772-a802-4789-88ec-3b3356451b90.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=ab44a772-a802-4789-88ec-3b3356451b90" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=d0dc6bd9-ce84-450f-9240-a0aaf8eee86a</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,d0dc6bd9-ce84-450f-9240-a0aaf8eee86a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,d0dc6bd9-ce84-450f-9240-a0aaf8eee86a.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d0dc6bd9-ce84-450f-9240-a0aaf8eee86a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wow, is this really my first blog post this year? The year has started off busy busy
busy.
</p>
        <p>
But enough about me... this is about you! YOU need to come to the NOVA Code Camp on
14 April! YOU need to volunteer to speak if you have some knowledge you are willing
to share with your fellow developers.
</p>
        <p>
I hope to see you there.
</p>
        <p>
Details: <span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><a href="http://novacodecamp.org/">http://novacodecamp.org/</a></span></p>
        <p>
          <span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
          </span> 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=d0dc6bd9-ce84-450f-9240-a0aaf8eee86a" />
      </body>
      <title>NOVA / DC Area Code Camp</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,d0dc6bd9-ce84-450f-9240-a0aaf8eee86a.aspx</guid>
      <link>http://briannoyes.net/2007/02/17/NOVADCAreaCodeCamp.aspx</link>
      <pubDate>Sat, 17 Feb 2007 01:47:42 GMT</pubDate>
      <description>&lt;p&gt;
Wow, is this really my first blog post this year? The year has started off busy busy
busy.
&lt;/p&gt;
&lt;p&gt;
But enough about me... this is about you! YOU need to come to the NOVA Code Camp on
14 April! YOU need to volunteer to speak if you have some knowledge you are willing
to share with your fellow developers.
&lt;/p&gt;
&lt;p&gt;
I hope to see you there.
&lt;/p&gt;
&lt;p&gt;
Details: &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;a href="http://novacodecamp.org/"&gt;http://novacodecamp.org/&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=d0dc6bd9-ce84-450f-9240-a0aaf8eee86a" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,d0dc6bd9-ce84-450f-9240-a0aaf8eee86a.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Architecture</category>
      <category>Community</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=643bb45f-330d-44dc-b21e-5b6e69774dba</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,643bb45f-330d-44dc-b21e-5b6e69774dba.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,643bb45f-330d-44dc-b21e-5b6e69774dba.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=643bb45f-330d-44dc-b21e-5b6e69774dba</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I back from my trip to visit family for Christmas to a nice little "gift" awaiting
me when I got home - a first printing copy of my book. That means it should be shipping
soon from retailers.
</p>
        <p>
You can find more information about the book here:
</p>
        <p>
          <a href="http://www.softinsight.com/clickoncebook/default.aspx">http://www.softinsight.com/clickoncebook/default.aspx</a>
        </p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=643bb45f-330d-44dc-b21e-5b6e69774dba" />
      </body>
      <title>Smart Client Deployment with ClickOnce is in print</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,643bb45f-330d-44dc-b21e-5b6e69774dba.aspx</guid>
      <link>http://briannoyes.net/2006/12/28/SmartClientDeploymentWithClickOnceIsInPrint.aspx</link>
      <pubDate>Thu, 28 Dec 2006 20:00:43 GMT</pubDate>
      <description>&lt;p&gt;
I back from my trip to visit family for Christmas to a nice little "gift" awaiting
me when I got home - a first printing copy of my book. That means it should be shipping
soon from retailers.
&lt;/p&gt;
&lt;p&gt;
You can find more information about the book here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/clickoncebook/default.aspx"&gt;http://www.softinsight.com/clickoncebook/default.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=643bb45f-330d-44dc-b21e-5b6e69774dba" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,643bb45f-330d-44dc-b21e-5b6e69774dba.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=0d5fd34e-e8f7-4eb3-89b3-d50b77579269</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,0d5fd34e-e8f7-4eb3-89b3-d50b77579269.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,0d5fd34e-e8f7-4eb3-89b3-d50b77579269.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0d5fd34e-e8f7-4eb3-89b3-d50b77579269</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
They have been telling me for months it was going to show up there, I finally stopped
checking because we are very close to going to print anyway. But if you want to get
your hands on my ClickOnce book now, it is available on Rough Cuts at long last:
</p>
        <p>
          <a href="http://my.safaribooksonline.com/0321197690">http://my.safaribooksonline.com/0321197690</a>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0d5fd34e-e8f7-4eb3-89b3-d50b77579269" />
      </body>
      <title>My ClickOnce Book is Available on Rough Cuts!!</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,0d5fd34e-e8f7-4eb3-89b3-d50b77579269.aspx</guid>
      <link>http://briannoyes.net/2006/12/01/MyClickOnceBookIsAvailableOnRoughCuts.aspx</link>
      <pubDate>Fri, 01 Dec 2006 21:04:14 GMT</pubDate>
      <description>&lt;p&gt;
They have been telling me for months it was going to show up there, I finally stopped
checking because we are very close to going to print anyway. But if you want to get
your hands on my ClickOnce book now, it is available on Rough Cuts at long last:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://my.safaribooksonline.com/0321197690"&gt;http://my.safaribooksonline.com/0321197690&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0d5fd34e-e8f7-4eb3-89b3-d50b77579269" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,0d5fd34e-e8f7-4eb3-89b3-d50b77579269.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=e020da51-7035-48e2-accb-3e84c4f7f8c3</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,e020da51-7035-48e2-accb-3e84c4f7f8c3.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,e020da51-7035-48e2-accb-3e84c4f7f8c3.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e020da51-7035-48e2-accb-3e84c4f7f8c3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A fairly messy little detail of ClickOnce has surfaced that I wanted to get some word
out about regarding publisher certificate renewals and how they affect ClickOnce.
</p>
        <p>
ClickOnce only allows you to perform an update to an application if the updated version
manifests are signed by the same publisher certificate as was used to originally sign
the application.
</p>
        <p>
When ClickOnce was designed, the product team understanding was that certificate issuers
such as Verisign and thawte would renew certificates without re-issuing a new certificate
(with a new private/public key pair). Unfortunately, that understanding was incorrect.
Certificate issuers do in fact issue a whole new cert, just one that has the same
CN (Common Name) when they do a renewal.
</p>
        <p>
The result of this is that if you have a ClickOnce application in production and your
publisher cert expires, you will no longer be able to issue updates to your application
with your new cert. You will have to have users uninstall the previous version and
install the new version as a fresh install.
</p>
        <p>
To combat this for the near term, you may want to consider buying a cert that lasts
longer than a year.
</p>
        <p>
Microsoft is looking into a fix for this in the Orcas release, but the details of
what that fix will look like and how it will affect the update process is yet to be
determined.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e020da51-7035-48e2-accb-3e84c4f7f8c3" />
      </body>
      <title>ClickOnce Publisher Certificate Renewals and Updating Your Application</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,e020da51-7035-48e2-accb-3e84c4f7f8c3.aspx</guid>
      <link>http://briannoyes.net/2006/11/21/ClickOncePublisherCertificateRenewalsAndUpdatingYourApplication.aspx</link>
      <pubDate>Tue, 21 Nov 2006 21:35:16 GMT</pubDate>
      <description>&lt;p&gt;
A fairly messy little detail of ClickOnce has surfaced that I wanted to get some word
out about regarding publisher certificate renewals and how they affect ClickOnce.
&lt;/p&gt;
&lt;p&gt;
ClickOnce only allows you to perform an update to an application if the updated version
manifests are signed by the same publisher certificate as was used to originally sign
the application.
&lt;/p&gt;
&lt;p&gt;
When ClickOnce was designed, the product team understanding was that certificate issuers
such as Verisign and thawte would renew certificates without re-issuing a new certificate
(with a new private/public key pair). Unfortunately, that understanding was incorrect.
Certificate issuers do in fact issue a whole new cert, just one that has the same
CN (Common Name) when they do a renewal.
&lt;/p&gt;
&lt;p&gt;
The result of this is that if you have a ClickOnce application in production and your
publisher cert expires, you will no longer be able to issue updates to your application
with your new cert. You will have to have users uninstall the previous version and
install the new version as a fresh install.
&lt;/p&gt;
&lt;p&gt;
To combat this for the near term, you may want to consider buying a cert that lasts
longer than a year.
&lt;/p&gt;
&lt;p&gt;
Microsoft is looking into a fix for this in the Orcas release, but the details of
what that fix will look like and how it will affect the update process is yet to be
determined.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e020da51-7035-48e2-accb-3e84c4f7f8c3" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,e020da51-7035-48e2-accb-3e84c4f7f8c3.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=d4932287-1e7b-4c7b-881d-8bd0bf9f5b64</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,d4932287-1e7b-4c7b-881d-8bd0bf9f5b64.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,d4932287-1e7b-4c7b-881d-8bd0bf9f5b64.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d4932287-1e7b-4c7b-881d-8bd0bf9f5b64</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Congratulations to Dan Kahler for coming up with the correct answer and winning a
free seat in the class!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=d4932287-1e7b-4c7b-881d-8bd0bf9f5b64" />
      </body>
      <title>Contest complete</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,d4932287-1e7b-4c7b-881d-8bd0bf9f5b64.aspx</guid>
      <link>http://briannoyes.net/2006/11/17/ContestComplete.aspx</link>
      <pubDate>Fri, 17 Nov 2006 22:01:39 GMT</pubDate>
      <description>&lt;p&gt;
Congratulations to Dan Kahler for coming up with the correct answer and winning a
free seat in the class!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=d4932287-1e7b-4c7b-881d-8bd0bf9f5b64" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,d4932287-1e7b-4c7b-881d-8bd0bf9f5b64.aspx</comments>
      <category>.NET</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=db2e85dd-3680-4f5b-b85c-fefb109e0ebc</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,db2e85dd-3680-4f5b-b85c-fefb109e0ebc.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,db2e85dd-3680-4f5b-b85c-fefb109e0ebc.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=db2e85dd-3680-4f5b-b85c-fefb109e0ebc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you want to win a free seat for our Advanced .NET 2.0 Master Class, being held
4-8 Dec 2006 in Reston, VA, be the first one to email me at brian.noyesATidesign.net
with the answer to the following question:
</p>
        <p>
What is the name of the class that you use to sign a ClickOnce manifest after making
modifications to it and writing it out with the manifest utility APIs?
</p>
        <p>
Race is on! 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=db2e85dd-3680-4f5b-b85c-fefb109e0ebc" />
      </body>
      <title>IDesign Advanced .NET Master Class Seat Giveaway</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,db2e85dd-3680-4f5b-b85c-fefb109e0ebc.aspx</guid>
      <link>http://briannoyes.net/2006/11/17/IDesignAdvancedNETMasterClassSeatGiveaway.aspx</link>
      <pubDate>Fri, 17 Nov 2006 19:16:47 GMT</pubDate>
      <description>&lt;p&gt;
If you want to win a free seat for our Advanced .NET 2.0 Master Class, being held
4-8 Dec 2006 in Reston, VA, be the first one to email me at brian.noyesATidesign.net
with the answer to the following question:
&lt;/p&gt;
&lt;p&gt;
What is the name of the class that you use to sign a ClickOnce manifest after making
modifications to it and writing it out with the manifest utility APIs?
&lt;/p&gt;
&lt;p&gt;
Race is on!&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=db2e85dd-3680-4f5b-b85c-fefb109e0ebc" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,db2e85dd-3680-4f5b-b85c-fefb109e0ebc.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=a0e9b379-5eab-4385-a4a0-069b28f39fa0</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a0e9b379-5eab-4385-a4a0-069b28f39fa0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Another great conference complete. Around 5000 showed up and we had great feedback
from the crowd that it was a good show. If you haven't been to connections before,
you really should check it out.
</p>
        <p>
I gave three talks this week. You can get the slides and demos for each below.
</p>
        <p>
Real World ClickOnce:  <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDP301_RealWorldClickOnce.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/RealWorldClickOnceDemos.zip">Demos</a><br />
Workflow Driven Windows Applications:  <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VWX301_WorkflowDrivenWindowsApplications.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/WorkflowWindowsAppDemos.zip">Demos</a><br />
Implement a Data Layer with the VS 2005 DataSet Designer:  <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDA302_ImplementDataLayerwithDataSetDesigner.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/DataSetDesignerDemos.zip">Demos</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a0e9b379-5eab-4385-a4a0-069b28f39fa0" />
      </body>
      <title>DevConnections Vegas Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</guid>
      <link>http://briannoyes.net/2006/11/10/DevConnectionsVegasSlidesAndDemos.aspx</link>
      <pubDate>Fri, 10 Nov 2006 02:02:33 GMT</pubDate>
      <description>&lt;p&gt;
Another great conference complete. Around 5000 showed up and we had great feedback
from the crowd that it was a good show. If you haven't been to connections before,
you really should check it out.
&lt;/p&gt;
&lt;p&gt;
I gave three talks this week. You can get the slides and demos for each below.
&lt;/p&gt;
&lt;p&gt;
Real World ClickOnce:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDP301_RealWorldClickOnce.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/RealWorldClickOnceDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Workflow Driven Windows Applications:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VWX301_WorkflowDrivenWindowsApplications.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/WorkflowWindowsAppDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Implement a Data Layer with the VS 2005 DataSet Designer:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDA302_ImplementDataLayerwithDataSetDesigner.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/DataSetDesignerDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a0e9b379-5eab-4385-a4a0-069b28f39fa0" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Architecture</category>
      <category>ClickOnce</category>
      <category>Data Binding</category>
      <category>DevConnections</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=435524e7-340c-4b4b-933d-a1c38d27e8ea</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,435524e7-340c-4b4b-933d-a1c38d27e8ea.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,435524e7-340c-4b4b-933d-a1c38d27e8ea.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=435524e7-340c-4b4b-933d-a1c38d27e8ea</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you haven't experienced Windows Vista yet, it is a very cool operating system,
but there are a lot of lessons to learn in getting up to speed in working in the new
environment. 
</p>
        <p>
The biggest thing to get used to if you haven't been running a non-admin account on
your XP machine is that there are probably a hundred things or more that you get away
with that you don't even know that the reason you get away with it is that you are
an admin.
</p>
        <p>
In Vista, even when logged in with an administrator account, you are still not allowed
to do administrator things without a privilege elevation through a mechanism called
User Access Control (UAC). UAC will seem like a living hell at first because all kinds
of things will stop working for you. For example, if you are only getting to some
files because you are an admin, and an app such as Quicken tries to run and access
those files, you will just get whatever kind of error the app vendor decided to surface
for a file I/O error. However, the best way to approach it is to treat it as a learning
experience to figure out how to avoid running things as admin unless you really need
to (i.e. give your user account permissions to the directories you really need, don't
rely on Admin privilege to give you access).
</p>
        <p>
Another example is when publishing with ClickOnce. When you publish from Visual Studio
to an http address, VS uses Frontpage Server Extensions (FPE) to create the virtual
directory and copy the files to it. First step on Windows Vista is that you need to
have IIS 6 Compatibility enabled (it is not on by default, nor is IIS installed by
default like XP). Once you do that, IIS 7 knows how to look like a Frontpage Server
Extension endpoint. The other thing is that you can only access the web server through
FPE if you are accessing as an admin from VS. 
</p>
        <p>
Even when logged in as an admin, VS will not be running with admin privilege by default.
As a result, when you try to publish a ClickOnce app you will get an obscure error
that says that FPE is not installed on the server. Specifically:
</p>
        <p>
"Failed to connect to 'http://localhost/WindowsApplication3/' with the following error:
Unable to create the Web 'http://localhost/WindowsApplication3/'.  The Web server
does not appear to have the FrontPage server extensions installed."
</p>
        <p>
The solution is quite simple: you need to run VS as an admin. To do this, you can
right click on the shortcut to VS from the start menu and select Run as Administrator. 
</p>
        <p>
If you want to always run VS as admin, do the following:
</p>
        <ul>
          <li>
Go to devenv.exe in the C:\Program Files\Microsoft Visual Studio 8\Common7\IDE directory.</li>
          <li>
Right click and go to properties. 
</li>
          <li>
Select the Compatibility tab.</li>
          <li>
Check the box at the bottom that says Run this program as an administrator (see below).</li>
        </ul>
        <p>
          <img src="http://www.softinsight.com/bnoyes/content/binary/runasadmin.png" />
        </p>
        <p>
The new security protections of UAC are there for a reason. You could just turn it
off and you wouldn't have problems like this in the first place. I'd encourage you
not to do that. Use it as a tool to teach you how to get your work done without admin
privilege to the extent possible. So in this case I prefer to only run VS as an admin
when I need to by doing the right click - Run as Administrator option instead of always
enabling it, but you will have to make these productivity vs security decisions for
yourself. 
<br /></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=435524e7-340c-4b4b-933d-a1c38d27e8ea" />
      </body>
      <title>ClickOnce Publishing from Visual Studio on Windows Vista</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,435524e7-340c-4b4b-933d-a1c38d27e8ea.aspx</guid>
      <link>http://briannoyes.net/2006/11/05/ClickOncePublishingFromVisualStudioOnWindowsVista.aspx</link>
      <pubDate>Sun, 05 Nov 2006 19:27:21 GMT</pubDate>
      <description>&lt;p&gt;
If you haven't experienced Windows Vista yet, it is a very cool operating system,
but there are a lot of lessons to learn in getting up to speed in working in the new
environment. 
&lt;/p&gt;
&lt;p&gt;
The biggest thing to get used to if you haven't been running a non-admin account on
your XP machine is that there are probably a hundred things or more that you get away
with that you don't even know that the reason you get away with it is that you are
an admin.
&lt;/p&gt;
&lt;p&gt;
In Vista, even when logged in with an administrator account, you are still not allowed
to do administrator things without a privilege elevation through a mechanism called
User Access Control (UAC). UAC will seem like a living hell at first because all kinds
of things will stop working for you. For example, if you are only getting to some
files because you are an admin, and an app such as Quicken tries to run and access
those files, you will just get whatever kind of error the app vendor decided to surface
for a file I/O error. However, the best way to approach it is to treat it as a learning
experience to figure out how to avoid running things as admin unless you really need
to (i.e. give your user account permissions to the directories you really need, don't
rely on Admin privilege to give you access).
&lt;/p&gt;
&lt;p&gt;
Another example is when publishing with ClickOnce. When you publish from Visual Studio
to an http address, VS uses Frontpage Server Extensions (FPE) to create the virtual
directory and copy the files to it. First step on Windows Vista is that you need to
have IIS 6 Compatibility enabled (it is not on by default, nor is IIS installed by
default like XP). Once you do that, IIS 7 knows how to look like a Frontpage Server
Extension endpoint. The other thing is that you can only access the web server through
FPE if you are accessing as an admin from VS. 
&lt;/p&gt;
&lt;p&gt;
Even when logged in as an admin, VS will not be running with admin privilege by default.
As a result, when you try to publish a ClickOnce app you will get an obscure error
that says that FPE is not installed on the server. Specifically:
&lt;/p&gt;
&lt;p&gt;
"Failed to connect to 'http://localhost/WindowsApplication3/' with the following error:
Unable to create the Web 'http://localhost/WindowsApplication3/'.&amp;nbsp; The Web server
does not appear to have the FrontPage server extensions installed."
&lt;/p&gt;
&lt;p&gt;
The solution is quite simple: you need to run VS as an admin. To do this, you can
right click on the shortcut to VS from the start menu and select Run as Administrator. 
&lt;/p&gt;
&lt;p&gt;
If you want to always run VS as admin, do the following:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Go to devenv.exe in the C:\Program Files\Microsoft Visual Studio 8\Common7\IDE directory.&lt;/li&gt;
&lt;li&gt;
Right click and go to properties. 
&lt;/li&gt;
&lt;li&gt;
Select the Compatibility tab.&lt;/li&gt;
&lt;li&gt;
Check the box at the bottom that says Run this program as an administrator (see below).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;img src="http://www.softinsight.com/bnoyes/content/binary/runasadmin.png"&gt;
&lt;/p&gt;
&lt;p&gt;
The new security protections of UAC are there for a reason. You could just turn it
off and you wouldn't have problems like this in the first place. I'd encourage you
not to do that. Use it as a tool to teach you how to get your work done without admin
privilege to the extent possible. So in this case I prefer to only run VS as an admin
when I need to by doing the right click - Run as Administrator option instead of always
enabling it, but you will have to make these productivity vs security decisions for
yourself. 
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=435524e7-340c-4b4b-933d-a1c38d27e8ea" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,435524e7-340c-4b4b-933d-a1c38d27e8ea.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=fe63caf8-a84e-4cb4-a784-703835ac327e</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,fe63caf8-a84e-4cb4-a784-703835ac327e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,fe63caf8-a84e-4cb4-a784-703835ac327e.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=fe63caf8-a84e-4cb4-a784-703835ac327e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One scenario people want to support is to have multiple versions of the same application
installed to a single machine/user's account. The <a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=941d2228-3bb5-42fd-8004-c08595821170">guidance
I put together for patterns and practices</a> has a walkthrough of setting this up.
For example, say you have a version 2.0.0.0 of an application that is your production
version, and you publish a new beta version (3.0.0.0) that you want a limited set
of users to access, but those same users need to be able to run both production and
beta side by side through ClickOnce on their machines (perhaps for feature comparison
testing).
</p>
        <p>
The first step is that you will need to have different deployment manifests for the
multiple versions you want a single user to run. You direct the user to launch from
each URL to the different deployment manifests and they will get a separate installation
on their machine... or will they? The answer depends on a hidden aspect of the ClickOnce
runtime regarding what the runtime considers a unique identity for an installed application.
</p>
        <p>
If you are not familiar with the things that ClickOnce does under the covers to install
an application on a client machine, it downloads and caches the deployment manifest,
the application manifest, and all of the application files. Those manifests have to
be signed by a publisher certificate that is cryptographically unique. Additionally,
the installed application has a product name that gets embedded in the deployment
manifest. 
</p>
        <p>
You might be tempted, as I was, to think that a unique product name, combined with
a separate deployment manifest would be sufficient to make the client machine treat
those installs as separate and distinct (such as setting the product names to "MyApp"
and "MyApp - Beta"). Unfortunately you would be wrong, as I was.
</p>
        <p>
There is actually a separate piece of information that the ClickOnce runtime uses
to distinguish one application from another - the application identity is set by an
identity set for the deployment manifest itself. This identity is normally created
by Visual Studio when publishing and is set to the deployment manifest name (i.e.
WindowsApplication1.application). You do not have control from Visual Studio to set
this to anything else. Through the mageui.exe SDK tool, or better yet my Manifest
Manager Utility included with the patterns and practices guidance, you can set this
application identity to any string that you like to uniquely identify multiple published
versions of a single application.
</p>
        <p>
So to address the scenario presented earlier, you can simply set the application identity
to MyApp for one version and MyApp-Beta for the other version, and you will be able
to side-by-side install those two copies of the app on the same machine.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=fe63caf8-a84e-4cb4-a784-703835ac327e" />
      </body>
      <title>ClickOnce Deployment Application Identity</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,fe63caf8-a84e-4cb4-a784-703835ac327e.aspx</guid>
      <link>http://briannoyes.net/2006/11/03/ClickOnceDeploymentApplicationIdentity.aspx</link>
      <pubDate>Fri, 03 Nov 2006 20:30:14 GMT</pubDate>
      <description>&lt;p&gt;
One scenario people want to support is to have multiple versions of the same application
installed to a single machine/user's account. The &lt;a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=941d2228-3bb5-42fd-8004-c08595821170"&gt;guidance
I put together for patterns and practices&lt;/a&gt; has a walkthrough of setting this up.
For example, say you have a version 2.0.0.0 of an application that is your production
version, and you publish a new beta version (3.0.0.0) that you want a limited set
of users to access, but those same users need to be able to run both production and
beta side by side through ClickOnce on their machines (perhaps for feature comparison
testing).
&lt;/p&gt;
&lt;p&gt;
The first step is that you will need to have different deployment manifests for the
multiple versions you want a single user to run. You direct the user to launch from
each URL to the different deployment manifests and they will get a separate installation
on their machine... or will they? The answer depends on a hidden aspect of the ClickOnce
runtime regarding what the runtime considers a unique identity for an installed application.
&lt;/p&gt;
&lt;p&gt;
If you are not familiar with the things that ClickOnce does under the covers to install
an application on a client machine, it downloads and caches the deployment manifest,
the application manifest, and all of the application files. Those manifests have to
be signed by a publisher certificate that is cryptographically unique. Additionally,
the installed application has a product name that gets embedded in the deployment
manifest. 
&lt;/p&gt;
&lt;p&gt;
You might be tempted, as I was, to think that a unique product name, combined with
a separate deployment manifest would be sufficient to make the client machine treat
those installs as separate and distinct (such as setting the product names to "MyApp"
and "MyApp - Beta"). Unfortunately you would be wrong, as I was.
&lt;/p&gt;
&lt;p&gt;
There is actually a separate piece of information that the ClickOnce runtime uses
to distinguish one application from another - the application identity is set by an
identity set for the deployment manifest itself. This identity is normally created
by Visual Studio when publishing and is set to the deployment manifest name (i.e.
WindowsApplication1.application). You do not have control from Visual Studio to set
this to anything else. Through the mageui.exe SDK tool, or better yet my Manifest
Manager Utility included with the patterns and practices guidance, you can set this
application identity to any string that you like to uniquely identify multiple published
versions of a single application.
&lt;/p&gt;
&lt;p&gt;
So to address the scenario presented earlier, you can simply set the application identity
to MyApp for one version and MyApp-Beta for the other version, and you will be able
to side-by-side install those two copies of the app on the same machine.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=fe63caf8-a84e-4cb4-a784-703835ac327e" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,fe63caf8-a84e-4cb4-a784-703835ac327e.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=7ac94f25-c9e1-422d-a1c5-ec592801c223</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,7ac94f25-c9e1-422d-a1c5-ec592801c223.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,7ac94f25-c9e1-422d-a1c5-ec592801c223.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7ac94f25-c9e1-422d-a1c5-ec592801c223</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I recently put together a bunch of guidance
topics for Microsoft Patterns and Practices for doing ClickOnce deployments of CAB-based
applications. This guidance and the sample code is now available as a Community Resource
Kit and will eventually be incorporated into a future release of SCSF.<br /><br />
The resource kit also includes something a lot of people have been asking for - an
example of programming against the manifest APIs in the Microsoft.Build.Tasks.Deployment.ManifestUtilities
namespace. I wrote a Manifest Manager Utility as part of that effort and included
in the download code that makes common tasks such as updating application files a
lot easier. It takes care of signing both manifests at one to make sure they are in
sync, updates the deployment manifest reference to the app manifest and other things
like that. If you need to go beyond what it does, then you now have sample code available
to show you how to work with the APIs.<br /><br />
Another thing included in the kit is an example server side deployment repository
provider that allows you to take over the process of serving up manifests and application
files on the deployment server so that you could retrieve them from anywhere or even
generate some of the files on the fly.<br /><br />
Enjoy!<br /><a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=941d2228-3bb5-42fd-8004-c08595821170">Get
it here!</a><img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=7ac94f25-c9e1-422d-a1c5-ec592801c223" /></body>
      <title>SCSF ClickOnce Guidance Available</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,7ac94f25-c9e1-422d-a1c5-ec592801c223.aspx</guid>
      <link>http://briannoyes.net/2006/11/02/SCSFClickOnceGuidanceAvailable.aspx</link>
      <pubDate>Thu, 02 Nov 2006 14:29:54 GMT</pubDate>
      <description>I recently put together a bunch of guidance topics for Microsoft Patterns and Practices for doing ClickOnce deployments of CAB-based applications. This guidance and the sample code is now available as a Community Resource Kit and will eventually be incorporated into a future release of SCSF.&lt;br&gt;
&lt;br&gt;
The resource kit also includes something a lot of people have been asking for - an
example of programming against the manifest APIs in the Microsoft.Build.Tasks.Deployment.ManifestUtilities
namespace. I wrote a Manifest Manager Utility as part of that effort and included
in the download code that makes common tasks such as updating application files a
lot easier. It takes care of signing both manifests at one to make sure they are in
sync, updates the deployment manifest reference to the app manifest and other things
like that. If you need to go beyond what it does, then you now have sample code available
to show you how to work with the APIs.&lt;br&gt;
&lt;br&gt;
Another thing included in the kit is an example server side deployment repository
provider that allows you to take over the process of serving up manifests and application
files on the deployment server so that you could retrieve them from anywhere or even
generate some of the files on the fly.&lt;br&gt;
&lt;br&gt;
Enjoy!&lt;br&gt;
&lt;a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=941d2228-3bb5-42fd-8004-c08595821170"&gt;Get
it here!&lt;/a&gt;&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=7ac94f25-c9e1-422d-a1c5-ec592801c223" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,7ac94f25-c9e1-422d-a1c5-ec592801c223.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=5efc94df-a619-4bbd-b401-34d0db3afe5a</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,5efc94df-a619-4bbd-b401-34d0db3afe5a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,5efc94df-a619-4bbd-b401-34d0db3afe5a.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5efc94df-a619-4bbd-b401-34d0db3afe5a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've created the home page for my new book Smart Client Deployment with ClickOnce,
which will be available in printed form in a couple of months. It should also soon
be available on Safari Rough cuts. I'll blog an entry when that happens with a link,
so stay tuned. 
</p>
        <p>
You can see the book page and get the samples here: <a href="http://www.softinsight.com/clickoncebook">http://www.softinsight.com/clickoncebook</a></p>
        <p>
Many of the samples may not make a lot of sense without the book to walk you through
the process steps to use them for a particular ClickOnce deployment scenario, so make
sure to pick up a copy. 
</p>
        <p>
It is already available for purchase on Amazon: <a href="http://www.amazon.com/Smart-Client-Deployment-ClickOnce-Applications/dp/0321197690/sr=8-1/qid=1161618037/ref=pd_bbs_sr_1/102-0199676-4803377?ie=UTF8">http://www.amazon.com/Smart-Client-Deployment-ClickOnce-Applications/dp/0321197690/sr=8-1/qid=1161618037/ref=pd_bbs_sr_1/102-0199676-4803377?ie=UTF8</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5efc94df-a619-4bbd-b401-34d0db3afe5a" />
      </body>
      <title>ClickOnce Book Site and Samples up</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,5efc94df-a619-4bbd-b401-34d0db3afe5a.aspx</guid>
      <link>http://briannoyes.net/2006/10/23/ClickOnceBookSiteAndSamplesUp.aspx</link>
      <pubDate>Mon, 23 Oct 2006 15:41:56 GMT</pubDate>
      <description>&lt;p&gt;
I've created the home page for my new book Smart Client Deployment with ClickOnce,
which will be available in printed form in a couple of months. It should also soon
be available on Safari Rough cuts. I'll blog an entry when that happens with a link,
so stay tuned. 
&lt;/p&gt;
&lt;p&gt;
You can see the book page and get the samples here: &lt;a href="http://www.softinsight.com/clickoncebook"&gt;http://www.softinsight.com/clickoncebook&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Many of the samples may not make a lot of sense without the book to walk you through
the process steps to use them for a particular ClickOnce deployment scenario, so make
sure to pick up a copy. 
&lt;/p&gt;
&lt;p&gt;
It is already available for purchase on Amazon: &lt;a href="http://www.amazon.com/Smart-Client-Deployment-ClickOnce-Applications/dp/0321197690/sr=8-1/qid=1161618037/ref=pd_bbs_sr_1/102-0199676-4803377?ie=UTF8"&gt;http://www.amazon.com/Smart-Client-Deployment-ClickOnce-Applications/dp/0321197690/sr=8-1/qid=1161618037/ref=pd_bbs_sr_1/102-0199676-4803377?ie=UTF8&lt;/a&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5efc94df-a619-4bbd-b401-34d0db3afe5a" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,5efc94df-a619-4bbd-b401-34d0db3afe5a.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=7c174f66-364c-4a4c-a077-7f760e59c29a</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,7c174f66-364c-4a4c-a077-7f760e59c29a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,7c174f66-364c-4a4c-a077-7f760e59c29a.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7c174f66-364c-4a4c-a077-7f760e59c29a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We (at IDesign (http://www.idesign.net)) are currently in the middle of a .NET 3.0
Roadshow (http://www.net3roadshow.com) across six cities in the U.S. 
</p>
        <p>
In the show, we cover a full day + 1 session of WCF, 2 sessions of WF, 1 session of
CardSpace, and 1 session of WPF. I am doing the WF and WPF sessions. 
</p>
        <p>
A common question that is coming up is why this weighted mix instead of a more even
spread of coverage? 
</p>
        <p>
It has nothing to do with the complexity of the topics. WF is equally as complex and
capable for what it is designed to address as WCF is for its purposes. WPF is also
very complex and capable. CardSpace has a much narrower focus than the others, but
has a fair amount of complexity surrounding it as well. 
</p>
        <p>
The mix we came up with has a number of reasons behind it, but one of the most important
factors was considering how many development organizations should be considering adoption
of each technology at this point in time. 
</p>
        <p>
WCF is a remote communications platform that is rock solid, easy to use for simple
scenarios, yet has a million knobs and dials that you can twiddle to address almost
any remote communications needs. My perspective on WCF is that if you are writing
any application from this day forward (even though WCF won't release until next month)
that needs to make remote calls, you should be using WCF and forget that .NET Remoting,
ASP.NET Web Services, and Enterprise Services exist. Obviously that has to be tempered
with your ability to get .NET 3.0 deployed to the target platforms. But unless there
is an unmovable roadblock to you doing that, it is worth your while to make the switch
to WCF as soon as possible. Every application of any significant scale has at least
a cross process hop to deal with somewhere in its architecture, and WCF works great
for addressing those simple scenarios as well as full enterprise scale SOA apps. So
I feel WCF should be adopted by most development organizations as soon as possible. 
</p>
        <p>
WF is an extremely capable platform for developing workflow driven processing in your
enterprise applications. It is very stable and ready for adoption by those who need
it. The only downside to WF is that because of some the capabilities that are built
in to WF to address enterprise requirements (persistence, tracking, and scheduling
to name a few), I don't think you can really say that simple scenarios are easy to
implement with WF. So it takes fairly complex enterprise application requirements
to justify the adoption of WF in your application. Additionally, not every application
out there really has workflows of any significance (there are a lot of pure CRUD apps
still out there). As a result, I think the number of development organizations that
should be adopting WF at this time is smaller by at least 1/2 than those who should
be looking at WCF. 
</p>
        <p>
WPF is a harder one to nail down, and my opinions are likely to incite some flames.
I think that there are a lot fewer development organizations that should be bothering
with WPF for the near future. The reason mainly has to do with productivity. Even
though the runtime bits for WPF will be part of the .NET 3.0 release, the development
tools for designing WPF UIs will not. Microsoft is hard at work on a WPF designer
for Visual Studio that will hopefully release sometime next year. Alongside that effort
is the Expression Suite that includes the Interactive Designer product for allowing
designers to put together WPF UIs that they can hand over to developers to complete
the hook up of the dynamic behaviors of the application from code. At this point in
time and for at least the next 6 months, those products will only be available in
a Beta form. 
</p>
        <p>
Even with the Visual Studio WPF designer, there is an awful lot missing at this point
when compared to the Windows Forms or ASP.NET designers for rapidly designing and
implementing UI applications. Even once they release next year, I suspect they will
still feel like a v 1.0 designer. Think about how the Windows Forms designer in VS
2002 compares with the VS 2005 designer. Night and day in terms of productivity and
producing good maintainable code. Hopefully the gap will not be that large. At the
current time, if you want to write WPF apps, you will mostly be banging out XAML markup
by hand (thankfully at least with some great intellisense assistance). The current
CTP of the Visual Studio Orcas WPF designer does at least work pretty well for visualizing
the result of your markup, but it is not really useful for doing a graphical drag/drop
layout of your form nor for getting things like data bindings, styles, and resources
hooked up. 
</p>
        <p>
You also have to consider how bad do you need/want what WPF offers. One of the biggest
draws of WPF is that it allows you to write UI applications that are more visually
compelling. In short, you could say WPF allows you to create eye-candy that you either
couldn't do before or that was orders of magnitude harder to do. What you have to
ask yourself is how bad you really need eye candy? If you are building consumer applications,
then definitely eye candy is important. The difference between someone buying/using
your app instead of your competitors is often a simple matter of whether they look
at it, get a glazed look in their eye, and say "Keewwlll....." But if you are building
internal enterprise business applications that show and manipulate data, do you really
need pulsating 3D bar charts? Maybe, but it is a lot harder to sell that as a "requirement"
than "I need my web server to be separated from my application server for security/scalability
reasons" (i.e. I need WCF). 
</p>
        <p>
Don't get me wrong - I would love to incorporate many WPF features into every Windows
app I build from today forward. Using things like styling and subtle opacity animations
can make any application look better and more intuitive. Once you have adopted WPF,
some of the other features of WPF such as the ability to use Style, Data, and Control
Templates is very powerful and will be a welcome new model compared to Windows Forms.
But the relative number of apps out there that really need embedded 3D modeling or
video I think you can say is considerably less than the number of applications that
need to do a cross process, machine, or network hop. 
</p>
        <p>
Compounding the problem is the fact that adopting WPF implies that you think you can
get .NET 3.0 deployed to all of your client desktop machines to support your application.
For an enterprise, that may be true if your organization is savvy about the benefits
of adopting new technology and not overly paranoid about the risks of deploying a
new version of the .NET Framework. For the open consumer market (yes, the primary
ones who would drive you to want to incorporate eye-candy), that is going to be a
much tougher nut to crack. For a back end server that you want to run WCF or WF on,
having the control to deploy .NET 3.0 to that machine should be a lot easier to satisfy. 
</p>
        <p>
So as a result of the current maturity of the tools (equating directly to productivity),
the relative importance of the completely new capabilities WPF provides compared to
Windows Forms or ASP.NET, and the ability to guarantee that .NET 3.0 is installed
on the client machine, I would say that a lot less people should be jumping on WPF
for the near term. Once we have a good, near production designer for WPF apps in Visual
Studio, my tune will change. Also, for those that really need some aspects of WPF
now, by all means go for it. But my primary strategy for most smart client apps at
this point would be to build it as a Windows Forms application to address the bulk
of your requirements (and complete them in a reasonable timeframe), and then incorporate
things like 3D, video, animations, etc. as needed using WPF controls embedded in the
Windows application through interop (WPF controls can be hosted in a Windows Forms
application and vice versa). 
</p>
        <p>
CardSpace's role in the mix is easier to address because it only really addresses
one set of requirements: authentication and identity management. It does it well and
provides a great new model for identity management that you should definitely be getting
familiar with and thinking about how to incorporate it into your applications. CardSpace
too faces some adoption challenges since it requires both a service or site that supports
CardSpace and a client that has IE 7 or a smart client app designed to work with CardSpace.
It definitely warranted coverage in the roadshow and Michele does an awesome session
on it. But it definitely did not warrant more than one session compared to overall
complexity and capabilities of the technology compared to WCF, WF, and WPF. 
</p>
        <p>
These were some of the considerations that drive the mix of sessions we are offering
in the roadshow. 
</p>
        <p>
I'd be very interested in some comments on other perspectives on WCF, WPF, or WF adoption. 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=7c174f66-364c-4a4c-a077-7f760e59c29a" />
      </body>
      <title>.NET 3.0 Adoption and the current relative importance of its pieces</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,7c174f66-364c-4a4c-a077-7f760e59c29a.aspx</guid>
      <link>http://briannoyes.net/2006/10/16/NET30AdoptionAndTheCurrentRelativeImportanceOfItsPieces.aspx</link>
      <pubDate>Mon, 16 Oct 2006 20:59:13 GMT</pubDate>
      <description>&lt;p&gt;
We (at IDesign (http://www.idesign.net)) are currently in the middle of a .NET 3.0
Roadshow (http://www.net3roadshow.com) across six cities in the U.S. 
&lt;/p&gt;
&lt;p&gt;
In the show, we cover a full day + 1 session of WCF, 2 sessions of WF, 1 session of
CardSpace, and 1 session of WPF. I am doing the WF and WPF sessions. 
&lt;/p&gt;
&lt;p&gt;
A common question that is coming up is why this weighted mix instead of a more even
spread of coverage? 
&lt;/p&gt;
&lt;p&gt;
It has nothing to do with the complexity of the topics. WF is equally as complex and
capable for what it is designed to address as WCF is for its purposes. WPF is also
very complex and capable. CardSpace has a much narrower focus than the others, but
has a fair amount of complexity surrounding it as well. 
&lt;/p&gt;
&lt;p&gt;
The mix we came up with has a number of reasons behind it, but one of the most important
factors was considering how many development organizations should be considering adoption
of each technology at this point in time. 
&lt;/p&gt;
&lt;p&gt;
WCF is a remote communications platform that is rock solid, easy to use for simple
scenarios, yet has a million knobs and dials that you can twiddle to address almost
any remote communications needs. My perspective on WCF is that if you are writing
any application from this day forward (even though WCF won't release until next month)
that needs to make remote calls, you should be using WCF and forget that .NET Remoting,
ASP.NET Web Services, and Enterprise Services exist. Obviously that has to be tempered
with your ability to get .NET 3.0 deployed to the target platforms. But unless there
is an unmovable roadblock to you doing that, it is worth your while to make the switch
to WCF as soon as possible. Every application of any significant scale has at least
a cross process hop to deal with somewhere in its architecture, and WCF works great
for addressing those simple scenarios as well as full enterprise scale SOA apps. So
I feel WCF should be adopted by most development organizations as soon as possible. 
&lt;/p&gt;
&lt;p&gt;
WF is an extremely capable platform for developing workflow driven processing in your
enterprise applications. It is very stable and ready for adoption by those who need
it. The only downside to WF is that because of some the capabilities that are built
in to WF to address enterprise requirements (persistence, tracking, and scheduling
to name a few), I don't think you can really say that simple scenarios are easy to
implement with WF. So it takes fairly complex enterprise application requirements
to justify the adoption of WF in your application. Additionally, not every application
out there really has workflows of any significance (there are a lot of pure CRUD apps
still out there). As a result, I think the number of development organizations that
should be adopting WF at this time is smaller by at least 1/2 than those who should
be looking at WCF. 
&lt;/p&gt;
&lt;p&gt;
WPF is a harder one to nail down, and my opinions are likely to incite some flames.
I think that there are a lot fewer development organizations that should be bothering
with WPF for the near future. The reason mainly has to do with productivity. Even
though the runtime bits for WPF will be part of the .NET 3.0 release, the development
tools for designing WPF UIs will not. Microsoft is hard at work on a WPF designer
for Visual Studio that will hopefully release sometime next year. Alongside that effort
is the Expression Suite that includes the Interactive Designer product for allowing
designers to put together WPF UIs that they can hand over to developers to complete
the hook up of the dynamic behaviors of the application from code. At this point in
time and for at least the next 6 months, those products will only be available in
a Beta form. 
&lt;/p&gt;
&lt;p&gt;
Even with the Visual Studio WPF designer, there is an awful lot missing at this point
when compared to the Windows Forms or ASP.NET designers for rapidly designing and
implementing UI applications. Even once they release next year, I suspect they will
still feel like a v 1.0 designer. Think about how the Windows Forms designer in VS
2002 compares with the VS 2005 designer. Night and day in terms of productivity and
producing good maintainable code. Hopefully the gap will not be that large. At the
current time, if you want to write WPF apps, you will mostly be banging out XAML markup
by hand (thankfully at least with some great intellisense assistance). The current
CTP of the Visual Studio Orcas WPF designer does at least work pretty well for visualizing
the result of your markup, but it is not really useful for doing a graphical drag/drop
layout of your form nor for getting things like data bindings, styles, and resources
hooked up. 
&lt;/p&gt;
&lt;p&gt;
You also have to consider how bad do you need/want what WPF offers. One of the biggest
draws of WPF is that it allows you to write UI applications that are more visually
compelling. In short, you could say WPF allows you to create eye-candy that you either
couldn't do before or that was orders of magnitude harder to do. What you have to
ask yourself is how bad you really need eye candy? If you are building consumer applications,
then definitely eye candy is important. The difference between someone buying/using
your app instead of your competitors is often a simple matter of whether they look
at it, get a glazed look in their eye, and say "Keewwlll....." But if you are building
internal enterprise business applications that show and manipulate data, do you really
need pulsating 3D bar charts? Maybe, but it is a lot harder to sell that as a "requirement"
than "I need my web server to be separated from my application server for security/scalability
reasons" (i.e. I need WCF). 
&lt;/p&gt;
&lt;p&gt;
Don't get me wrong - I would love to incorporate many WPF features into every Windows
app I build from today forward. Using things like styling and subtle opacity animations
can make any application look better and more intuitive. Once you have adopted WPF,
some of the other features of WPF such as the ability to use Style, Data, and Control
Templates is very powerful and will be a welcome new model compared to Windows Forms.
But the relative number of apps out there that really need embedded 3D modeling or
video I think you can say is considerably less than the number of applications that
need to do a cross process, machine, or network hop. 
&lt;/p&gt;
&lt;p&gt;
Compounding the problem is the fact that adopting WPF implies that you think you can
get .NET 3.0 deployed to all of your client desktop machines to support your application.
For an enterprise, that may be true if your organization is savvy about the benefits
of adopting new technology and not overly paranoid about the risks of deploying a
new version of the .NET Framework. For the open consumer market (yes, the primary
ones who would drive you to want to incorporate eye-candy), that is going to be a
much tougher nut to crack. For a back end server that you want to run WCF or WF on,
having the control to deploy .NET 3.0 to that machine should be a lot easier to satisfy. 
&lt;/p&gt;
&lt;p&gt;
So as a result of the current maturity of the tools (equating directly to productivity),
the relative importance of the completely new capabilities WPF provides compared to
Windows Forms or ASP.NET, and the ability to guarantee that .NET 3.0 is installed
on the client machine, I would say that a lot less people should be jumping on WPF
for the near term. Once we have a good, near production designer for WPF apps in Visual
Studio, my tune will change. Also, for those that really need some aspects of WPF
now, by all means go for it. But my primary strategy for most smart client apps at
this point would be to build it as a Windows Forms application to address the bulk
of your requirements (and complete them in a reasonable timeframe), and then incorporate
things like 3D, video, animations, etc. as needed using WPF controls embedded in the
Windows application through interop (WPF controls can be hosted in a Windows Forms
application and vice versa). 
&lt;/p&gt;
&lt;p&gt;
CardSpace's role in the mix is easier to address because it only really addresses
one set of requirements: authentication and identity management. It does it well and
provides a great new model for identity management that you should definitely be getting
familiar with and thinking about how to incorporate it into your applications. CardSpace
too faces some adoption challenges since it requires both a service or site that supports
CardSpace and a client that has IE 7 or a smart client app designed to work with CardSpace.
It definitely warranted coverage in the roadshow and Michele does an awesome session
on it. But it definitely did not warrant more than one session compared to overall
complexity and capabilities of the technology compared to WCF, WF, and WPF. 
&lt;/p&gt;
&lt;p&gt;
These were some of the considerations that drive the mix of sessions we are offering
in the roadshow. 
&lt;/p&gt;
&lt;p&gt;
I'd be very interested in some comments on other perspectives on WCF, WPF, or WF adoption. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=7c174f66-364c-4a4c-a077-7f760e59c29a" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,7c174f66-364c-4a4c-a077-7f760e59c29a.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Community</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=72371a75-34ef-475a-bb9d-99f1025437ff</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,72371a75-34ef-475a-bb9d-99f1025437ff.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,72371a75-34ef-475a-bb9d-99f1025437ff.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=72371a75-34ef-475a-bb9d-99f1025437ff</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This week and next my colleagues Juval Lowy and Michele Leroux Bustamante (<a href="http://dasblonde.com">http://dasblonde.com</a>)
and I are conducting a two day seminar on .NET 3.0 development as a roadshow in 6
cities across the country (LA, San Jose, Chicago, DC, New York, and Boston). We have
completed LA and San Jose with great feedback from the crowd and are in the middle
of the Chicago show.
</p>
        <p>
You can grab the slides and demos for my WF and WPF sessions here:   Slides   
Demos<br /><a href="http://www.softinsight.com/downloads/NET30RoadShow/Slides.zip">http://www.softinsight.com/downloads/NET30RoadShow/Slides.zip</a><br /><a href="http://www.softinsight.com/downloads/NET30RoadShow/democode.zip">http://www.softinsight.com/downloads/NET30RoadShow/democode.zip</a></p>
        <p>
In the WPF talk, I demonstrated several apps others have written that do a good job
of displaying some of the awesome graphics capabilities of WPF. Those apps can be
found through the links below. I also mentioned a great document for getting up to
speed on WPF when you know Windows Forms 2.0 capabilities well. That link is below
as well.
</p>
        <p>
Enjoy!
</p>
        <p>
Cine.View: A WPF viewing application that exposes the NetFlix catalog and ordering
capabilities created by the thirteen23 company. They also have a great viewer for
Flickr.<br /><a href="http://www.thirteen23.com/">http://www.thirteen23.com/</a></p>
        <p>
New York Times Reader: A WPF content application that provides a rich browsing and
reading experience for the paper's news content online in a Windows application.<br /><a href="http://firstlook.nytimes.com">http://firstlook.nytimes.com</a><br />
 <br />
Karen Corby's Woodgrove Finance application: This is a WPF XAML Browser application
that provides rich visualization of stock market data in a multi-paned WPF app that
runs in the browser.<br /><a href="http://scorbs.com/">http://scorbs.com/</a></p>
        <p>
Keep an eye on <a href="http://wpf.netfx3.com">http://wpf.netfx3.com</a> for some
more upcoming samples that will wow your eyes.
</p>
        <p>
The WPF for Windows Developers document from Mark Boulter and Jessica Fosler can be
found on Jessica Fosler's blog:<br /><a href="http://blogs.msdn.com/jfoscoding/articles/765135.aspx">http://blogs.msdn.com/jfoscoding/articles/765135.aspx</a><br /></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=72371a75-34ef-475a-bb9d-99f1025437ff" />
      </body>
      <title>.NET 3.0 Roadshow Slides, Demos, and Links</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,72371a75-34ef-475a-bb9d-99f1025437ff.aspx</guid>
      <link>http://briannoyes.net/2006/10/13/NET30RoadshowSlidesDemosAndLinks.aspx</link>
      <pubDate>Fri, 13 Oct 2006 03:36:01 GMT</pubDate>
      <description>&lt;p&gt;
This week and next my colleagues Juval Lowy and Michele Leroux Bustamante (&lt;a href="http://dasblonde.com"&gt;http://dasblonde.com&lt;/a&gt;)
and I are conducting a two day seminar on .NET 3.0 development as a roadshow in 6
cities across the country (LA, San Jose, Chicago, DC, New York, and Boston). We have
completed LA and San Jose with great feedback from the crowd and are in the middle
of the Chicago show.
&lt;/p&gt;
&lt;p&gt;
You can grab the slides and demos for my WF and WPF sessions here:&amp;nbsp;&amp;nbsp; Slides&amp;nbsp;&amp;nbsp;&amp;nbsp;
Demos&lt;br&gt;
&lt;a href="http://www.softinsight.com/downloads/NET30RoadShow/Slides.zip"&gt;http://www.softinsight.com/downloads/NET30RoadShow/Slides.zip&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://www.softinsight.com/downloads/NET30RoadShow/democode.zip"&gt;http://www.softinsight.com/downloads/NET30RoadShow/democode.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
In the WPF talk, I demonstrated several apps others have written that do a good job
of displaying some of the awesome graphics capabilities of WPF. Those apps can be
found through the links below. I also mentioned a great document for getting up to
speed on WPF when you know Windows Forms 2.0 capabilities well. That link is below
as well.
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;p&gt;
Cine.View: A WPF viewing application that exposes the NetFlix catalog and ordering
capabilities created by the thirteen23 company. They also have a great viewer for
Flickr.&lt;br&gt;
&lt;a href="http://www.thirteen23.com/"&gt;http://www.thirteen23.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
New York Times Reader: A WPF content application that provides a rich browsing and
reading experience for the paper's news content online in a Windows application.&lt;br&gt;
&lt;a href="http://firstlook.nytimes.com"&gt;http://firstlook.nytimes.com&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&lt;br&gt;
Karen Corby's Woodgrove Finance application: This is a WPF XAML Browser application
that provides rich visualization of stock market data in a multi-paned WPF app that
runs in the browser.&lt;br&gt;
&lt;a href="http://scorbs.com/"&gt;http://scorbs.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Keep an eye on &lt;a href="http://wpf.netfx3.com"&gt;http://wpf.netfx3.com&lt;/a&gt; for some
more upcoming samples that will wow your eyes.
&lt;/p&gt;
&lt;p&gt;
The WPF for Windows Developers document from Mark Boulter and Jessica Fosler can be
found on Jessica Fosler's blog:&lt;br&gt;
&lt;a href="http://blogs.msdn.com/jfoscoding/articles/765135.aspx"&gt;http://blogs.msdn.com/jfoscoding/articles/765135.aspx&lt;/a&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=72371a75-34ef-475a-bb9d-99f1025437ff" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,72371a75-34ef-475a-bb9d-99f1025437ff.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Speaking</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=5cea47e6-f28d-4a6b-9466-41fa16c3f1d0</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,5cea47e6-f28d-4a6b-9466-41fa16c3f1d0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,5cea47e6-f28d-4a6b-9466-41fa16c3f1d0.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5cea47e6-f28d-4a6b-9466-41fa16c3f1d0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I wrote a whitepaper on administering ClickOnce deployments earlier this year for
the product team. It took a bit for it to get through the MSDN publishing process,
but it is finally available.
</p>
        <p>
 
</p>
        <p>
You can check it out here: <font size="2"></font></p>
        <p>
          <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/admincodep.asp">
            <u>
              <font color="#0000ff" size="2">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/admincodep.asp
</font>
            </u>
          </a>
        </p>
        <p>
This whitepaper covers handling tracking and authentication of users on the deployment
server, as well as giving an explanation of what is going on under the covers during
the publishing and deployment process.
</p>
        <p>
Enjoy!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5cea47e6-f28d-4a6b-9466-41fa16c3f1d0" />
      </body>
      <title>Administering ClickOnce Deployments whitepaper</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,5cea47e6-f28d-4a6b-9466-41fa16c3f1d0.aspx</guid>
      <link>http://briannoyes.net/2006/10/05/AdministeringClickOnceDeploymentsWhitepaper.aspx</link>
      <pubDate>Thu, 05 Oct 2006 11:06:00 GMT</pubDate>
      <description>&lt;p&gt;
I wrote a whitepaper on administering ClickOnce deployments earlier this year for
the product team. It took a bit for it to get through the MSDN publishing process,
but it is finally available.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
You can check it out here: &lt;font size=2&gt;
&lt;/p&gt;
&lt;p&gt;
&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/admincodep.asp"&gt;&lt;u&gt;&lt;font color=#0000ff size=2&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/admincodep.asp
&lt;/u&gt;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This whitepaper covers handling tracking and authentication of users on the deployment
server, as well as giving an explanation of what is going on under the covers during
the publishing and deployment process.
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5cea47e6-f28d-4a6b-9466-41fa16c3f1d0" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,5cea47e6-f28d-4a6b-9466-41fa16c3f1d0.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=6b5698ab-e8f6-46b0-a286-b221b0bebe1e</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,6b5698ab-e8f6-46b0-a286-b221b0bebe1e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,6b5698ab-e8f6-46b0-a286-b221b0bebe1e.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6b5698ab-e8f6-46b0-a286-b221b0bebe1e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm very pleased to announce that my ClickOnce book is done. I still have to go through
the production cycle, which involves reviewing and responding to changes and recommendations
by the copy editors. But the content is done, tech reviewed, and ready to go other
than that. The cover has been designed and is looking pretty sweet:
</p>
        <p>
 <img style="WIDTH: 281px; HEIGHT: 367px" height="605" alt="Book cover" hspace="0" src="http://www.softinsight.com/clickoncebook/ClickOnceCover.png" width="282" align="baseline" border="0" /></p>
        <p>
It was actually the publisher's idea to incorporate an aircraft on the cover, which
I of course loved with <a href="http://www.softinsight.com/LifeBeforeProgramming.aspx">my
background flying F-14's</a>. It actually makes a lot of sense if you know much about
the mission of naval aviation. Our job was to deploy - deploy on the carrier to bring
the military might of the US to wherever it was needed, and to deploy weapons on target.
ClickOnce is about deploying a different kind of weapon (the smart client app
you write) on target (the client desktop). But the metaphor fits in my mind.
</p>
        <p>
The book should be up on Rough Cuts (<a href="http://my.safaribooksonline.com/roughcuts">http://my.safaribooksonline.com/roughcuts</a>)
in the very near future in case you want to get your hands on it sooner than when
it comes out in print (probably January by the time we get through production).
</p>
        <p>
There is nothing quite like the feeling of finishing a book after many months of having
it hanging over your head as that thing you gotta find time for. Now I can tend to
the many projects I have sidelined while trying to wrap this book up while maintaining
a full consulting load. My wife Robin will be quite glad that I don't have "the book"
as an excuse any more. :)
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=6b5698ab-e8f6-46b0-a286-b221b0bebe1e" />
      </body>
      <title>Smart Client Deployment with ClickOnce - Final Manuscript Complete!</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,6b5698ab-e8f6-46b0-a286-b221b0bebe1e.aspx</guid>
      <link>http://briannoyes.net/2006/09/06/SmartClientDeploymentWithClickOnceFinalManuscriptComplete.aspx</link>
      <pubDate>Wed, 06 Sep 2006 20:47:40 GMT</pubDate>
      <description>&lt;p&gt;
I'm very pleased to announce that my ClickOnce book is done. I still have to go through
the production cycle, which involves reviewing and responding to changes and recommendations
by the copy editors. But the content is done, tech reviewed, and ready to go other
than that. The cover has been designed and is looking pretty sweet:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;img style="WIDTH: 281px; HEIGHT: 367px" height=605 alt="Book cover" hspace=0 src="http://www.softinsight.com/clickoncebook/ClickOnceCover.png" width=282 align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
It was actually the publisher's idea to incorporate an aircraft on the cover, which
I of course loved with &lt;a href="http://www.softinsight.com/LifeBeforeProgramming.aspx"&gt;my
background flying F-14's&lt;/a&gt;. It actually makes a lot of sense if you know much about
the mission of naval aviation. Our job was to deploy - deploy on the carrier to bring
the military might of the US to wherever it was needed, and to deploy weapons on target.
ClickOnce is about deploying a different kind of weapon&amp;nbsp;(the smart client app
you write) on target (the client desktop). But the metaphor fits in my mind.
&lt;/p&gt;
&lt;p&gt;
The book should be up on&amp;nbsp;Rough Cuts (&lt;a href="http://my.safaribooksonline.com/roughcuts"&gt;http://my.safaribooksonline.com/roughcuts&lt;/a&gt;)
in the very near future in case you want to get your hands on it sooner than when
it comes out in print (probably January by the time we get through production).
&lt;/p&gt;
&lt;p&gt;
There is nothing quite like the feeling of finishing a book after many months of having
it hanging over your head as that thing you gotta find time for. Now I can tend to
the many projects I have sidelined while trying to wrap this book up while maintaining
a full consulting load. My wife Robin will be quite glad that I don't have "the book"
as an excuse any more. :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=6b5698ab-e8f6-46b0-a286-b221b0bebe1e" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,6b5698ab-e8f6-46b0-a286-b221b0bebe1e.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=bf57a5a6-6028-4d73-9ac0-e4c44ae777e2</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,bf57a5a6-6028-4d73-9ac0-e4c44ae777e2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,bf57a5a6-6028-4d73-9ac0-e4c44ae777e2.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=bf57a5a6-6028-4d73-9ac0-e4c44ae777e2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I'm very excited to announce that Mark
Michaelis (http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=3) has joined
our ranks at IDesign. I've had the pleasure of knowing and working with Mark for several
years now through various system design review and early adopter program teams at
Microsoft. He is a brilliant guy, has a great book (Essential C# 2.0), speaks at conferences,
writes articles, and is a natural fit for what we do at IDesign. I'm sure you will
be seeing more and more of his name in the community. Welcome aboard Mark!<img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=bf57a5a6-6028-4d73-9ac0-e4c44ae777e2" /></body>
      <title>New IDesign Member - Mark Michaelis</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,bf57a5a6-6028-4d73-9ac0-e4c44ae777e2.aspx</guid>
      <link>http://briannoyes.net/2006/09/03/NewIDesignMemberMarkMichaelis.aspx</link>
      <pubDate>Sun, 03 Sep 2006 14:52:42 GMT</pubDate>
      <description>I'm very excited to announce that Mark Michaelis (http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=3) has joined our ranks at IDesign. I've had the pleasure of knowing and working with Mark for several years now through various system design review and early adopter program teams at Microsoft. He is a brilliant guy, has a great book (Essential C# 2.0), speaks at conferences, writes articles, and is a natural fit for what we do at IDesign. I'm sure you will be seeing more and more of his name in the community.

Welcome aboard Mark!&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=bf57a5a6-6028-4d73-9ac0-e4c44ae777e2" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,bf57a5a6-6028-4d73-9ac0-e4c44ae777e2.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=5e4dd2df-2d4b-4f03-a3ce-99c3c7b9202c</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,5e4dd2df-2d4b-4f03-a3ce-99c3c7b9202c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,5e4dd2df-2d4b-4f03-a3ce-99c3c7b9202c.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5e4dd2df-2d4b-4f03-a3ce-99c3c7b9202c</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <title>Understanding Windows Workflow Foundation (WF) and its complexities</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,5e4dd2df-2d4b-4f03-a3ce-99c3c7b9202c.aspx</guid>
      <link>http://briannoyes.net/2006/08/16/UnderstandingWindowsWorkflowFoundationWFAndItsComplexities.aspx</link>
      <pubDate>Wed, 16 Aug 2006 20:57:57 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;I gave a talk at the Greensville
Spartanburg Developers Guild last night on Windows Workflow Foundation. The talk covers
the basics of WF, including the fact that WF is not basic at all, it has a lot of
complexities that have to be mastered to build real applications. There is a lot of
power there and it makes sense to use it for workflow oriented enterprise applications,
but this is not something you decide to adopt for a couple of conditionals and a loop
in your business processing layer.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;You can get the slides and demos
here:&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.softinsight.com/downloads/INETA/BuildProcessDrivenApplicationswithWF.pdf"&gt;Slides&lt;/a&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.softinsight.com/downloads/INETA/WFIntrodemos.zip"&gt;Demos&lt;/a&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The more I work with WF, the more
comfortable I get with it, but also the more I become convinced that they need a WF-Lite
version. There are several key things I highlight in this talk that seem much more
complex than they need to be. I understand the reasoning of some of these things,
mostly tied to the fact that:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;-&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;WF
manages workflow scheduling and execution using threads from the thread pool&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;-&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;WF
supports dehydrating your workflow when it is idle, persisting it to a persistence
provider (SQL Server supported out of the box), and unloading it from memory&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;font face="Times New Roman"&gt;&lt;span style="mso-list: Ignore"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;-&lt;/font&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color=#000000 size=3&gt;WF
supports logging tracking information to a persistent store to know what workflows/activities
are running when and what their state is.&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The thing is that not all systems
that could benefit from the abstracted design model of WF need these things. But by
having these things, it means that certain aspects, particularly communicating with
the executing workflow, are much harder than calling from one chunk of code to another
in a standard .NET application. If we had a WF-Lite that provided the design time
experience (with improvements… see below), but let the app control workflow instantiation
and synchronous execution, this technology could apply to even more applications than
it will in its current incarnation.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Some of the things that I find people
have the hardest time groking are:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;1. Presentation of workflow constructs
as "Properties". A property is a first class construct of a type in .NET. It has a
very precise meaning, as compared to events and methods. In WF, there are a lot of
things that are exposed in the designer through the Properties window that are not
really properties. They are events or event handler methods that are in your workflow
or activities that you are hooking up. Event handlers should show up in the events
view to be consistent with other design experiences in VS, and because that is where
they belong. Instead, they show up in both the properties view and sometimes in the
events view and it makes it confusing as a coder what the heck the designer is creating
for you. WF is for developers, so speak the developers lingo dammit.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;2. Code Conditions - a bool is just
a bool. If you need to hook up an activity that depends on a condition (i.e. IfElse,
While, ConditionalActivityGroup, etc.), you should be able to define either a method
that returns a bool and point to it, or you should be able to define a bool property
and point to it. The model of having to have an event defined that takes a ConditionalEventArgs,
hooking up an event handler to that event, and then setting the event argument Result
property to true/false just leaves people going "Whahuhhhh????"&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;3. HandleExternalEvent/CallExternalMethod
- The number of things you have to do to conceptually just make a simple method call
from the host to the workflow or vice versa is just way too high. I like the fact
that the communications are based on interfaces. That part I like from a design perspective
– the workflow is sort of a layer unto itself and communicating through an interface
is a good way to enforce that separation. However, the number of steps you have to
go through to hook up host communication scenarios is just way too high. The calls
from the workflow into the host are not too bad, because those just get defined as
methods. But the extra steps for the events that provide calls into the workflow just
pushes it over the edge. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If you are not familiar with this
model, the steps include:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;- Define an event argument type
to carry parameters (only needed because of the chosen event model - this should change
in my opinion) that derives from ExternalDataEventArgs&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;- Define an interface marked with
the ExternalDataExchange attribute&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;- Define an event on that interface
of the type EventHandler&amp;lt;T&amp;gt;, where T is your event argument type&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;- Hook up the interface and the
event to the HandleExternalEvent activity in your workflow that you want to be the
call point for the call from the host into the workflow&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;- Define a class in the host application
that implements the interface&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;- Have a way to fire the event in
that class when you want to call into the workflow (a trigger/fire method)&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;- Register the ExternalDataExchangeService
with the runtime when you start it up&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;- Register an instance of the class
that implements the interface with the ExternalDataExchangeService instance that you
registered with the runtime&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;- Finally, trigger the event from
the host application at the point where you want to call into the workflow&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;All of this amounts to what? A simple
method call with parameters into the workflow. This is where the attendees jaws usually
hit the floor.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Am I wrong here? Isn't this a little
more complex than it needs to be for most apps?&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5e4dd2df-2d4b-4f03-a3ce-99c3c7b9202c" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,5e4dd2df-2d4b-4f03-a3ce-99c3c7b9202c.aspx</comments>
      <category>.NET</category>
      <category>Speaking</category>
      <category>.NET 3.0</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=bc8e5311-b46c-4164-8ad2-aebe8bd46851</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,bc8e5311-b46c-4164-8ad2-aebe8bd46851.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,bc8e5311-b46c-4164-8ad2-aebe8bd46851.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=bc8e5311-b46c-4164-8ad2-aebe8bd46851</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Bookpool.com is doing a special discount promotion of my Data Binding with Windows
Forms book:
</p>
        <p>
          <a title="http://www.bookpool.com/ct/214" href="http://www.bookpool.com/ct/214">
            <font face="Arial">http://www.bookpool.com/ct/214</font>
          </a>
        </p>
        <p>
If you haven't picked up a copy yet, here is a chance to save some bucks off the usual
price.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=bc8e5311-b46c-4164-8ad2-aebe8bd46851" />
      </body>
      <title>Get it while it is cheap - Data Binding with Windows Forms 2.0 promotion</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,bc8e5311-b46c-4164-8ad2-aebe8bd46851.aspx</guid>
      <link>http://briannoyes.net/2006/08/15/GetItWhileItIsCheapDataBindingWithWindowsForms20Promotion.aspx</link>
      <pubDate>Tue, 15 Aug 2006 16:24:27 GMT</pubDate>
      <description>&lt;p&gt;
Bookpool.com is doing a special discount promotion of my Data Binding with Windows
Forms book:
&lt;/p&gt;
&lt;p&gt;
&lt;a title=http://www.bookpool.com/ct/214 href="http://www.bookpool.com/ct/214"&gt;&lt;font face=Arial&gt;http://www.bookpool.com/ct/214&lt;/font&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If you haven't picked up a copy yet, here is a chance to save some bucks off the usual
price.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=bc8e5311-b46c-4164-8ad2-aebe8bd46851" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,bc8e5311-b46c-4164-8ad2-aebe8bd46851.aspx</comments>
      <category>.NET</category>
      <category>Data Binding</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=a3578a93-a221-4fea-80fc-15432a7e91ae</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,a3578a93-a221-4fea-80fc-15432a7e91ae.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,a3578a93-a221-4fea-80fc-15432a7e91ae.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a3578a93-a221-4fea-80fc-15432a7e91ae</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you are looking to bootstrap your knowledge on .NET 3.0 (WCF, WF, WPF, and WCS
specifically), then a great opportunity is coming to a city near you (well, hopefully
reachable from where you are) in October. My colleagues and I from IDesign will
be presenting a .NET 3.0 Roadshow in conjunction with CMP media. This event will provide
a full day of WCF presented by Juval Lowy and the second day will be split between
WF, WPF, and WCF and will be presented by myself and Michele Leroux Bustamante.
</p>
        <p>
You can find more details and registration info here:
</p>
        <p>
          <a href="http://www.net3roadshow.com/">http://www.net3roadshow.com/</a>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a3578a93-a221-4fea-80fc-15432a7e91ae" />
      </body>
      <title>Get Up To Speed on .NET 3.0</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,a3578a93-a221-4fea-80fc-15432a7e91ae.aspx</guid>
      <link>http://briannoyes.net/2006/07/27/GetUpToSpeedOnNET30.aspx</link>
      <pubDate>Thu, 27 Jul 2006 16:53:05 GMT</pubDate>
      <description>&lt;p&gt;
If you are looking to bootstrap your knowledge on .NET 3.0 (WCF, WF, WPF, and WCS
specifically), then a great opportunity is coming to a city near you (well, hopefully
reachable from where you are)&amp;nbsp;in October. My colleagues and I from IDesign will
be presenting a .NET 3.0 Roadshow in conjunction with CMP media. This event will provide
a full day of WCF presented by Juval Lowy and the second day will be split between
WF, WPF, and WCF and will be presented by myself and Michele Leroux Bustamante.
&lt;/p&gt;
&lt;p&gt;
You can find more details and registration info here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.net3roadshow.com/"&gt;http://www.net3roadshow.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a3578a93-a221-4fea-80fc-15432a7e91ae" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,a3578a93-a221-4fea-80fc-15432a7e91ae.aspx</comments>
      <category>.NET</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=6617ce5f-a282-431f-9293-9fe3620b3577</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,6617ce5f-a282-431f-9293-9fe3620b3577.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,6617ce5f-a282-431f-9293-9fe3620b3577.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6617ce5f-a282-431f-9293-9fe3620b3577</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I always cringe whenever I hear about another lawsuit aimed at Microsoft for this
or that perceived anti-trust violation or unfair practices. Recent examples include
the EU's <a href="http://news.bbc.co.uk/1/hi/business/4953682.stm">recent verdict
on Microsoft's appeal </a>to the 2004 ruling imposing fines on Microsoft, and <a href="http://news.com.com/Microsoft,+Adobe+squabble+over+PDF/2100-1012_3-6079320.html">Adobe's
effort to force Microsoft </a>to remove features from Office 2007 that simply add
features that already exist in many other products. 
</p>
        <p>
As a developer, I am constantly overwhelmed with the power, capability and productivity
that Microsoft puts into developers hands... all of which can be used to develop all
kinds of software, including software that might compete with Microsoft's own products.
The operating system's open-ness is also both a blessing and a curse. The biggest
blight on the ease of use debate between Macs and PCs (highlighted by the recent cute
and funny series of commercials by Mac) is really a direct result of the fact that
Microsoft is so darned open with the OS - they will let any darn vendor provide software
or hardware components for the OS that claim to work fine with Windows, and then when
they don't, people blame the OS manufacturer, not the component vendors, yet they
fail to see the fact that it is the very openness of the platform that causes the
problems. In the next breath, they are cursing Microsoft for trying to squash the
competition by running every other company out of business.
</p>
        <p>
The sad fact is that these kinds of lawsuits just hurt the consumer. For those hundreds
of millions of us out there who happen to use and like the Windows operating system,
we just get less features and capabilities because opponents want to use Microsoft's
prominence in the industry as evidence that it must be doing something wrong. How
about they create a great product at a competitive price, and that is a hard equation
for many companies to measure up to? It also hurts the shareholders and employees
of Microsoft (whos numbers are not insignificant) because Microsoft's revenues are
burned up in flames in legal costs.
</p>
        <p>
Yesterday Brad Smith, Microsoft General Counsel, gave a talk I wish I could have
attended that outlined 12 principles to promote competition. The overview of the talk,
the principles, and a vibrant community discussion are going on here: <a href="http://news.com.com/Microsoft+vows+to+play+fair/2100-1014_3-6096011.html">http://news.com.com/Microsoft+vows+to+play+fair/2100-1014_3-6096011.html</a></p>
        <p>
I read over this list and it looks to me like things Microsoft has been doing for
many years now. Unfortunately it is also being spun as "Microsoft is finally agreeing
to play fair", implying that they haven't been doing these things all along. 
</p>
        <p>
Whatever the case, I think it is a good thing to have these principles outlined as
a manifesto of sorts that people can measure Microsoft and other companies against
to try to see if there is any basis for the frequent and invalid claims of unfair
practices that get levied against Microsoft. Maybe people can quit spending expensive
resources on fighting suits like the EU one and focus on providing what is best for
consumers and the economy.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=6617ce5f-a282-431f-9293-9fe3620b3577" />
      </body>
      <title>Microsoft Principles to Promote Competition</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,6617ce5f-a282-431f-9293-9fe3620b3577.aspx</guid>
      <link>http://briannoyes.net/2006/07/20/MicrosoftPrinciplesToPromoteCompetition.aspx</link>
      <pubDate>Thu, 20 Jul 2006 23:21:08 GMT</pubDate>
      <description>&lt;p&gt;
I always cringe whenever I hear about another lawsuit aimed at Microsoft for this
or that perceived anti-trust violation or unfair practices. Recent examples include
the EU's &lt;a href="http://news.bbc.co.uk/1/hi/business/4953682.stm"&gt;recent verdict
on Microsoft's appeal &lt;/a&gt;to the 2004 ruling imposing fines on Microsoft, and &lt;a href="http://news.com.com/Microsoft,+Adobe+squabble+over+PDF/2100-1012_3-6079320.html"&gt;Adobe's
effort to force Microsoft &lt;/a&gt;to remove features from Office 2007 that simply add
features that already exist in many other products. 
&lt;/p&gt;
&lt;p&gt;
As a developer, I am constantly overwhelmed with the power, capability and productivity
that Microsoft puts into developers hands... all of which can be used to develop all
kinds of software, including software that might compete with Microsoft's own products.
The operating system's open-ness is also both a blessing and a curse. The biggest
blight on the ease of use debate between Macs and PCs (highlighted by the recent cute
and funny series of commercials by Mac) is really a direct result of the fact that
Microsoft is so darned open with the OS - they will let any darn vendor provide software
or hardware components for the OS that claim to work fine with Windows, and then when
they don't, people blame the OS manufacturer, not the component vendors, yet they
fail to see the fact that it is the very openness of the platform that causes the
problems. In the next breath, they are cursing Microsoft for trying to squash the
competition by running every other company out of business.
&lt;/p&gt;
&lt;p&gt;
The sad fact is that these kinds of lawsuits just hurt the consumer. For those hundreds
of millions of us out there who happen to use and like the Windows operating system,
we just get less features and capabilities because opponents want to use Microsoft's
prominence in the industry as evidence that it must be doing something wrong. How
about they create a great product at a competitive price, and that is a hard equation
for many companies to measure up to? It also hurts the shareholders and employees
of Microsoft (whos numbers are not insignificant) because Microsoft's revenues are
burned up in flames in legal costs.
&lt;/p&gt;
&lt;p&gt;
Yesterday Brad Smith, Microsoft General Counsel,&amp;nbsp;gave a talk I wish I could have
attended that outlined 12 principles to promote competition. The overview of the talk,
the principles, and a vibrant community discussion are going on here: &lt;a href="http://news.com.com/Microsoft+vows+to+play+fair/2100-1014_3-6096011.html"&gt;http://news.com.com/Microsoft+vows+to+play+fair/2100-1014_3-6096011.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I read over this list and it looks to me like things Microsoft has been doing for
many years now. Unfortunately it is also being spun as "Microsoft is finally agreeing
to play fair", implying that they haven't been doing these things all along. 
&lt;/p&gt;
&lt;p&gt;
Whatever the case, I think it is a good thing to have these principles outlined as
a manifesto of sorts that people can measure Microsoft and other companies against
to try to see if there is any basis for the frequent and invalid claims of unfair
practices that get levied against Microsoft. Maybe people can quit spending expensive
resources on fighting suits like the EU one and focus on providing what is best for
consumers and the economy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=6617ce5f-a282-431f-9293-9fe3620b3577" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,6617ce5f-a282-431f-9293-9fe3620b3577.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06</wfw:commentRss>
      <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://briannoyes.net/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://briannoyes.net/PermaLink,guid,6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=6a4e9217-51cb-421d-9eb2-3e2cbd8d7e06" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=038d48d3-62d1-4b61-a0b9-6d58698d1cd5</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,038d48d3-62d1-4b61-a0b9-6d58698d1cd5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,038d48d3-62d1-4b61-a0b9-6d58698d1cd5.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=038d48d3-62d1-4b61-a0b9-6d58698d1cd5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For those who attended, or those who just want the materials, here are the slides
and demos from today's MSDN Webcast:
</p>
        <p>
Slides: <a href="http://www.softinsight.com/downloads/MSDNWebcasts/SmartClientDataApplications_Jul06.pdf">http://www.softinsight.com/downloads/MSDNWebcasts/SmartClientDataApplications_Jul06.pdf</a></p>
        <p>
Demos:<a href="http://www.softinsight.com/downloads/MSDNWebcasts/SmartClientDataAppsDemos_Jul06.zip">http://www.softinsight.com/downloads/MSDNWebcasts/SmartClientDataAppsDemos_Jul06.zip</a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=038d48d3-62d1-4b61-a0b9-6d58698d1cd5" />
      </body>
      <title>Slides and demos from MSDN Webcast: Build Smart Client Data Applications with Windows Forms 2.0</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,038d48d3-62d1-4b61-a0b9-6d58698d1cd5.aspx</guid>
      <link>http://briannoyes.net/2006/07/07/SlidesAndDemosFromMSDNWebcastBuildSmartClientDataApplicationsWithWindowsForms20.aspx</link>
      <pubDate>Fri, 07 Jul 2006 17:31:57 GMT</pubDate>
      <description>&lt;p&gt;
For those who attended, or those who just want the materials, here are the slides
and demos from today's MSDN Webcast:
&lt;/p&gt;
&lt;p&gt;
Slides: &lt;a href="http://www.softinsight.com/downloads/MSDNWebcasts/SmartClientDataApplications_Jul06.pdf"&gt;http://www.softinsight.com/downloads/MSDNWebcasts/SmartClientDataApplications_Jul06.pdf&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Demos:&lt;a href="http://www.softinsight.com/downloads/MSDNWebcasts/SmartClientDataAppsDemos_Jul06.zip"&gt;http://www.softinsight.com/downloads/MSDNWebcasts/SmartClientDataAppsDemos_Jul06.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=038d48d3-62d1-4b61-a0b9-6d58698d1cd5" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,038d48d3-62d1-4b61-a0b9-6d58698d1cd5.aspx</comments>
      <category>.NET</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=78d107d1-3937-4d8d-81d9-73cb6ae18eee</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=78d107d1-3937-4d8d-81d9-73cb6ae18eee</wfw:commentRss>
      <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://briannoyes.net/aggbug.ashx?id=78d107d1-3937-4d8d-81d9-73cb6ae18eee" />
      </body>
      <title>Managing ClickOnce publisher certificate files </title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=78d107d1-3937-4d8d-81d9-73cb6ae18eee" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=c34df3c8-8129-4b24-ab89-890fa9540603</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=c34df3c8-8129-4b24-ab89-890fa9540603" />
      </body>
      <title>Another TechEd Complete - Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=c34df3c8-8129-4b24-ab89-890fa9540603" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=c83e681f-9c1a-46ce-99f1-1c91ed9e7784</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,c83e681f-9c1a-46ce-99f1-1c91ed9e7784.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,c83e681f-9c1a-46ce-99f1-1c91ed9e7784.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=c83e681f-9c1a-46ce-99f1-1c91ed9e7784" />
      </body>
      <title>WCF and WF Course Materials</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,c83e681f-9c1a-46ce-99f1-1c91ed9e7784.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=c83e681f-9c1a-46ce-99f1-1c91ed9e7784" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=0f4fc3e0-f892-4083-b432-a201fd3381dc</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/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://briannoyes.net/PermaLink,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=0f4fc3e0-f892-4083-b432-a201fd3381dc" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=defe9d7b-97a6-4afc-8c3c-f51b537b5a21</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,defe9d7b-97a6-4afc-8c3c-f51b537b5a21.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,defe9d7b-97a6-4afc-8c3c-f51b537b5a21.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/PermaLink,guid,defe9d7b-97a6-4afc-8c3c-f51b537b5a21.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=defe9d7b-97a6-4afc-8c3c-f51b537b5a21" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=652b2d44-012e-42f4-bba8-4ad40ed63f68</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=652b2d44-012e-42f4-bba8-4ad40ed63f68" />
      </body>
      <title>CAPICOM Build Error on ClickOnce Publishing</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=652b2d44-012e-42f4-bba8-4ad40ed63f68" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=1cc44b29-d3fd-40b7-b571-9b54f2fb5408</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,1cc44b29-d3fd-40b7-b571-9b54f2fb5408.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,1cc44b29-d3fd-40b7-b571-9b54f2fb5408.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1cc44b29-d3fd-40b7-b571-9b54f2fb5408</wfw:commentRss>
      <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://briannoyes.net/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://briannoyes.net/PermaLink,guid,1cc44b29-d3fd-40b7-b571-9b54f2fb5408.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=1cc44b29-d3fd-40b7-b571-9b54f2fb5408" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=bd37cddc-3574-49fc-b226-a7df516ecb43</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=bd37cddc-3574-49fc-b226-a7df516ecb43</wfw:commentRss>
      <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://briannoyes.net/aggbug.ashx?id=bd37cddc-3574-49fc-b226-a7df516ecb43" />
      </body>
      <title>Manually Putting a ClickOnce Application into Production</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=bd37cddc-3574-49fc-b226-a7df516ecb43" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=3210b58c-0bec-42cf-ac73-7cc6e5c8a229</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=3210b58c-0bec-42cf-ac73-7cc6e5c8a229" />
      </body>
      <title>Slides and Demos from SDC Netherlands</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=3210b58c-0bec-42cf-ac73-7cc6e5c8a229" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=805946c3-ae07-49e2-8ae9-e85ac67ecfb5</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=805946c3-ae07-49e2-8ae9-e85ac67ecfb5" />
      </body>
      <title>DevTeach Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=805946c3-ae07-49e2-8ae9-e85ac67ecfb5" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=1940053e-6292-4b56-82ef-c2f45f1455c2</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,1940053e-6292-4b56-82ef-c2f45f1455c2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,1940053e-6292-4b56-82ef-c2f45f1455c2.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1940053e-6292-4b56-82ef-c2f45f1455c2</wfw:commentRss>
      <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://briannoyes.net/aggbug.ashx?id=1940053e-6292-4b56-82ef-c2f45f1455c2" />
      </body>
      <title>DC Advanced Master Class</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,1940053e-6292-4b56-82ef-c2f45f1455c2.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=1940053e-6292-4b56-82ef-c2f45f1455c2" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=ae4fea41-e752-4016-a2bc-7ee79e0f9a01</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/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://briannoyes.net/PermaLink,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=ae4fea41-e752-4016-a2bc-7ee79e0f9a01" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=f64c802d-ca2c-4514-bbac-a023eea45cd5</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,f64c802d-ca2c-4514-bbac-a023eea45cd5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,f64c802d-ca2c-4514-bbac-a023eea45cd5.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/PermaLink,guid,f64c802d-ca2c-4514-bbac-a023eea45cd5.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=f64c802d-ca2c-4514-bbac-a023eea45cd5" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=9a313063-56d6-417b-bb27-8c23404a10fa</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=9a313063-56d6-417b-bb27-8c23404a10fa" />
      </body>
      <title>Slides and Demos from DevConnections Last Week</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=9a313063-56d6-417b-bb27-8c23404a10fa" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=0f76192d-af13-4cdd-99d8-35fc4afd2965</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,0f76192d-af13-4cdd-99d8-35fc4afd2965.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,0f76192d-af13-4cdd-99d8-35fc4afd2965.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=0f76192d-af13-4cdd-99d8-35fc4afd2965" />
      </body>
      <title>C# Code Snippets Library</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,0f76192d-af13-4cdd-99d8-35fc4afd2965.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=0f76192d-af13-4cdd-99d8-35fc4afd2965" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,0f76192d-af13-4cdd-99d8-35fc4afd2965.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=ec7ef166-caf7-481f-b32c-c1ad983225e8</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,ec7ef166-caf7-481f-b32c-c1ad983225e8.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,ec7ef166-caf7-481f-b32c-c1ad983225e8.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ec7ef166-caf7-481f-b32c-c1ad983225e8</wfw:commentRss>
      <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://briannoyes.net/aggbug.ashx?id=ec7ef166-caf7-481f-b32c-c1ad983225e8" />
      </body>
      <title>Data Binding Talk in San Diego - Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,ec7ef166-caf7-481f-b32c-c1ad983225e8.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=ec7ef166-caf7-481f-b32c-c1ad983225e8" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=64275c83-d7af-4a19-b4f7-593146ab415f</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,64275c83-d7af-4a19-b4f7-593146ab415f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,64275c83-d7af-4a19-b4f7-593146ab415f.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=64275c83-d7af-4a19-b4f7-593146ab415f</wfw:commentRss>
      <title>What to do when BindingNavigator Raises Exception on AddNew</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,64275c83-d7af-4a19-b4f7-593146ab415f.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=64275c83-d7af-4a19-b4f7-593146ab415f" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=51b0482d-e598-426a-8047-948950af8b8e</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,51b0482d-e598-426a-8047-948950af8b8e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,51b0482d-e598-426a-8047-948950af8b8e.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/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://briannoyes.net/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://briannoyes.net/PermaLink,guid,51b0482d-e598-426a-8047-948950af8b8e.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=51b0482d-e598-426a-8047-948950af8b8e" /&gt;</description>
      <comments>http://briannoyes.net/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://briannoyes.net/Trackback.aspx?guid=23d11276-49e4-4c1b-ad6a-0507fdc64189</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=23d11276-49e4-4c1b-ad6a-0507fdc64189</wfw:commentRss>
      <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://briannoyes.net/aggbug.ashx?id=23d11276-49e4-4c1b-ad6a-0507fdc64189" />
      </body>
      <title>.NET Rocks and DNRtv episodes up</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</guid>
      <link>http://briannoyes.net/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://briannoyes.net/aggbug.ashx?id=23d11276-49e4-4c1b-ad6a-0507fdc64189" /&gt;</description>
      <comments>http://briannoyes.net/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>
  </channel>
</rss>