<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Objective Disclosures</title><link>http://blogs.msdn.com/tbrem/default.aspx</link><description>Musings on .NET development today and tomorrow</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Virtualized Experimentational Transactional Instances</title><link>http://blogs.msdn.com/tbrem/archive/2004/08/17/215949.aspx</link><pubDate>Tue, 17 Aug 2004 21:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:215949</guid><dc:creator>tbrem</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/tbrem/comments/215949.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tbrem/commentrss.aspx?PostID=215949</wfw:commentRss><description>&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;Following up on my previous &lt;/font&gt;&lt;a href="http://blogs.msdn.com/tbrem/archive/2004/08/15/214807.aspx"&gt;&lt;font face="Verdana"&gt;post&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana"&gt;, I tried working with an application framework on my XP SP2 system and when I ran the &lt;a title="NUnit" href="http://www.nunit.org" &gt;NUnit&lt;/a&gt; tests, all transactional Commands were Red with: "&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;&lt;font color="#a52a2a"&gt;The partner transaction manager has disabled its support for remote/network transactions.&lt;/font&gt;&lt;font color="#000000"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;&lt;font color="#000000"&gt;&lt;font face="Verdana"&gt;The first thing I found was that Windows 2003 is in fact more secure in deployment, and thus required some &lt;/font&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;817064"&gt;&lt;font face="Verdana"&gt;loosening&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana"&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;&lt;font color="#000000"&gt;&lt;font face="Verdana"&gt;Then I discovered that this was also an area where SP2 had in fact made things more secure, and also require some &lt;/font&gt;&lt;a href="http://blogs.msdn.com/florinlazar/archive/2004/06/18/159127.aspx"&gt;&lt;font face="Verdana"&gt;loosening&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana"&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;&lt;font face="Verdana" color="#000000"&gt;While this was a bit painful to slug through, it's still good to find these things on the developer desktop rather than on first deployment to staging or worse to production...&amp;nbsp; It's another very useful benefit to running with Virtualized systems as it allows the simulation of the real environment so that things that shouldn't work (like local system access&amp;nbsp;accounts and short-circuited security) break were they are broken ;)&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;&lt;font face="Verdana" color="#000000"&gt;One thing to consider with this&amp;nbsp;is it is yet another reason to start moving&amp;nbsp;app servers and web servers out of the DMZ and into the corporate and network and leverage the ability of ISA 2004 to run in the DMZ exclusively.&amp;nbsp; Topic for another day.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;&lt;font color="#000000"&gt;&lt;font face="Verdana"&gt;Now if I could just convince myself to take my user account of the Administrators group...&lt;/font&gt;&amp;nbsp; &lt;a&gt;&lt;/p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=215949" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tbrem/archive/tags/Yukon+Expeditions/default.aspx">Yukon Expeditions</category><category domain="http://blogs.msdn.com/tbrem/archive/tags/Whidbey+Samplings/default.aspx">Whidbey Samplings</category><category domain="http://blogs.msdn.com/tbrem/archive/tags/.NET+2.0+/default.aspx">.NET 2.0 </category><category domain="http://blogs.msdn.com/tbrem/archive/tags/General+/default.aspx">General </category><category domain="http://blogs.msdn.com/tbrem/archive/tags/Common+Framework/default.aspx">Common Framework</category><category domain="http://blogs.msdn.com/tbrem/archive/tags/Longhorn+Living/default.aspx">Longhorn Living</category></item><item><title>Virtualized Experimentational Instances</title><link>http://blogs.msdn.com/tbrem/archive/2004/08/15/214807.aspx</link><pubDate>Sun, 15 Aug 2004 19:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:214807</guid><dc:creator>tbrem</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/tbrem/comments/214807.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tbrem/commentrss.aspx?PostID=214807</wfw:commentRss><description>&lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;I don't know if you've been spending much time working with any of the .NET 2.0 based systems we are building (Longhorn, Yukon, &lt;a title="Visual Studio 2005 Beta Home" href="http://lab.msdn.microsoft.com/vs2005/Default.aspx" &gt;Whidbey&lt;/a&gt;), but I've been working with some form of them for about a year and a half&amp;nbsp;now.&amp;nbsp; One of the difficulties I've had is trying to work with any combination of these as to keep things relatively stable and happy, you need to make sure the version of the redist is the same.&amp;nbsp; For example, if you went to PDC, you got the Goods which were a version of the three of these that were all built using .NET 1.2.xxxx.yy (I can't remember anymore).&amp;nbsp; So you could install the kit together and they were relatively happy together.&amp;nbsp; Try doing that outside a planned milestone when downloading releases from each of the build servers.&amp;nbsp; Not pretty, and not something that the product teams should be wasting cycles on when driving to get these out, but it makes for an interesting challenge for those of us that can't wait to get our hands on the latest bits...&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;With the release of the official &lt;a title="Visual Studio 2005 Beta Home" href="http://lab.msdn.microsoft.com/vs2005/Default.aspx" &gt;Whidbey&lt;/a&gt; Beta 1 and Yukon Beta 2, I don't know if you noticed but they both have different releases of .NET 2.0 (40607.16 and 40607.42, respectively).&amp;nbsp; While all works relatively well if you install Yukon first and then &lt;a title="Visual Studio 2005 Beta Home" href="http://lab.msdn.microsoft.com/vs2005/Default.aspx" &gt;Whidbey&lt;/a&gt;, try and get both of those to work on top of a recent Longhorn build (say 4091 which uses a later build release of the framework)...&amp;nbsp; Good luck - there is a black art method to do this, but with the frequency of needing to updating your builds, this isn't ideal.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;So, to combat this I've resolved to running to Windows XP SP2 as my base OS today and focus on getting my dynamic releases isolated to &lt;a href="http://www.microsoft.com/windows/virtualpc/default.mspx"&gt;Virtual PC's&lt;/a&gt;.&amp;nbsp; At MGB, a&amp;nbsp;friend (JEQ) pointed out to me the value of differencing disks and how to setup a more space sensitive virtualized environment that also saved considerable time in setting up virtualized machines to run these releases.&amp;nbsp; I haven't had time to consider this until I blew up my OS the other day with an unexpected .NET install by the Ocracoke tools as I tried to "simply" add in the testing tools to my sync'd up &lt;a title="Visual Studio 2005 Beta Home" href="http://lab.msdn.microsoft.com/vs2005/Default.aspx" &gt;Whidbey&lt;/a&gt;/Yukon install where I had them both running 40607.40.&amp;nbsp; Ooops.&amp;nbsp; The world is not happy with two installs of .NET 2.0 on the same box and don't even try to gracefully uninstall...&amp;nbsp; time to rebuild and rethink how I'm doing this and JEQ's differencing drives popped into mind.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;Using an ISO image from MSDN I created a base Server 2003 Standard Edition disk, got it all patched and then &lt;a href="http://www.microsoft.com/windows2000/techinfo/planning/incremental/sysprep11.asp"&gt;sysprep'd&lt;/a&gt; it (also for &lt;a href="http://www.microsoft.com/technet/prodtechnol/winxppro/deploy/duplication.mspx"&gt;XP&lt;/a&gt;). Then you mark that disk read-only and go into Virtual PC and create a new disk, select differencing and point to the Server 2003 image as the base.&amp;nbsp; Now create a new Virtual PC system that uses the differencing disk.&amp;nbsp; When you boot it, voila you can now have a new SID system that you can install whatever release of whatever app on top of.&amp;nbsp; This is nice for me as I now have a clean SQL 2000 SP3 machine and a Yukon Beta 2 machine that uses very little space because they are both load up the base image and then add the "differences".&amp;nbsp;I can then boot one or the other and&amp;nbsp;hit it from my VS.NET base installation.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;Now I'm on the path to doing the same with some XP Images to keep a &lt;a title="Visual Studio 2005 Beta Home" href="http://lab.msdn.microsoft.com/vs2005/Default.aspx" &gt;Whidbey&lt;/a&gt; build loaded into and an isolated Ocracoke; I'll also build Server instances with BizTalk 2004, HIS 2004 and others (LCS...) while never installing Server 2003 again.&amp;nbsp; The same also works for Longhorn so I can install and not hose myself anymore...&lt;/font&gt;&lt;/p&gt;&lt;/a&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=214807" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tbrem/archive/tags/Yukon+Expeditions/default.aspx">Yukon Expeditions</category><category domain="http://blogs.msdn.com/tbrem/archive/tags/Whidbey+Samplings/default.aspx">Whidbey Samplings</category><category domain="http://blogs.msdn.com/tbrem/archive/tags/.NET+2.0+/default.aspx">.NET 2.0 </category><category domain="http://blogs.msdn.com/tbrem/archive/tags/Longhorn+Living/default.aspx">Longhorn Living</category></item><item><title>Windows Media Player 10 Tech Preview Online</title><link>http://blogs.msdn.com/tbrem/archive/2004/08/13/214466.aspx</link><pubDate>Sat, 14 Aug 2004 04:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:214466</guid><dc:creator>tbrem</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/tbrem/comments/214466.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tbrem/commentrss.aspx?PostID=214466</wfw:commentRss><description>&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Take a look at something fun to play with: Windows Media Player 10 Technical Preview is online on the public site (&lt;a href="http://www.microsoft.com/windows/windowsmedia/mp10/"&gt;http://www.microsoft.com/windows/windowsmedia/mp10/&lt;/a&gt;).&amp;nbsp; It's got some nice Longhornish styling built-in and some noticable improvements in the navigation of large libraries and some cool integrations.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;What I am dumbfounded on is why it still doesn't support Genre / Artist / Album or Genre / Album / Artist or at least some sort of custom categorization (i.e.&amp;nbsp;Folders!)&amp;nbsp;of the artists and albums.&amp;nbsp; With a large music library opening that Artist list or Album list makes my eyes glaze over, it's just not navigable.&amp;nbsp; But, here's the thing, this an opportunity to make the product better, so I'll submit that request to the &lt;a href="http://www.microsoft.com/windows/windowsmedia/community/newsgroups/WindowsMedia/default.mspx?dg=microsoft.public.windowsmedia.beta&amp;amp;lang=en&amp;amp;cr=US"&gt;community forum&lt;/a&gt; and hope that it makes it into the final release.&amp;nbsp; Download the preview, take a look and posts your requests.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=214466" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tbrem/archive/tags/General+/default.aspx">General </category></item><item><title>Take ICommand with Attributes</title><link>http://blogs.msdn.com/tbrem/archive/2004/08/12/213545.aspx</link><pubDate>Thu, 12 Aug 2004 18:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:213545</guid><dc:creator>tbrem</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/tbrem/comments/213545.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tbrem/commentrss.aspx?PostID=213545</wfw:commentRss><description>&lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;The latest issue of MSDN Magazine (&lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/09/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/04/09/default.aspx&lt;/a&gt;) has an interesting article on applying the Command Pattern to the problem of distributed systems.&amp;nbsp; It proposes a neat technique of essentially encapsulating some piece of work within a Command and shipping that off via MSMQ to have some other endpoint process it.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;This is cool stuff as I like the use of ICommand's to encapsulate data processing associated with a physical store abstracted away from the data entities.&amp;nbsp; For example, a&amp;nbsp;Model object (binds data and the rules internal towith it) can use ICommand's as a persistence layer to work with any underlying store, freeing it from direct dependancies on a Database, a Web Service, a Queue, etc.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;One issue with the proposed delegation of Execute() over the proverbial wall is the loss of security and other aspects that should be applied to the execution.&amp;nbsp; One way to resolve this is to combine the Command pattern with the Template method pattern to implement an interception framework embedded into the Command to ensure proper safety with Execute().&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;For example:&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;Public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Interface&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt; ICommandAttribute&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sub&lt;/font&gt;&lt;font size="2"&gt; PreExecute(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;ByVal&lt;/font&gt;&lt;font size="2"&gt; cmd &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;As&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt; ICommand)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sub&lt;/font&gt;&lt;font size="2"&gt; PostExecute(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;ByVal&lt;/font&gt;&lt;font size="2"&gt; cmd &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;As&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt; ICommand)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;End&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Interface&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font size="2"&gt; &lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;MustInherit&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Class&lt;/font&gt;&lt;font size="2"&gt; Command : &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Implements&lt;/font&gt;&lt;font size="2"&gt; ICommand&lt;/p&gt; &lt;p&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Sub&lt;/font&gt;&lt;font size="2"&gt; Execute() &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Implements&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt; ICommand.Execute&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff" size="2"&gt;Dim&lt;/font&gt;&lt;font size="2"&gt; ICommandAttrs &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;As&lt;/font&gt;&lt;font size="2"&gt; ICommandAttributes&lt;/font&gt;&lt;font size="2"&gt;() = _&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Me&lt;/font&gt;&lt;font size="2"&gt;.GetType().GetCustomAttributes(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;GetType&lt;/font&gt;&lt;font size="2"&gt;(ICommandAttribute), &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;True&lt;/font&gt;&lt;font size="2"&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For Each ICommandAttr in ICommandAttrs&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ICommandAttr.PreExecute()&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next &lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font face="Courier New" color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Me&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;.MyExecute()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For Each ICommandAttr in ICommandAttrs&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ICommandAttr.PostExecute()&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;End&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Sub&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Protected&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;MustOverride&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Sub&lt;/font&gt;&lt;font size="2"&gt; MyExecute()&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;&lt;font size="2"&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;End&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Class&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Verdana" color="#000080" size="2"&gt;So creating a custom attribute that implements ICommandAttribute allows you encapsulate any sort of aspect that may need to be enforced with the Command.&amp;nbsp; An AuthorizationAttribute could check the current thread's IPrinicpal and check that it is valid for Execution of this Command, preventing rogue processes from picking Commands off the queue and firing them adding security to the distributed Command.&amp;nbsp; Later, I'll blog a bit more about the Model / ICommand relationship...&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=213545" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tbrem/archive/tags/Object-Oriented+Development/default.aspx">Object-Oriented Development</category><category domain="http://blogs.msdn.com/tbrem/archive/tags/Common+Framework/default.aspx">Common Framework</category><category domain="http://blogs.msdn.com/tbrem/archive/tags/Service+Orientation/default.aspx">Service Orientation</category></item><item><title>Open for Business</title><link>http://blogs.msdn.com/tbrem/archive/2004/08/09/211214.aspx</link><pubDate>Mon, 09 Aug 2004 15:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:211214</guid><dc:creator>tbrem</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/tbrem/comments/211214.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tbrem/commentrss.aspx?PostID=211214</wfw:commentRss><description>&lt;p&gt;&lt;font face="Verdana" color="#800080" size="2"&gt;I've found that it is always so difficult to document the work that we do, so I wanted to open up this channel to get out some of the things I've been working on so that I can at least point to it as a source of some documenation.&amp;nbsp; Documenation of the theory of why I've built certain things the way I have; not necessisarily to say that it is the best and only way, but at least to express why I thought it was the way to go at the point in time I did it.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" color="#800080" size="2"&gt;I think that's why so many people have taken to the blogger lifestyle - we can't always remember why we did certain things at points in time, or if we even did them at all.&amp;nbsp; This timestamped public attestation puts it out there so we can at least be a bit clearer about the past.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" color="#a52a2a" size="2"&gt;&lt;font color="#800080"&gt;I work for Microsoft Consulting Services (MCS), building solutions for customers using .NET and our Enterprise Servers.&amp;nbsp; I typically work using Agile Software techniques (primarily a derivative of ScrumXP) when building stuff.&amp;nbsp; I plan to talk a&amp;nbsp;bit about things as we build them (while ensuring customer confidentiality) and document what I learn as I go - partly for my sake (so I can jog my memory later) and partly for others (let me know who you are and why you are reading this).&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=211214" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tbrem/archive/tags/General+/default.aspx">General </category></item></channel></rss>