<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.charteris.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>Charteris Community Server</title><link>http://blogs.charteris.com/blogs/</link><description>Welcome to the &lt;A href="http://www.charteris.com"&gt;Charteris&lt;/A&gt; Community</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Principles and Axioms</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/07/21/principles-and-axioms.aspx</link><pubDate>Mon, 21 Jul 2008 20:18:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:599</guid><dc:creator>aland</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;&amp;nbsp;I&amp;#39;m holding an internal discussion arising from one of our regular Core Capability conference calls at the moment and I thought that it would be useful to surface part of that to the outside world to get feedback.&lt;/p&gt;&lt;p&gt;The premise is to see if it is possble to set out certain principles and derive some axioms from those principles that can drive out &amp;#39;default development environments&amp;#39;. Here, I have chosen two sets of axioms. The first being &amp;quot;Microsoft&amp;quot; for those clients who prefer to use mainstream, low risk tooling and practices. The second being &amp;quot;Alt.Net&amp;quot; for clients who are willing to work with non-Microsoft software for development purposes, most notably open source software.&lt;/p&gt;&lt;p&gt;My thinking may be wrong. My decisions may be wrong. Whatever you think - let me know!&lt;/p&gt;&lt;p&gt;Please note that this is only a first draft - errors and omissions are to be expected.&lt;/p&gt;&lt;div&gt;
&lt;table style="width:521pt;border-collapse:collapse;" cellpadding="0" cellspacing="0"&gt;




&lt;tr style="height:15pt;"&gt;
&lt;td class="xl71" style="width:222pt;height:15pt;background-color:white;"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;Axiomatically 
&amp;quot;Microsoft&amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td class="xl71" style="width:299pt;background-color:white;"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;Axiomatically 
&amp;quot;Alt.Net&amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Project 
status and progress should be available.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:30pt;"&gt;
&lt;td class="xl66" style="width:222pt;height:30pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Team Foundation 
Server&lt;br /&gt;MS Project&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;Burndown Charts&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Requirements 
must be defined.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:30pt;"&gt;
&lt;td class="xl66" style="width:222pt;height:30pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Functional Requirements 
Specification&lt;br /&gt;Non-Functional Requirements Specification&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl67" style="width:299pt;"&gt;&lt;font color="#c0504d" face="Calibri"&gt;Personas&lt;br /&gt;User Story 
cards&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: The 
architectural context must be defined.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:30pt;"&gt;
&lt;td class="xl66" style="width:222pt;height:30pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Logical Architecture 
Specification&lt;br /&gt;Physical Architecture Specification&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl67" style="width:299pt;"&gt;&lt;font color="#c0504d" face="Calibri"&gt;Logical Architecture 
Specification&lt;br /&gt;Physical Architecture Specification&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: 
(Non-)Functional tests should be defined.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Scenarios in Team Foundation 
Server&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl67" style="width:299pt;"&gt;&lt;font color="#c0504d" face="Calibri"&gt;Scenarios on reverse of User Story 
cards&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: 
Non-Functional tests should be defined.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Scenarios in Team Foundation 
Server&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl67" style="width:299pt;"&gt;&lt;font color="#c0504d" face="Calibri"&gt;Scenarios on reverse of User Story 
cards&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Version 
Control must be employed.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Team Foundation Server&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;Subversion&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Services 
should be employed to traverse boundaries.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:30pt;"&gt;
&lt;td class="xl66" style="width:222pt;height:30pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;WCF / 
WS-*&lt;br /&gt;REST&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl67" style="width:299pt;"&gt;&lt;font color="#c0504d" face="Calibri"&gt;WCF / WS-*&lt;br /&gt;REST&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Coding 
standards should be enforced.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl66" style="width:222pt;height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;FxCop &amp;amp; 
StyleCop&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl67" style="width:299pt;"&gt;&lt;font color="#c0504d" face="Calibri"&gt;FxCop &amp;amp; StyleCop&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Defects 
should be tracked.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Team Foundation Server&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;Bugzilla&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Developers 
must test units of code in isolation.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;MS Test&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;NUnit&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Where 
possible, testers must automate functional verification of the 
application.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;MS Test&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;FitNesse&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: The 
application must be subject to a build process.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;MSBuild&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;NAnt&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: The 
application should be automatically built on a regular 
basis.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Team Foundation Server&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;CruiseControl.net&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: XML Code 
Comments should be compiled.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Sandcastle&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;Sandcastle&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Deployment 
media should be built.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;WiX / Votive&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;WiX / Votive&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Where 
possible, database design should evolve.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Visual Studio Database 
Edition&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;SubSonic Migrations&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Where 
appropriate, ORM should be employed.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Linq2SQL&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;SubSonic or NHibernate&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Where 
appropriate, diagnostics should be implemented.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Enterprise Library Logging 
Block&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;log4net&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Where 
appropriate, dependency injection should be employed.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Unity&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;StructureMap or Spring.NET&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Where 
appropriate, the MVC pattern should be employed in web 
development.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;ASP.NET MVC&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;ASP.NET MVC or MonoRail&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Where 
appropriate, in-memory caching should be employed.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;Velocity&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;Velocity or memcached&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Where 
appropriate, reverse proxies should be employed to enhance HTTP 
scalability.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;ISA Server&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;ISA Server, Apache, or squid&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Where 
appropriate, AJAX should be employed in web applications to improve user 
experience.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;ASP.NET AJAX&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;jQuery&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Applications 
should be security-hardened.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;SDLC &amp;amp; Threat Modelling 
STRIDE&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;SDLC &amp;amp; Threat Modelling STRIDE&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl65" style="height:15pt;background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td class="xl65" style="background-color:transparent;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl70" style="height:15pt;" colspan="2"&gt;&lt;em&gt;&lt;font color="#4f6228" face="Calibri"&gt;Principle: Applications 
should encrypt sensitive data.&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td class="xl68" style="height:15pt;"&gt;&lt;font color="#1f497d" face="Calibri"&gt;System.Cryptography&lt;/font&gt;&lt;/td&gt;
&lt;td class="xl69"&gt;&lt;font color="#c0504d" face="Calibri"&gt;System.Cryptography&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=599" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/Tools+Practices+alt.net+altnetuk/default.aspx">Tools Practices alt.net altnetuk</category></item><item><title>Alt.Net UK Summer Conference Dates Announced</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/07/09/alt-net-uk-summer-conference-dates-announced.aspx</link><pubDate>Wed, 09 Jul 2008 21:27:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:586</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;We are pleased to announce that the Alt.Net UK Conference will be returning in September, and that there will be room for more attendees this time!&lt;br /&gt;&lt;br /&gt;The plan is host the event at Conway Hall in London [1] and our thinking is to follow the same sort of schedule as we did in February:&lt;br /&gt;&amp;nbsp;- Evening planning session on Friday 12th September, following by a trip to a bar to socialise.&lt;br /&gt;&amp;nbsp;- The Open Spaces sessions all day on Saturday 13th September&lt;br /&gt;&lt;br /&gt;This time we are thinking of starting off Saturday with a Park Bench to get the juices flowing.&lt;br /&gt;&lt;br /&gt;We are very open to listening to feedback from the community if you think that there are ways that we can improve on the conference experience.&lt;br /&gt;&lt;br /&gt;We would especially like to have more testers, technical authors and usability folk attend to foster cross-pollination of ideas.&lt;br /&gt;&lt;br /&gt;User registration will start from Friday 11th July at 07:00 UK time [2] so the early birds will get the worm!&lt;br /&gt;&lt;br /&gt;The following social hubs have also been set up: Upcoming [3], Facebook [4], FriendFeed [5] and LinkedIn. Don&amp;#39;t forget that you can subscribe to the AltNetUk News River [6].&lt;br /&gt;&lt;br /&gt;Finally, we are currently looking for sponsorship, so if you know of an organisation that would be interested to be associated with the conference in return for a little lucre, we would love to hear from you / them! (The conference is non-profit)&lt;br /&gt;&lt;br /&gt;Conchango and redgate have generously agreed to be launch sponsors - but more is needed, especially as we have to pay for Conway Hall this time.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://www.conwayhall.org.uk/" title="http://www.conwayhall.org.uk/"&gt;http://www.conwayhall.org.uk/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[2] &lt;a href="http://altdotnet.org/events/uk" title="http://altdotnet.org/events/uk"&gt;http://altdotnet.org/events/uk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[3] &lt;a href="http://upcoming.yahoo.com/event/867921/" title="http://upcoming.yahoo.com/event/867921/"&gt;http://upcoming.yahoo.com/event/867921/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[4] &lt;a href="http://www.facebook.com/group.php?gid=31833353320" title="http://www.facebook.com/group.php?gid=31833353320"&gt;http://www.facebook.com/group.php?gid=31833353320&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[5] &lt;a href="http://friendfeed.com/rooms/altnetuk-conference" title="http://friendfeed.com/rooms/altnetuk-conference"&gt;http://friendfeed.com/rooms/altnetuk-conference&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[6] &lt;a href="http://newsriver.altnetuk.com/" title="http://newsriver.altnetuk.com/"&gt;http://newsriver.altnetuk.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Ian Cooper, Ben Hall and Alan Dean&lt;/p&gt;&lt;p&gt;You can &lt;a href="http://groups.google.com/group/altnetuk-discuss/browse_thread/thread/83a10c0507faa32a#" title="discuss the announcement on Google Groups"&gt;discuss the announcement on Google Groups&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=586" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/altnetuk/default.aspx">altnetuk</category></item><item><title>Silverware , Swag and Simple Gratitude - Oxford Branch NxtGen User Group Meetings</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2008/07/02/silverware-swag-and-simple-gratitude-oxford-branch-nxtgen-user-group-meetings.aspx</link><pubDate>Wed, 02 Jul 2008 00:16:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:583</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I attended the &lt;a href="http://www.nxtgenug.net/Region.aspx?RegionID=3" target="_blank"&gt;Oxford branch of the NextGen User Group&lt;/a&gt; meeting tonight (1st July) and heard two good talks on WCF and Dynamic Languages from Geff Lombardi and Ben Hall respectively. Details at of the event are &lt;a href="http://www.nxtgenug.net/ViewEvent.aspx?EventID=131" target="_blank"&gt;here&lt;/a&gt;.&amp;nbsp; These and every other talk I have attended as a group member, have usually been relevant, well presented and informative. On top of that free stuff (swag) is usually given away! So if you lust after the must-have accessory from last years TechEd, books , T-Shirts with a geek flavour etc , it&amp;#39;s the place to be!&lt;/p&gt;
&lt;p&gt;I was also lucky enough tonight to be awarded a trophy for the &amp;quot;Best Presentation&amp;quot; given at the Oxford Branch over the past year, for the talks I gave on Windows Mobile Development. This was very flattering, so my thanks to all the people who attended the talks and gave feedback on my presentations.&amp;nbsp; It was nice to know my efforts were appreciated! I hope the talks I gave were useful. &lt;/p&gt;
&lt;p&gt;The slides for the &lt;a href="http://blogs.charteris.com/files/folders/nxtgenug/entry582.aspx" target="_blank"&gt;April 2008 talk&lt;/a&gt; and the &lt;a href="http://blogs.charteris.com/files/folders/nxtgenug/entry472.aspx" target="_blank"&gt;July 2007&lt;/a&gt; talk are available for download for anyone who is interested to find out more. The code samples for the 2008 talk will be available for download shortly. &lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.nxtgenug.net/ViewEvent.aspx?EventID=147" target="_blank"&gt;next talk&lt;/a&gt; is on Wed 6 August on Continuous Integration by Liam Westley. This is an increasingly significant issue in the development of fully testable and deployable enterprise applications. So if you are interested and in the Oxford area it&amp;nbsp;may well be worth attending. &lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=583" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/NxtGen+User+Group/default.aspx">NxtGen User Group</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Windows+Mobile+6.1/default.aspx">Windows Mobile 6.1</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Compact+Framework+3.5/default.aspx">Compact Framework 3.5</category></item><item><title>Exploring the WCF Named Pipe Binding - Part 3</title><link>http://blogs.charteris.com/blogs/chrisdi/archive/2008/06/23/exploring-the-wcf-named-pipe-binding-part-3.aspx</link><pubDate>Mon, 23 Jun 2008 13:08:12 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:578</guid><dc:creator>chrisdi</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;In this post I will show&amp;nbsp;one way to restrict access to the named pipe created by the WCF named pipe listener, to provide a partial workaround for the security flaw mentioned in my last post.&lt;/p&gt; &lt;p&gt;The strategy is to target directly the internal property AllowedUsers on the type System.ServiceModel.Channels.NamedPipeChannelListener. We cannot call this property normally because it is internal to WCF, but reflection allows an alternative way to invoke it. Since this only needs to be done once, when Open is called on the&amp;nbsp;ServiceHost&amp;nbsp;to build the service run-time, the performance cost of using reflection is not an issue here. We will populate this AllowedUsers collection with the SID for a Group representing the authorised users of the service we are protecting, supplied as a parameter of the binding before the service is opened. It turns out we also need to add the SID for the service account itself, for reasons I will explain in more detail below. WCF will then use this collection of SIDs, rather than its default list (EVERYONE), when calling CreateNamedPipe in the PipeConnectionListener.&lt;/p&gt; &lt;p&gt;After Open has been called on the ServiceHost, WCF builds the server run-time stack. The key part of this process which interests us is the point where the channel listener is created by the transport binding element. When using the standard netNamedPipe binding, the relevant transport binding element is of type System.ServiceModel.NamedPipeTransportBindingElement. We can conveniently perform our amendment to the configuration of the listener, by subclassing this NamedPipeTransportBindingElement and overriding the virtual method BuildChannelListener&amp;lt;&amp;gt;(). This allows us to get a reference to the listener after it has been created by the standard WCF transport binding element code, but before BeginAccept() is called on it (whch is when the first&amp;nbsp;pipe instance is created).&lt;/p&gt; &lt;p&gt;Here is some code for a custom named pipe binding which implements this strategy:&lt;/p&gt; &lt;div style="border-right:black 1px solid;padding-right:10px;border-top:black 1px solid;padding-left:10px;padding-bottom:10px;margin:0px auto;border-left:black 1px solid;width:95%;padding-top:10px;border-bottom:black 1px solid;text-align:left;"&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&lt;font face="Courier New"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; System;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;font face="Courier New"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; System.Collections.Generic;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;font face="Courier New"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; System.ServiceModel.Channels;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;font face="Courier New"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; System.ServiceModel;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;font face="Courier New"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; System.Reflection;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;font face="Courier New"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; System.Security.Principal;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;font face="Courier New"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt; System.Threading;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font color="#0000ff"&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;namespace&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt; Charteris.ChrisDicksonBlog.Samples&lt;/font&gt;&lt;br /&gt;&lt;font face="Courier New"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp; public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; &lt;font color="#008080"&gt;AclSecuredNamedPipeBinding&lt;/font&gt; : &lt;/font&gt;&lt;font color="#008080" size="2"&gt;CustomBinding&lt;br /&gt;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;{&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt; AclSecuredNamedPipeBinding()&lt;/font&gt;&lt;font face="Courier New"&gt;: &lt;font color="#0000ff"&gt;base&lt;/font&gt;()&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;&lt;font color="#008080"&gt;NetNamedPipeBinding&lt;/font&gt; standardBinding = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;NetNamedPipeBinding&lt;/font&gt;(&lt;font color="#008080"&gt;NetNamedPipeSecurityMode&lt;/font&gt;.Transport);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt; (&lt;font color="#008080"&gt;BindingElement&lt;/font&gt; element &lt;font color="#0000ff"&gt;in&lt;/font&gt; standardBinding.CreateBindingElements())&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;&lt;font color="#008080"&gt;NamedPipeTransportBindingElement&lt;/font&gt; transportElement = element &lt;font color="#0000ff"&gt;as&lt;/font&gt; &lt;font color="#008080"&gt;NamedPipeTransportBindingElement&lt;/font&gt;;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;base&lt;/font&gt;.Elements.Add(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;null&lt;/font&gt; != transportElement ? &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;AclSecuredNamedPipeTransportBindingElement&lt;/font&gt;(transportElement) : element);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;AddUserOrGroup(&lt;font color="#008080"&gt;WindowsIdentity&lt;/font&gt;.GetCurrent().User);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; AddUserOrGroup(&lt;font color="#008080"&gt;SecurityIdentifier&lt;/font&gt; sid)&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;&lt;font color="#008080"&gt;List&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;SecurityIdentifier&lt;/font&gt;&amp;gt; allowedUsers &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = Elements.Find&amp;lt;&lt;font color="#008080"&gt;AclSecuredNamedPipeTransportBindingElement&lt;/font&gt;&amp;gt;().AllowedUsers;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt; (!allowedUsers.Contains(sid))&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;allowedUsers.Add(sid);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp; public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; &lt;font color="#008080"&gt;AclSecuredNamedPipeTransportBindingElement&lt;/font&gt; : &lt;/font&gt;&lt;font color="#008080" size="2"&gt;NamedPipeTransportBindingElement&lt;br /&gt;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#008080"&gt;Type&lt;/font&gt; namedPipeChannelListenerType&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= &lt;font color="#008080"&gt;Type&lt;/font&gt;.GetType(&lt;font color="#800000"&gt;&amp;quot;System.ServiceModel.Channels.NamedPipeChannelListener, System.ServiceModel&amp;quot;&lt;/font&gt;, &lt;font color="#0000ff"&gt;false&lt;/font&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt; AclSecuredNamedPipeTransportBindingElement(&lt;font color="#008080"&gt;NamedPipeTransportBindingElement&lt;/font&gt; inner)&lt;/font&gt;&lt;font face="Courier New"&gt;: &lt;font color="#0000ff"&gt;base&lt;/font&gt;(inner)&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;{&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt; (inner &lt;font color="#0000ff"&gt;is&lt;/font&gt; &lt;font color="#008080"&gt;AclSecuredNamedPipeTransportBindingElement&lt;/font&gt;)&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;_allowedUsers = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;List&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;SecurityIdentifier&lt;/font&gt;&amp;gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((&lt;font color="#008080"&gt;AclSecuredNamedPipeTransportBindingElement&lt;/font&gt;)inner)._allowedUsers);&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt; &lt;font color="#0000ff"&gt;override&lt;/font&gt; &lt;font color="#008080"&gt;BindingElement&lt;/font&gt; Clone()&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt; &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;AclSecuredNamedPipeTransportBindingElement&lt;/font&gt;(&lt;font color="#0000ff"&gt;this&lt;/font&gt;);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt; &lt;font color="#0000ff"&gt;override&lt;/font&gt; &lt;font color="#008080"&gt;IChannelListener&lt;/font&gt;&amp;lt;TChannel&amp;gt; BuildChannelListener&amp;lt;TChannel&amp;gt;(&lt;font color="#008080"&gt;BindingContext&lt;/font&gt; context)&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Courier New" size="2"&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#008080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IChannelListener&lt;/font&gt;&amp;lt;TChannel&amp;gt; listener = &lt;font color="#0000ff"&gt;base&lt;/font&gt;.BuildChannelListener&amp;lt;TChannel&amp;gt;(context);&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#008080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PropertyInfo&lt;/font&gt; p = namedPipeChannelListenerType.GetProperty(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#800000"&gt;&amp;quot;AllowedUsers&amp;quot;&lt;/font&gt;, &lt;font color="#008080"&gt;BindingFlags&lt;/font&gt;.Instance|&lt;font color="#008080"&gt;BindingFlags&lt;/font&gt;.NonPublic);&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.SetValue(listener, _allowedUsers, &lt;font color="#0000ff"&gt;null&lt;/font&gt;);&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/font&gt; listener;&lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; internal&lt;/font&gt; &lt;font color="#008080"&gt;List&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;SecurityIdentifier&lt;/font&gt;&amp;gt; AllowedUsers { &lt;font color="#0000ff"&gt;get&lt;/font&gt; { &lt;font color="#0000ff"&gt;return&lt;/font&gt; _allowedUsers; } }&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private&lt;/font&gt; &lt;font color="#008080"&gt;List&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;SecurityIdentifier&lt;/font&gt;&amp;gt; _allowedUsers = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;List&lt;/font&gt;&amp;lt;&lt;font color="#008080"&gt;SecurityIdentifier&lt;/font&gt;&amp;gt;();&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&amp;nbsp; }&lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;As it stands, this code allows the SIDs of service users to be added in code but not by means of service configuration. The latter is left as an exercise for the reader, as they say.&lt;/p&gt; &lt;p&gt;Using this custom binding, we can&amp;nbsp;restrict use of a service endpoint to members of a specific Windows group, by means of code like this in the service host:&lt;/p&gt; &lt;div style="border-right:black 1px solid;padding-right:10px;border-top:black 1px solid;padding-left:10px;padding-bottom:10px;margin:0px auto;border-left:black 1px solid;width:95%;padding-top:10px;border-bottom:black 1px solid;text-align:left;"&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#008080"&gt;AclSecuredNamedPipeBinding&lt;/font&gt; binding = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;AclSecuredNamedPipeBinding&lt;/font&gt;();&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#008080"&gt;SecurityIdentifier&lt;/font&gt; allowedGroup &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (&lt;font color="#008080"&gt;SecurityIdentifier&lt;/font&gt;)(&lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;NTAccount&lt;/font&gt;(&lt;font color="#800000"&gt;&amp;quot;NPServiceUsers&amp;quot;&lt;/font&gt;).Translate(&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;(&lt;font color="#008080"&gt;SecurityIdentifier&lt;/font&gt;)));&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;binding.AddUserOrGroup(allowedGroup);&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;...&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;_serviceHost.AddServiceEndpoint(&lt;font color="#0000ff"&gt;... &lt;/font&gt;, binding, ...);&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;...&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;_serviceHost.Open()&lt;/font&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;I described this as a partial workaround for the flaw in the default security provided by the standard binding. It is not a full workaround because SIDs which are allowed access to the pipe still have the powerful permission FILE_CREATE_PIPE_INSTANCE, which ideally we would not want anyone other then the service account itself to have.&lt;/p&gt; &lt;p&gt;I said I would say something about why we need to add the service account itself to the AllowedUsers collection. This&amp;nbsp;relates back&amp;nbsp;to the CREATOR OWNER anomaly in the pipe DACL, which I raised in my last post. You might think (and I suspect one of the WCF developers thought) that this ACE in the DACL would grant the service account the rights it needs to set up the listener and handle client requests arriving on the pipe. This isn&amp;#39;t the case, though... it is actually the EVERYONE ACE which enables a service using the&amp;nbsp;standard binding to work correctly.&lt;/p&gt; &lt;p&gt;Let&amp;#39;s look what happens if we remove the line &lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;AddUserOrGroup(&lt;font color="#008080"&gt;WindowsIdentity&lt;/font&gt;.GetCurrent().User);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;from the constructor&amp;nbsp;the custom binding, so that the DACL on the pipe just contains the NETWORK deny ACE, an ACE allowing access to our service users&amp;#39; group, and the CREATOR OWNER ACE. In other words, just like the one created by the standard binding, except with our service users&amp;#39; group instead of EVERYONE.&amp;nbsp; &lt;/p&gt; &lt;p&gt;With this configuration,&amp;nbsp;the service appears to start correctly, but as soon as the first client message hits the pipe,&amp;nbsp;the service host starts to consume CPU cycles uncontrollably (and ultimately has to be killed) and the client never gets any response.&amp;nbsp;Turning on tracing shows that the service is repeatedly trying to create a new pipe instance, and failing with an Access Denied error:&lt;/p&gt; &lt;div style="border-right:black 1px solid;padding-right:10px;border-top:black 1px solid;padding-left:10px;padding-bottom:10px;margin:0px auto;border-left:black 1px solid;width:95%;padding-top:10px;border-bottom:black 1px solid;text-align:left;"&gt; &lt;p&gt;&amp;lt;E2ETraceEvent xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/2004/06/E2ETraceEvent&amp;quot;&amp;gt;&amp;lt;System"&gt;http://schemas.microsoft.com/2004/06/E2ETraceEvent&amp;quot;&amp;gt;&amp;lt;System&lt;/a&gt; xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/2004/06/windows/eventlog/system&amp;quot;&amp;gt;&amp;lt;EventID&amp;gt;131075&amp;lt;/EventID&amp;gt;&amp;lt;Type&amp;gt;3&amp;lt;/Type&amp;gt;&amp;lt;SubType"&gt;http://schemas.microsoft.com/2004/06/windows/eventlog/system&amp;quot;&amp;gt;&amp;lt;EventID&amp;gt;131075&amp;lt;/EventID&amp;gt;&amp;lt;Type&amp;gt;3&amp;lt;/Type&amp;gt;&amp;lt;SubType&lt;/a&gt; Name=&amp;quot;Error&amp;quot;&amp;gt;0&amp;lt;/SubType&amp;gt;&amp;lt;Level&amp;gt;2&amp;lt;/Level&amp;gt;&amp;lt;TimeCreated SystemTime=&amp;quot;2008-05-14T09:47:27.8109616Z&amp;quot; /&amp;gt;&amp;lt;Source Name=&amp;quot;System.ServiceModel&amp;quot; /&amp;gt;&amp;lt;Correlation ActivityID=&amp;quot;{905d5b25-0f13-4f25-b3fb-a31d9a69738f}&amp;quot; /&amp;gt;&amp;lt;Execution ProcessName=&amp;quot;WCFDemoNPServer&amp;quot; ProcessID=&amp;quot;5916&amp;quot; ThreadID=&amp;quot;3&amp;quot; /&amp;gt;&amp;lt;Channel /&amp;gt;&amp;lt;Computer&amp;gt;#####&amp;lt;/Computer&amp;gt;&amp;lt;/System&amp;gt;&amp;lt;ApplicationData&amp;gt;&amp;lt;TraceData&amp;gt;&amp;lt;DataItem&amp;gt;&amp;lt;TraceRecord xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord"&gt;http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord&lt;/a&gt;&amp;quot; Severity=&amp;quot;Error&amp;quot;&amp;gt;&amp;lt;TraceIdentifier&amp;gt;http://msdn.microsoft.com/en-GB/library/System.ServiceModel.Diagnostics.ThrowingException.aspx&amp;lt;/TraceIdentifier&amp;gt;&amp;lt;Description&amp;gt;Throwing an exception.&amp;lt;/Description&amp;gt;&amp;lt;AppDomain&amp;gt;WCFDemoNPServer.exe&amp;lt;/AppDomain&amp;gt;&lt;br /&gt;&amp;lt;Exception&amp;gt;&lt;br /&gt;&amp;lt;ExceptionType&amp;gt;System.ServiceModel.AddressAccessDeniedException, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;lt;/ExceptionType&amp;gt;&lt;br /&gt;&amp;lt;Message&amp;gt;&lt;br /&gt;Cannot listen on pipe &amp;#39;net.pipe://localhost/WCFDemoNPServer/NPService&amp;#39;: Unrecognized error 5 (0x5)&lt;br /&gt;&amp;lt;/Message&amp;gt;&lt;br /&gt;&amp;lt;StackTrace&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.PipeConnectionListener.CreatePipe()&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.PipeConnectionListener.BeginAccept(AsyncCallback callback, Object state)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.BufferedConnectionListener.BeginAccept(AsyncCallback callback, Object state)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.TracingConnectionListener.BeginAccept(AsyncCallback callback, Object state)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ConnectionAcceptor.AcceptIfNecessary(Boolean startAccepting)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ConnectionAcceptor.HandleCompletedAccept(IAsyncResult result)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ConnectionAcceptor.AcceptCompletedCallback(IAsyncResult result)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Diagnostics.Utility.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.AsyncResult.Complete(Boolean completedSynchronously)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.PipeConnectionListener.PendingAccept.OnAcceptComplete(Boolean haveResult, Int32 error, Int32 numBytes)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.OverlappedContext.CompleteCallback(UInt32 error, UInt32 numBytes, NativeOverlapped* nativeOverlapped)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Diagnostics.Utility.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)&lt;br /&gt;&amp;lt;/StackTrace&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;lt;ExceptionString&amp;gt;System.ServiceModel.AddressAccessDeniedException: Cannot listen on pipe &amp;#39;net.pipe://localhost/WCFDemoNPServer/NPService&amp;#39;: Unrecognized error 5 (0x5) ---&amp;amp;amp;gt; System.IO.PipeException: Cannot listen on pipe &amp;#39;net.pipe://localhost/WCFDemoNPServer/NPService&amp;#39;: Unrecognized error 5 (0x5)&lt;br /&gt;&amp;nbsp;&amp;nbsp; --- End of inner exception stack trace ---&amp;lt;/ExceptionString&amp;gt;&amp;lt;InnerException&amp;gt;&amp;lt;ExceptionType&amp;gt;System.IO.PipeException, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;lt;/ExceptionType&amp;gt;&amp;lt;Message&amp;gt;Cannot listen on pipe &amp;#39;net.pipe://localhost/WCFDemoNPServer/NPService&amp;#39;: Unrecognized error 5 (0x5)&amp;lt;/Message&amp;gt;&amp;lt;StackTrace&amp;gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.PipeConnectionListener.CreatePipe()&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.PipeConnectionListener.BeginAccept(AsyncCallback callback, Object state)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.BufferedConnectionListener.BeginAccept(AsyncCallback callback, Object state)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.TracingConnectionListener.BeginAccept(AsyncCallback callback, Object state)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ConnectionAcceptor.AcceptIfNecessary(Boolean startAccepting)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ConnectionAcceptor.HandleCompletedAccept(IAsyncResult result)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.ConnectionAcceptor.AcceptCompletedCallback(IAsyncResult result)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Diagnostics.Utility.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.AsyncResult.Complete(Boolean completedSynchronously)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.PipeConnectionListener.PendingAccept.OnAcceptComplete(Boolean haveResult, Int32 error, Int32 numBytes)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Channels.OverlappedContext.CompleteCallback(UInt32 error, UInt32 numBytes, NativeOverlapped* nativeOverlapped)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.ServiceModel.Diagnostics.Utility.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)&lt;br /&gt;&amp;lt;/StackTrace&amp;gt;&amp;lt;ExceptionString&amp;gt;System.IO.PipeException: Cannot listen on pipe &amp;#39;net.pipe://localhost/WCFDemoNPServer/NPService&amp;#39;: Unrecognized error 5 (0x5)&amp;lt;/ExceptionString&amp;gt;&amp;lt;/InnerException&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;lt;/Exception&amp;gt;&amp;lt;/TraceRecord&amp;gt;&amp;lt;/DataItem&amp;gt;&amp;lt;/TraceData&amp;gt;&amp;lt;/ApplicationData&amp;gt;&amp;lt;/E2ETraceEvent&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;In essence, it seems to me that what is happening is that the service succeeds in getting a handle to the first pipe instance, at the time the pipe is created, but because it hasn&amp;#39;t granted itself an ACE in the DACL on the pipe, it is locking itself out of obtaining handles to new instances of the pipe, which it needs to do as soon as a client request is received on the first instance. And there is clearly another bug in the IO completion code for the PipeConnectionListener, which causes this exception to recurse rather than faulting the service host.&lt;/p&gt; &lt;p&gt;So, we have to make the service account itself an AllowedUser, to stop this happening.&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=578" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/chrisdi/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.charteris.com/blogs/chrisdi/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.charteris.com/blogs/chrisdi/archive/tags/Security/default.aspx">Security</category></item><item><title>Exploring the WCF Named Pipe Binding - Part 2</title><link>http://blogs.charteris.com/blogs/chrisdi/archive/2008/06/16/exploring-the-wcf-named-pipe-binding-part-2.aspx</link><pubDate>Mon, 16 Jun 2008 18:04:14 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:574</guid><dc:creator>chrisdi</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;In&amp;nbsp;my previous post I explained how the named pipe for a WCF NetNamedPipe endpoint is named, and how a client discovers this name in order to connect to the service. This time, I&amp;#39;m looking at the Windows-level security.&lt;/p&gt; &lt;p&gt;Both the named pipe itself, and the shared memory object used by the server to publish the name of the pipe to clients, are objects which Windows secures with Access Control Lists (ACLs). Let&amp;#39;s look at the named pipe itself first of all...&lt;/p&gt; &lt;p&gt;The ACL&amp;nbsp;set up&amp;nbsp;when WCF creates the named pipe&amp;nbsp;looks like this in SDDL (Security Description Definition Language):&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#000080"&gt;D:(D;;FA;;;NU)(A;;0x12019f;;;WD)(A;;0x12019f;;;CO)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The elements of this SDDL translate as follows:&lt;/p&gt; &lt;div style="border-right:black 1px solid;padding-right:10px;border-top:black 1px solid;padding-left:10px;padding-bottom:10px;margin:0px auto;border-left:black 1px solid;width:95%;padding-top:10px;border-bottom:black 1px solid;text-align:left;"&gt; &lt;p&gt;&lt;font color="#000080"&gt;(D;;FA;;;NU)&lt;/font&gt; - Deny Full Access to NETWORK USERS - that is: deny the access rights specified by the access mask GENERIC_ALL, to&amp;nbsp;any security context&amp;nbsp;having membership of the group with well-known SID S-1-5-2&lt;/p&gt; &lt;p&gt;&lt;font color="#000080"&gt;(A;;0x12019f;;;WD)&lt;/font&gt; - Allow the access rights specified by the access mask 0x0012019f, to EVERYONE (the well-known SID S-1-1-0)&lt;/p&gt; &lt;p&gt;&lt;font color="#000080"&gt;(A;;0x12019f;;;CO)&lt;/font&gt; - Allow the access rights specified by the access mask 0x0012019f, to the well-known SID S-1-3-0 (CREATOR OWNER)&lt;/p&gt;&lt;/div&gt; &lt;p&gt;The first entry enforces the rule that a WCF service&amp;nbsp;endpoint with NetNamedPipe binding can only be accessed by a client process running on the same machine as the service. This is because any logon token created when a user is authenticated over a network protocol has the NETWORK USERS SID S-1-5-2 added to it by the system. &lt;/p&gt; &lt;p&gt;The second ACE allows any authenticated user which is not a network logon to have the specified access to the named pipe. The access mask 0x0012019f corresponds to the following access rights:&lt;/p&gt; &lt;div style="border-right:black 1px solid;padding-right:10px;border-top:black 1px solid;padding-left:10px;padding-bottom:10px;margin:0px auto;border-left:black 1px solid;width:95%;padding-top:10px;border-bottom:black 1px solid;text-align:left;"&gt; &lt;p&gt;0x00100000 - SYNCHRONIZE&lt;/p&gt; &lt;p&gt;0x00020000 - READ_CONTROL&lt;/p&gt; &lt;p&gt;0x00000100 - FILE_WRITE_ATTRIBUTES&lt;/p&gt; &lt;p&gt;0x00000080 - FILE_READ_ATTRIBUTES&lt;/p&gt; &lt;p&gt;0x00000010 - FILE_WRITE_EA&lt;/p&gt; &lt;p&gt;0x00000008 - FILE_READ_EA&lt;/p&gt; &lt;p&gt;0x00000004 - FILE_CREATE_PIPE_INSTANCE&lt;/p&gt; &lt;p&gt;0x00000002 - FILE_WRITE_DATA&lt;/p&gt; &lt;p&gt;0x00000001 - FILE_READ_DATA&lt;/p&gt;&lt;/div&gt; &lt;p&gt;More on this in a moment.&lt;/p&gt; &lt;p&gt;The third ACE looks a bit&amp;nbsp;odd to me. My understanding is that CREATOR OWNER is a placeholder SID which is really only relevant when a new security descriptor is being created for a new object using an existing descriptor as the pattern: if the template descriptor contains ACEs for the CREATOR OWNER SID, the corresponding ACEs in the security descriptor created for the new object have the SID for the principal which created the object. No logon token actually contains the CREATOR OWNER SID, as far as I know. Now, when an access check is being done against an ACL-protected object, only the ACEs which match a SID in the logon token are relevant to granting or denying permission. If I&amp;#39;m right that no logon token is ever going to contain the CREATOR OWNER SID,&amp;nbsp;then this third ACE on the pipe&amp;#39;s DACL will never have any function in an access check performed when a handle to the pipe is acquired. I suspect that the intention of the WCF developers was that this ACE would provide the access permissions for the service process whose channel listener created the pipe: but it doesn&amp;#39;t do this, as I will demonstrate in&amp;nbsp;a&amp;nbsp;subsequent post.&lt;/p&gt; &lt;p&gt;For the remainder of this post, let&amp;#39;s focus on that second ACE, which grants permissions to the EVERYONE group. Did you raise an eyebrow at that FILE_CREATE_PIPE_INSTANCE permission? Do we really want EVERYONE to have permission to create an instance of the service&amp;#39;s named pipe? No, we certainly do not! This is a bug in WCF which opens a serious security vulnerability.&lt;/p&gt; &lt;p&gt;The problem is that any code at all, which is able to execute on the machine where the service lives, can call the Win32 API CreateNamedPipe with appropriate arguments and get a valid server-side handle to an instance of the WCF service&amp;#39;s named pipe. It can then call ConnectNamePipe, whereupon it will&amp;nbsp;be in direct competition with the actual service for incoming client connections to the service. Sooner or later some unsuspecting client trying to send a request to the service will be allocated to&amp;nbsp;the instance of the pipe &amp;quot;owned&amp;quot; by the rogue process rather than one owned by the service. &lt;/p&gt; &lt;p&gt;At best, the client&amp;#39;s request to the service will just fail. But the rogue process might also read the data in the client&amp;#39;s request; use the client&amp;#39;s credentials by calling ImpersonateNamedPipeClient; or possibly return spoof response data to the client.&lt;/p&gt; &lt;p&gt;We really need to do something about this, but what? Can we&amp;nbsp;control the DACL&amp;nbsp;which gets put on&amp;nbsp;the pipe, when the service&amp;nbsp;runtime is created? Let&amp;#39;s deconstruct exactly where this happens...&lt;/p&gt; &lt;p&gt;The &amp;nbsp;DACL applied to a named pipe is determined by the &lt;em&gt;lpSecurityAttributes &lt;/em&gt;argument passed to Windows when CreateNamedPipe is first called:&lt;/p&gt;&lt;pre class="libCScode" id="ctl00_rs1_mainContentContainer_ctl01"&gt;HANDLE WINAPI CreateNamedPipe(
  __in      LPCTSTR &lt;i&gt;lpName&lt;/i&gt;,
  __in      DWORD &lt;i&gt;dwOpenMode&lt;/i&gt;,
  __in      DWORD &lt;i&gt;dwPipeMode&lt;/i&gt;,
  __in      DWORD &lt;i&gt;nMaxInstances&lt;/i&gt;,
  __in      DWORD &lt;i&gt;nOutBufferSize&lt;/i&gt;,
  __in      DWORD &lt;i&gt;nInBufferSize&lt;/i&gt;,
  __in      DWORD &lt;i&gt;nDefaultTimeOut&lt;/i&gt;,
  __in_opt  LPSECURITY_ATTRIBUTES &lt;i&gt;lpSecurityAttributes&lt;/i&gt;
);
&lt;/pre&gt;
&lt;p&gt;In WCF, this function is declared in System.ServiceModel.Channels.UnsafeNativeMethods, and is called by the private method CreatePipe() of System.ServiceModel.Channels.PipeConnectionListener, which is the implementation of IConnectionListener used by the service channel stack of the netNamedPipe binding. CreatePipe() is invoked when IConnectionListener.BeginAccept() is called by the service runtime. Our old friend Reflector shows us that the &lt;em&gt;lpSecurityAttributes&lt;/em&gt; argument for CreateNamedPipe() is constructed in the PipeConnectionListener.CreatePipe method, using a hard-coded constant -1073741824, and a private member field, allowedSids, of type List&amp;lt;SecurityIdentifier&amp;gt;. &lt;/p&gt;
&lt;p&gt;That constant, -1073741824, is just 0xC0000000 in decimal, which is the value of GENERIC_READ|GENERIC_WRITE (defined in &amp;nbsp;WinNT.h). This specifies the access mask which is&amp;nbsp;granted to each of the allowed SIDs. Generic access masks are translated by Windows into the corresponding standard and specific access mask bits applicable to the type of object being secured: in this case, the translated mask is the 0x0012019f we saw in the pipe DACL actually created.&lt;/p&gt;
&lt;p&gt;The list of allowed SIDs for the PipeConnectionListener is supplied in its constructor.&amp;nbsp;If we look at the NamedPipeTransportBindingElement&amp;nbsp;which defines how the transport channel is built for the netNamedPipe binding, we see that it too has a private&amp;nbsp;List&amp;lt;SecurityIdentifier&amp;gt; field, called allowedUsers, and a corresponding internal property, AllowedUsers. So it looks as though the original intention&amp;nbsp;of the WCF design was that the binding should define a set of SIDs which were to be allowed to access the pipe, and each one would get GENERIC_READ|GENERIC_WRITE access to the pipe. If this worked, it would not solve the problem that the DACL gives away FILE_CREATE_PIPE_INSTANCE rights to the pipe, but at least it would restrict access (including for that particular right) to a group of SIDs which the service configuration could control. This would&amp;nbsp;be a big improvement on giving the right away to EVERYONE&amp;nbsp;, even if it does not completely&amp;nbsp;solve the problem.&lt;/p&gt;
&lt;p&gt;Unfortunately, the plumbing does not appear to be all there in the WCF bits to make this work: the allowedUsers in the binding element is not hooked up to the allowedSids of the PipeConnectionListener when the service runtime is built. In my next post, we&amp;#39;ll look at ways to get round this.&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=574" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/chrisdi/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.charteris.com/blogs/chrisdi/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.charteris.com/blogs/chrisdi/archive/tags/Security/default.aspx">Security</category></item><item><title>Smartphone Security Risks - Perceived Threats</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2008/06/13/smartphone-security-risks-perceived-threats.aspx</link><pubDate>Fri, 13 Jun 2008 08:11:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:571</guid><dc:creator>rogerw</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;In a previous &lt;a href="http://blogs.charteris.com/blogs/rogerw/archive/2008/03/16/lock-up-your-mobiles-the-future-s-not-so-bright-and-secure.aspx"&gt;post&lt;/a&gt; I wrote about the security threats to smartphone devices following the release of a significant mobile device virus in the Far East. Its seems I am&amp;nbsp; not alone in my concerns. &lt;/p&gt;
&lt;p&gt;In a&amp;nbsp; recent survey of IT managers&amp;nbsp; 94%, of 300 IT managers surveyed at this years&amp;#39; InfoSecurity Europe exhibition regarded smartphones as a growing security risk, with concern higher among enterprises with more than 1000 employees (97%) than smaller organisations (91%).&lt;/p&gt;
&lt;p&gt;The full details are at: &lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.computerweekly.com/Articles/2008/06/03/230910/smartphones-becoming-an-increased-security-risk.htm" href="http://www.computerweekly.com/Articles/2008/06/03/230910/smartphones-becoming-an-increased-security-risk.htm"&gt;http://www.computerweekly.com/Articles/2008/06/03/230910/smartphones-becoming-an-increased-security-risk.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are of course lots of things that can be done to mitigate the security risks to mobile devices. For enterprises there is a good guide to device and data security at:&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.microsoft.com/windowsmobile/enterprise/security.mspx" href="http://www.microsoft.com/windowsmobile/enterprise/security.mspx"&gt;http://www.microsoft.com/windowsmobile/enterprise/security.mspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=571" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Mobile+Devices/default.aspx">Mobile Devices</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/security/default.aspx">security</category></item><item><title>Windows Mobile 6 ROM Update For Orange SPV E650</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2008/06/13/windows-mobile-6-rom-update-for-orange-spv-e650.aspx</link><pubDate>Thu, 12 Jun 2008 23:35:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:570</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I recently got hold of the latest Windows Mobile 6 ROM Update for the Orange E650 Smartphone. Note this &lt;strong&gt;does not&lt;/strong&gt; upgrade the device to Windows 6.1 just patches issues in the Windows Mobile 6 release. We are still waiting to discover whether an update for Windows Mobile 6.1 will be available for this platform. &lt;/p&gt;
&lt;p&gt;Apparently for the ROM update fixes numerous defects with freezing/lock and Bluetooth issues. It upgrades the device to ROM version 1.35.61.1&lt;/p&gt;
&lt;p&gt;I have installed the update on my E650 and so far no issues or problems. Battery life also seems marginally better. I know many people who have had frequent lockups etc with this device at times so if you have these issues, this is a recommended upgrade. &lt;/p&gt;
&lt;h3&gt;Installing the Update&lt;/h3&gt;
&lt;p&gt;Note that this is a ROM update so will wipe all previous data on the device. I would recommend you do the following: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make sure the device is connected to a charging source or has at least 20 minutes of power left before commencing the upgrade. &lt;/li&gt;
&lt;li&gt;Perform a backup of all data and software on the device you wish to keep. &lt;/li&gt;
&lt;li&gt;If you have encrypted data and SD cards on the device ensure you have also got an unencrypted backup of the data and SD card contents. Windows Mobile 6 lets you encrypt data and SD cards as standard but the encryption is tied to the specific device. There is a slim chance that if the upgrade goes wrong you will not be able to recover the keys on the device to decrypt. &lt;/li&gt;
&lt;li&gt;Remember the partnership name used as you will need to re-create it.&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;Getting the Update&lt;/h3&gt;
&lt;p&gt;The link for the Windows Mobile 6 ROM for the E650 is as follows: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.business.orange.co.uk/servlet/Satellite?pagename=Business&amp;amp;c=OUKDevice&amp;amp;cid=1044134892703&amp;amp;extarg1=Phone&amp;amp;t=SMEDeviceDownloads"&gt;http://www.business.orange.co.uk/servlet/Satellite?pagename=Business&amp;amp;c=OUKDevice&amp;amp;cid=1044134892703&amp;amp;extarg1=Phone&amp;amp;t=SMEDeviceDownloads&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The page linked to from the above URL also provides another link to a ROM installation guide. This is well worth reading. &lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=570" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Mobile+Devices/default.aspx">Mobile Devices</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Windows+Mobile+6.0/default.aspx">Windows Mobile 6.0</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Orange+SPV+E650/default.aspx">Orange SPV E650</category></item><item><title>Exploring the WCF Named Pipe Binding - Part 1</title><link>http://blogs.charteris.com/blogs/chrisdi/archive/2008/05/19/exploring-the-wcf-named-pipe-binding-part-1.aspx</link><pubDate>Mon, 19 May 2008 14:18:16 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:556</guid><dc:creator>chrisdi</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;This is the first in a series of posts in which I will aim to&amp;nbsp;explain some details of the named pipe binding provided by Windows Communication Foundation&amp;nbsp;(WCF), discovered during the course of some exploring I have been doing. My motivations for looking into this were:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;The standard binding (NetNamedPipeBinding) exposes&amp;nbsp;very few properties&amp;nbsp;relating to configuration&amp;nbsp;of the underlying transport mechanism. Having some awareness of the&amp;nbsp;Windows named pipe APIs from previous work, I was interested to understand how the WCF binding mapped to the underlying transport&amp;nbsp;protocol; which named pipe configuration options were &amp;quot;baked into&amp;quot; the WCF implementation and which might be controlled/tweaked with a bit of work in the channel stack.  &lt;li&gt;I wanted to understand in more detail the security characteristics of the binding.  &lt;li&gt;I was just nosey :-)&amp;nbsp;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;In this post I will start by looking at the how the named pipe used by a service endpoint with the NetNamedPipe binding is created, and how clients locate it in order to connect. &lt;/p&gt; &lt;p&gt;I had expected that if I looked&amp;nbsp;into the service process using a tool like&amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx" target="_blank"&gt;Process Explorer&lt;/a&gt;, I would see&amp;nbsp;it holding a handle to a named pipe with a name closely related to the URI of the endpoint. What I see instead is a handle to&amp;nbsp;a pipe named something like... &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#0000a0"&gt;\\.\pipe\197ad019-6e5f-48cb-8f88-02ae11dfd8c0 &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;... clearly the pipe name has been created using a GUID. I also note that the name of the pipe changes each time I stop and restart my service host, so the GUID is being regenerated each time the endpoint runtime is built by WCF.&lt;/p&gt; &lt;p&gt;How then does a client of the service&amp;nbsp;know how to communicate with the endpoint? Somehow it must be able to resolve the well-known URI for the endpoint into whatever is the current name of the pipe it must use to send messages to the service. It turns out that this is accomplished using what amounts to a mini metadata publishing mechanism which is exclusive to the NetNamedPipe binding. This mechanism is based on a named Windows file mapping object backed by the system paging file. It is the name of this object which is invariant, and directly derived from the endpoint URI... though in a far from obvious way.&lt;/p&gt; &lt;p&gt;So in order to locate the correct pipe, a client of a WCF NetNamedPipe service endpoint has to:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;know that the special metadata mechanism exists  &lt;li&gt;know how to derive from the endpoint URI the name of the file mapping object through which the metadata is published  &lt;li&gt;located the file mapping object and use it to open a view&amp;nbsp;on the shared memory  &lt;li&gt;know how to interpret the metadata stored in the shared memory, and translate it into the name of the pipe currently being used by the endpoint&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Some more details for those who are interested:&lt;/p&gt; &lt;div style="border-right:black 1px solid;padding-right:10px;border-top:black 1px solid;padding-left:10px;padding-bottom:10px;margin:0px auto;border-left:black 1px solid;width:95%;padding-top:10px;border-bottom:black 1px solid;text-align:left;"&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;u&gt;Deriving the file mapping object name from the URI&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="left"&gt;The shared memory file mapping object created by the service endpoint listener (System.ServiceModel.Channels.PipeConnectionListener) has a name which looks something like this:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;font color="#0000a0"&gt;net.pipe:EbmV0LnBpnGU6Ly9rL1dDRkRFTU9OUF1g6e9cUFNFUlZJQ0Uv&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;This is derived&amp;nbsp;from the&amp;nbsp;following components:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;[&amp;quot;net.pipe&amp;quot;] [:E|:H] [base-64 encoded&amp;nbsp;byte[] X]&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p align="left"&gt;Where the X is constructed as:&lt;/p&gt; &lt;p align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - when the second component is :E&amp;nbsp;&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UTF8 encoding of&amp;nbsp;[&amp;quot;net.pipe://&amp;quot;] [URI hostname-or-wildcard*] [URI path or parent path]&lt;/p&gt; &lt;p align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - when the second component is :H&amp;nbsp;&amp;nbsp; :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the SHA-1&amp;nbsp;hash of the above (used when the UTF8 encoding of the above exceeds 127 bytes)&lt;/p&gt; &lt;p align="left"&gt;*The URI hostname-or-wildcard depends on the HostNameComparisonMode setting for the endpoint&amp;#39;s transport binding -&amp;nbsp;this property is set to HostNameComparisonMode.StrongWildcard&amp;nbsp;in the standard NetNamedPipeBinding, and is not exposed as a property of the binding itself. This means that this component of the name will be &amp;quot;+&amp;quot; (the strong wildcard symbol) unless a custom binding has been used to tweak the HostNameComparisonMode property of the transport binding element.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;u&gt;Data stored by the service in the shared memory object&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="left"&gt;The service stores 20 bytes of data in&amp;nbsp;the shared memory, representing&amp;nbsp;an instance of&amp;nbsp;the&amp;nbsp;structure System.ServiceModel.Channels.PipeSharedMemory+SharedMemoryContents, which looks like this...&lt;/p&gt; &lt;p align="left"&gt;&lt;font face="Courier New" color="#0000a0" size="2"&gt;[StructLayout(LayoutKind.Sequential)]&lt;br /&gt;struct &lt;b&gt;SharedMemoryContents&lt;/b&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool &lt;b&gt;isInitialized&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Guid &lt;b&gt;pipeGuid&lt;/b&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New" color="#008000"&gt;&lt;font face="Trebuchet MS" color="#000000"&gt;The client uses the GUID stored in this&amp;nbsp;object to construct the pipe name through which to connect to the service endpoint.&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;Of course, the WCF client stack knows how to jump through these hoops, as it uses the same set of System.ServiceModel types as the service used to set up the mechanism.&amp;nbsp;So you don&amp;#39;t really need to know anything about all this if your service client is also a WCF application using the standard binding... which it will be if you are doing things as the WCF designers intended: the named pipe binding was designed&amp;nbsp;solely for&amp;nbsp;WCF-to-WCF&amp;nbsp;scenarios.&amp;nbsp;&lt;/p&gt; &lt;p&gt;That&amp;#39;s not to say that, in principle, there is any fundamental reason why a&amp;nbsp;named pipe binding&amp;nbsp;to a WCF service should not be able to support any arbitrary client implementation which knows how to write messages to and read messages from a named pipe.&amp;nbsp;Perhaps there are&amp;nbsp;integration scenarios involving legacy unmanaged code or mixed technologies on a single box, where a more open named pipe binding might be useful, not least because the underlying transport mechanism is very fast. But the standard NetNamedPipe binding won&amp;#39;t help with this. In practice, it is going to be much easier to&amp;nbsp;use&amp;nbsp;one of the&amp;nbsp;bindings based on&amp;nbsp;standard interoperable protocols, or by providing a COM wrapper around a WCF client implementation.&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=556" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/chrisdi/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.charteris.com/blogs/chrisdi/archive/tags/SOA/default.aspx">SOA</category></item><item><title>Windows Mobile 6.1 Announced - Features and Emulators</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2008/04/11/windows-mobile-6-1-features-and-emulators.aspx</link><pubDate>Fri, 11 Apr 2008 00:30:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:549</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Due to some other work commitments,&amp;#160; I almost missed this, but Windows Mobile 6.1 was announced last week. &lt;/p&gt;  &lt;p&gt;Some of the headline Windows Mobile 6.1 features are as follows: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Provides a lot of usability improvements due to new UI screens and plug-ins. There are new transparency effects and plug-ins for Windows Media and Live Search amongst others. &lt;/li&gt;    &lt;li&gt;Performance improvements over 6.0 &lt;/li&gt;    &lt;li&gt;Simplified WiFi connection via a single screen rather than the myriad screens currently. &lt;/li&gt;    &lt;li&gt;SMS threading (makes related SMS messages look like an instant messaging conversation). You can now also embed and use hyperlinks in SMS messages. &lt;/li&gt;    &lt;li&gt;New version of Mobile Internet Explorer. &lt;/li&gt;    &lt;li&gt;Other miscellaneous improvements. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;From what I&amp;#39;ve seen it looks to be more evolution rather than revolution but definitely very welcome and well worth a look. &lt;/p&gt;  &lt;h5&gt;Product Videos&lt;/h5&gt;  &lt;p&gt;I found find two useful videos on Windows Mobile 6.1 both of which give a run down of some of the features. The first is much longer at 40 minutes but is a presentation by the Windows Mobile team on some of the new features and gives some of their origins. You can find it on the MSN Video site &lt;a href="http://video.msn.com/video.aspx?mkt=en-gb&amp;amp;tab=soapbox&amp;amp;showPlaylist=true&amp;amp;playlist=videoByUuids:uuids:44589ab6-7674-4730-8fb0-ea730631fd77"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The second is more cut down and polished and is on the official &lt;a href="http://www.microsoft.com/windowsmobile/6-1/default.mspx?WT.mc_id=wmhome_WM6_1"&gt;Microsoft Windows Mobile 6.1&lt;/a&gt; site along with other info about Windows Mobile 6.1. &lt;/p&gt;  &lt;h5&gt;Enterprise Benefits - Microsoft System Center Mobile Device Manager 2008&lt;/h5&gt;  &lt;p&gt;One of the key elements for enterprises,&amp;#160; will be the inclusion of a client for the new &lt;a href="http://www.microsoft.com/systemcenter/mobile/default.mspx"&gt;Microsoft System Center 2008 Mobile Device Manager&lt;/a&gt; server technology. You&amp;#39;d have to look hard to find a longer product name! This allows an enterprise to centrally manage and deploy&amp;#160; windows mobile devices and applications as well as providing a Mobile VPN for secure mobile access to corporate resources. &lt;a href="http://www.microsoft.com/systemcenter/mobile/default.mspx"&gt;Microsoft System Center 2008 Mobile Device Manager&lt;/a&gt; was officially announced on April 1 (yes I know - great date choice!). You can find more details &lt;a href="http://www.microsoft.com/systemcenter/mobile/default.mspx"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;h5&gt;Device Upgrades &lt;/h5&gt;  &lt;p&gt;Windows Mobile 6.1 is likely to be offered as standard on many new Windows Mobile devices. It has already been shown on devices from a number of US cellular operators. As for existing devices, one of the videos shows Windows Mobile 6.1&amp;#160; being demonstrated running on the US Htc Tilt model,&amp;#160; which&amp;#160; has a broadly equivalent European model in the &lt;a href="http://www.htc.com/www/product.aspx?id=640"&gt;Htc TynTyn II&lt;/a&gt;. As ever,&amp;#160; precise availability will depend on the desire of the relevant mobile operators to release it, but at least we know its possible. &lt;/p&gt;  &lt;h5&gt;Windows Mobile 6.1 Device Emulators &lt;/h5&gt;  &lt;p&gt;For developers interested in understanding what&amp;#39;s changed in the latest versions and how to develop applications for Windows Mobile 6.1,&amp;#160; you can now get the latest emulators to try things out. I&amp;#39;ve only just started to download and install these, so haven&amp;#39;t really found out whether 6.0 applications will run unaltered yet. &lt;/p&gt;  &lt;p&gt;The emulators for Professional and Standard version of 6.1 are available at: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyId=3D6F581E-C093-4B15-AB0C-A2CE5BFFDB47&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3D6F581E-C093-4B15-AB0C-A2CE5BFFDB47&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=3D6F581E-C093-4B15-AB0C-A2CE5BFFDB47&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Unfortunately they are currently only in USA English. I&amp;#39;m assuming localised emulators will follow shortly. &lt;/p&gt;  &lt;h5&gt;Comparing Versions Of Windows Mobile&lt;/h5&gt;  &lt;p&gt;Its often difficult to keep up with the differences between Windows Mobile 5.0, 6.0 and 6.1 but I found this useful &lt;a href="http://www.microsoft.com/windowsmobile/6-1/version-comparison.aspx"&gt;comparison chart&lt;/a&gt; which neatly differentiates them. &lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=549" width="1" height="1"&gt;</description></item><item><title>Lock Up Your Mobiles - The Future's Not So Bright and Secure</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2008/03/16/lock-up-your-mobiles-the-future-s-not-so-bright-and-secure.aspx</link><pubDate>Sun, 16 Mar 2008 20:35:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:545</guid><dc:creator>rogerw</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Well - it has finally happened. After a number of false starts and numerous of captive creations in&amp;nbsp;various labs, McAfee has reported in the past few weeks, that the first real Windows Mobile virus/trojan to be experienced in the &amp;quot;wild&amp;quot; has been discovered. The virus is known as WinCE/InfoJack. &lt;/p&gt;
&lt;p&gt;Its gone relatively unnoticed in Europe as to date, it has mainly affected South East Asia.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What Does it Do?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;According to McAfee, WinCE/InfoJack has a number of features that show its malicious intent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installing as an autorun program on the memory card &lt;/li&gt;
&lt;li&gt;Installing itself to the phone when an infected memory card is inserted &lt;/li&gt;
&lt;li&gt;Protecting itself from deletion, copying itself back to disk &lt;/li&gt;
&lt;li&gt;Replaces the browser&amp;#39;s home page &lt;/li&gt;
&lt;li&gt;Allows unsigned applications to install without warning &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;As it disables the Windows Mobile application installation security, the virus allows itself to be to auto updated. It also leaves the mobile open to other malware being installed silently.Furthermore, it&amp;nbsp;has the capacity to send data about the device and its possibly its contents to external locations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What Does It Mean?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To date Windows Mobile has been relatively unaffected by malware and viruses. However,&amp;nbsp; I&amp;#39;ve always maintained that their portability, their myriad of connectivity options (3G, WiFi, Bluetooth) and the sheer numbers of devices out there makes them a significant threat both inside an outside an organisation. Imagine a botnet of mobile devices with HSPDA connectivity! Coupled with the amount of sensitive corporate data often carried on these devices that could be stolen and the threat is clear. The fact that memory cards are involved means the capacity to infect other kinds of devices is also a possibility. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So What Can You Do?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Get anti-virus &amp;amp; malware software for your device. Although relatively unpublicised, many of the leading anti-virus providers such as McAfee, Symantec amongst others have had antivirus components for Windows Mobile for several years. Many of these are add-ons aimed at the corporate environment however. Although not necessarily a recommendation, I personally have used the AirScanner suite of tools without any issues so far. It contains firewall utilities as well as anti-virus tools and can be regularly updated over the air. &lt;/p&gt;
&lt;p&gt;The other thing to do is be far more sceptical about the origins of any software you install and whether you can verify its authenticity. For a long time people have installed shareware on mobile devices with relative impunity but with this announcement attitudes will need to be revised somewhat. &lt;/p&gt;
&lt;p&gt;I don&amp;#39;t wish to be considered a doom-monger and if you take precautions and adopt secure usage patterns you shouldn&amp;#39;t be affected. I can&amp;#39;t help feeling that the world of mobile devices is entering a new era however. &lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=545" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Mobile+Devices/default.aspx">Mobile Devices</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/security/default.aspx">security</category></item><item><title>Windows Mobile Development Talk - Nxt Gen User Group, Oxford Branch - Tuesday 11th March 2008</title><link>http://blogs.charteris.com/blogs/speaking/archive/2008/03/04/windows-mobile-development-talk-nxt-gen-user-group-oxford-branch-tuesday-11th-march-2008.aspx</link><pubDate>Tue, 04 Mar 2008 22:48:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:542</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Roger Whitehead, Prinicipal Technologist will be giving to the NxtGen User Group Oxford Branch next Tuesday 11th March 2008 at RM offices in Abingdon, Oxfordshire&amp;nbsp;at 7PM. &lt;/p&gt;
&lt;p&gt;The talk will build on Roger&amp;#39;s&amp;nbsp;previous Introduction to Windows Mobile Development talk and will provide a hands-on introduction to the development, unit testing and deployment of Windows Mobile 6 applications.&amp;nbsp;Roger &amp;nbsp;will be explaining&amp;nbsp;and demonstrating the coding fundamentals behind successful Windows Mobile applications. Coding samples and solutions will also demonstrate some of the latest features of Visual Studio 2008 and Compact Framework 3.5. &lt;/p&gt;
&lt;p&gt;You can find full details the event and&amp;nbsp;how to attend etc at the &lt;a href="http://www.nxtgenug.net/ViewEvent.aspx?EventID=114"&gt;&lt;font color="#88aa88"&gt;NxtGen User Group site&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you can make it would be great to you there.&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=542" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/speaking/archive/tags/nxtgenug/default.aspx">nxtgenug</category><category domain="http://blogs.charteris.com/blogs/speaking/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>Windows Mobile Development Talk - NxtGenUser Group - Oxford Branch - Tuesday 11th March</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2008/03/04/windows-mobile-development-talk-nxtgenuser-group-oxford-branch-tuesday-11th-march.aspx</link><pubDate>Tue, 04 Mar 2008 22:42:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:541</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;A shameless plug for a talk I will be giving to the NxtGen User Group Oxford Branch next Tuesday 11th March 2008 at RM offices in Abingdon, Oxfordshire at 7PM. &lt;/p&gt;
&lt;p&gt;The talk will build on my previous Introduction to Windows Mobile Development talk and will provide a hands-on introduction to the development, unit testing and deployment of Windows Mobile 6 applications. I will be explaining and demonstrating the coding fundamentals behind successful Windows Mobile applications. Coding samples and solutions will also demonstrate some of the latest features of Visual Studio 2008 and Compact Framework 3.5. &lt;/p&gt;
&lt;p&gt;You can find full details the event and how to attend etc at the &lt;a href="http://www.nxtgenug.net/ViewEvent.aspx?EventID=114"&gt;NxtGen User Group site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you can make it would be great to&amp;nbsp;you there.&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=541" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Windows+Mobile+6.0/default.aspx">Windows Mobile 6.0</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/NxtGen+User+Group/default.aspx">NxtGen User Group</category></item><item><title>My Digital Life on del.icio.us</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/03/03/my-digital-life-on-del-icio-us.aspx</link><pubDate>Mon, 03 Mar 2008 21:03:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:538</guid><dc:creator>aland</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;img src="http://del.icio.us/favicon.ico" alt="" /&gt;&amp;nbsp; &lt;a title="Alan Dean on del.icio.us" href="http://del.icio.us/alan.dean" rel="bookmark"&gt;del.icio.us/alan.dean&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a social bookmarking web app. It is definitely in my top three most-used sites (at the time of writing I have just short of 7,000 bookmarks saved).&lt;/p&gt;
&lt;p&gt;At the simplest level, it is far easier to &lt;a title="A guide to saving bookmarks" href="http://del.icio.us/help/saving" rel="nofollow"&gt;save your bookmarks in del.icio.us&lt;/a&gt; than on your local machine (favorites or desktop). I have installed both the &lt;a title="del.icio.us Buttons for Internet Explorer" href="http://del.icio.us/help/ie/extension" rel="nofollow"&gt;IE Add-In&lt;/a&gt; and the &lt;a title="Integrate del.icio.us into Firefox with the del.icio.us Bookmarks extension" href="http://del.icio.us/help/firefox/extensionnew" rel="nofollow"&gt;Firefox Extension&lt;/a&gt; which make saving your current page in the browser a doddle. Here is a screenshot of the IE Add-In Save Dialog:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://farm3.static.flickr.com/2311/2307735062_0cf5a42058_o.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;The key to making del.icio.us work for you is to get the tagging right. In the screenshot above, I have simply tagged the Charteris website as &amp;#39;Charteris&amp;#39; but usually I use many more tags, for example:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://farm3.static.flickr.com/2272/2307772646_56d1773d8b_o.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Here I have applied eight tags to the &lt;a title="[httpRange-14] Resolved" href="http://lists.w3.org/Archives/Public/www-tag/2005Jun/0039.html" rel="nofollow"&gt;[httpRange-14] resolution&lt;/a&gt;. Doing this builds up a rich &amp;#39;tagspace&amp;#39; that I can drill-down into when I want to use my saved bookmarks.&lt;/p&gt;
&lt;p&gt;I have published&amp;nbsp;&lt;a title="Tagging in del.icio.us" href="http://www.youtube.com/watch?v=tDZgLO_DbJo" rel="bookmark"&gt;a short introduction to navigating del.icio.us with user tags&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Having a rich tagspace (also known as a &lt;a title="Folksonomy" href="http://wikipedia.org/wiki/folksonomy" rel="nofollow"&gt;folksonomy&lt;/a&gt;) can make your bookmarks an invaluable resource and research tool.&lt;/p&gt;
&lt;p&gt;To finish up, I have put together &lt;a title="del.icio.us search provider" href="http://www.youtube.com/watch?v=tQ5rOSoVf08" rel="bookmark"&gt;a brief screencast demonstrating how to set up your del.icio.us bookmarks as an IE7 search provider&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=538" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/My+Digital+Life/default.aspx">My Digital Life</category></item><item><title>My Digital Life</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/03/03/my-digital-life.aspx</link><pubDate>Mon, 03 Mar 2008 13:38:06 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:535</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;em&gt;Note that there are some links in this post require Charteris credentials.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Last week I chaired the initiation meeting for the &lt;a title="Core Capability (.NET)" href="https://intranet.charteris.com/MAD/CoreCapability/" rel="nofollow"&gt;Charteris Core Capability&lt;/a&gt; group. I was asked to put together some material on &amp;#39;my digital life&amp;#39; discussing the web applications that I use.&lt;/p&gt;  &lt;p&gt;Taking this on, I have decided to start a series, with a post per application.&lt;/p&gt;  &lt;p&gt;Amongst the applications I will introduce are del.icio.us, LinkedIn, Facebook, and the various Google applications.&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=535" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/My+Digital+Life/default.aspx">My Digital Life</category></item><item><title>ISA Server as Reverse Proxy</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/19/isa-server-as-reverse-proxy.aspx</link><pubDate>Tue, 19 Feb 2008 10:27:12 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:531</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Here was me feeling that I wasn&amp;#39;t learning stuff with a great deal of utility (to me, that is) and along comes a little golden nugget...&lt;/p&gt;  &lt;p&gt;I am familiar with the role of reverse proxies (especially their role in scaling RESTful applications). I have referred to &lt;a title="Squid Web Cache" href="http://en.wikipedia.org/wiki/Squid_cache" rel="nofollow"&gt;Squid&lt;/a&gt; in the past and at my last employer we used &lt;a title="BIG-IP" href="http://www.f5.com/products/big-ip/" rel="nofollow"&gt;BIG-IP&lt;/a&gt; to reverse proxy. What I had not realised was that &lt;a title="Microsoft ISA Server" href="http://www.microsoft.com/isa" rel="nofollow"&gt;ISA Server&lt;/a&gt; can be &lt;a title="Reverse Proxy Configurations for Windows SharePoint Services 2.0 and Internet Security and Acceleration Server" href="http://technet2.microsoft.com/windowsserver/WSS/en/library/3c849566-c7ad-4363-be42-1e51ac45058e1033.mspx?mfr=true" rel="nofollow"&gt;configured as a reverse proxy&lt;/a&gt; too - cool!&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=531" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/REST/default.aspx">REST</category></item><item><title>Roy Fielding on REST</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/19/roy-fielding-on-rest.aspx</link><pubDate>Tue, 19 Feb 2008 10:12:49 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:530</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Over the weekend, I spent 7 hours trawling through the &lt;a title="[rest-discuss] Yahoo! Group" href="http://tech.groups.yahoo.com/group/rest-discuss/" rel="nofollow"&gt;[rest-discuss]&lt;/a&gt; list archive to pull together &amp;#39;&lt;a title="Roy Fielding bookmarks on del.icio.us" href="http://del.icio.us/alan.dean/roy.fielding" rel="bookmark"&gt;the collected utterances of Roy Fielding&lt;/a&gt;&amp;#39; (the originator of the &lt;a title="REST (Representational State Transfer)" href="http://simplewebservices.org/index.php?title=REST" rel="bookmark"&gt;REST architectural style&lt;/a&gt; in his &lt;a title="Representational State Transfer (REST)" href="http://roy.gbiv.com/pubs/dissertation/rest_arch_style.htm" rel="bookmark"&gt;dissertation&lt;/a&gt;). I hope that this may help people to understand REST more thoroughly. I plan to do some community talks on the subject later in the year.&lt;/p&gt;  &lt;p&gt;Coincidentally, this was the same weekend that &lt;a title="Untangled - Roy Fielding" href="http://roy.gbiv.com/untangled/" rel="bookmark"&gt;Roy started a blog&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=530" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/del.icio.us/default.aspx">del.icio.us</category><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/REST/default.aspx">REST</category></item><item><title>The STSADMIN utility</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/18/the-stsadmin-utility.aspx</link><pubDate>Mon, 18 Feb 2008 17:12:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:529</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;A first introduction to the command-line admin tool.&lt;/p&gt;
&lt;p&gt;To get help: &lt;code&gt;STSADMIN ?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Usage pattern: &lt;code&gt;STSADMIN -o {operator name} -p {parameters}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To add a template:&lt;br /&gt;&lt;code&gt;STSADMIN -o addsolution -filename C:\templates\applicationtemplatecore.wsp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note that the &lt;a title="Windows SharePoint Services 3.0 Application Template: Application Template Core" href="http://www.microsoft.com/Downloads/details.aspx?familyid=C1039E13-94DA-4D7D-8CAE-3B96FA5A4045" rel="nofollow"&gt;application template core&lt;/a&gt; must be installed before any other template! (this is not made clear)&lt;/p&gt;
&lt;p&gt;Mike mentioned that the &lt;a title="Windows SharePoint Services 3.0 Application Template: GroupBoard Workspace 2007" href="http://www.microsoft.com/downloads/details.aspx?familyid=4030D847-31BC-43EA-90EC-111B546D5411" rel="nofollow"&gt;Groupboard&lt;/a&gt; template is good.&lt;/p&gt;
&lt;p&gt;To backup at the Web Application level: &lt;code&gt;STSADMIN -o backup&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To restore at the Web Application level: &lt;code&gt;STSADMIN -o restore&lt;/code&gt;&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=529" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Upgrading from WSS 2.0</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/18/upgrading-from-wss-2-0.aspx</link><pubDate>Mon, 18 Feb 2008 16:39:07 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:528</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;More contemporaneous notes from Mike:&lt;/p&gt;  &lt;p&gt;In-Place --&amp;gt; &lt;em&gt;downtime&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Gradual --&amp;gt; &lt;em&gt;disk space&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Database migration --&amp;gt; &lt;em&gt;new hardware&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=528" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>WSS Security Model</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/18/wss-security-model.aspx</link><pubDate>Mon, 18 Feb 2008 16:25:38 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:527</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Mike discussed the following security model for Windows SharePoint Services:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Web Application&lt;/strong&gt; &lt;em&gt;-maps-to-&lt;/em&gt; &lt;strong&gt;IIS Application Pool&lt;/strong&gt;     &lt;br /&gt;|     &lt;br /&gt;&lt;em&gt;-contains-&lt;/em&gt;     &lt;br /&gt;|     &lt;br /&gt;&lt;strong&gt;Site Collections&lt;/strong&gt; (first major security boundary: users, groups, permissions ...)     &lt;br /&gt;|     &lt;br /&gt;&lt;em&gt;-contains-&lt;/em&gt;     &lt;br /&gt;|     &lt;br /&gt;&lt;strong&gt;Sites&lt;/strong&gt; (inherit security settings from collection)&lt;/p&gt;  &lt;p&gt;Here is the whiteboard:&lt;/p&gt;  &lt;p&gt;&lt;a title="WSS Security Model Whiteboard" href="http://www.flickr.com/photos/alan-dean/2273710321/" rel="bookmark"&gt;&lt;img src="http://farm3.static.flickr.com/2051/2273710321_8a33958bef_m.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=527" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>5060A Module 3: Installing Windows SharePoint Services 3.0</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/18/5060a-module-3-installing-windows-sharepoint-services-3-0.aspx</link><pubDate>Mon, 18 Feb 2008 15:53:14 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:526</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Some contemporaneous notes.&lt;/p&gt;  &lt;p&gt;High-level installation activities are:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Binaries&lt;/li&gt;    &lt;li&gt;Products &amp;amp; Technologies&lt;/li&gt;    &lt;li&gt;Initial Services&lt;/li&gt;    &lt;li&gt;Web Applications&lt;/li&gt;    &lt;li&gt;Site Collections&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Things to consider when selecting installation options:&lt;/p&gt;  &lt;p&gt;&amp;quot;Basic Installation&amp;quot; == &amp;quot;everything runs on one machine using Embedded SQL&amp;quot; (yes, that is Embedded not Express)&lt;/p&gt;  &lt;p&gt;&amp;quot;Advanced Installation &amp;#187; Standalone&amp;quot; and &amp;quot;Basic Installation&amp;quot; don&amp;#39;t allow reconfiguration to a distributed architecture at a later date, but are good for test and dev.&lt;/p&gt;  &lt;p&gt;&amp;quot;Advanced Installation &amp;#187; Web Frontend&amp;quot; will usually be your choice. Can install to a single machine and then reconfigure. Can&amp;#39;t use Embedded SQL, but can use Express.&lt;/p&gt;  &lt;p&gt;Here is the whiteboard:&lt;/p&gt;  &lt;p&gt;&lt;a title="Installing Windows SharePoint Services 3.0 Whiteboard" href="http://www.flickr.com/photos/alan-dean/2274681800/" rel="bookmark"&gt;&lt;img src="http://farm3.static.flickr.com/2267/2274681800_4c5af00249_m.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=526" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Mike Brown, Firebrand</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/18/mike-brown-firebrand.aspx</link><pubDate>Mon, 18 Feb 2008 15:33:13 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:525</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Our course trainer is Mike Brown (who unfortunately doesn&amp;#39;t have a blog that I can link to).&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=525" width="1" height="1"&gt;</description></item><item><title>Pile o' Books</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/18/pile-o-books.aspx</link><pubDate>Mon, 18 Feb 2008 15:22:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:524</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;It&amp;#39;s Day 1, so naturally there is a pile of books:&lt;/p&gt;
&lt;p&gt;&lt;a title="SharePoint Course Books" href="http://www.flickr.com/photos/alan-dean/2274677056/" rel="bookmark"&gt;&lt;img style="WIDTH:500px;HEIGHT:375px;" height="375" src="http://farm3.static.flickr.com/2119/2274677056_5168808604.jpg" width="500" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=524" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>SharePoint Training at Firebrand</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/18/sharepoint-training-at-firebrand.aspx</link><pubDate>Mon, 18 Feb 2008 14:31:18 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:523</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I am on a residential course on SharePoint at &lt;a title="Firebrand Training" href="http://www.firebrandtraining.co.uk/" rel="bookmark"&gt;Firebrand Training&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The course comprises &amp;quot;&lt;a title="5060A Implementing Microsoft Windows SharePoint Services 3.0" href="http://www.microsoft.com/learning/syllabi/en-us/5060Afinal.mspx" rel="nofollow"&gt;Implementing Microsoft Windows SharePoint Services 3.0&lt;/a&gt;&amp;quot; and &amp;quot;&lt;a title="5061A Implementing Microsoft Office SharePoint Server 2007" href="http://www.microsoft.com/learning/syllabi/en-us/5061aFinal.mspx" rel="nofollow"&gt;Implementing Microsoft Office SharePoint Server 2007&lt;/a&gt;&amp;quot;.&lt;/p&gt;  &lt;p&gt;&lt;a title="Firebrand Training, Talbot Hall" href="http://www.flickr.com/photos/alan-dean/2273700039/" rel="bookmark"&gt;&lt;img src="http://farm3.static.flickr.com/2219/2273700039_0f6f428beb_m.jpg" alt="" /&gt;&lt;/a&gt;&amp;#160;&lt;a title="View from Talbot Hall" href="http://www.flickr.com/photos/alan-dean/2273312999/" rel="bookmark"&gt;&lt;img src="http://farm3.static.flickr.com/2378/2273312999_b6b672719a_m.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=523" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/aland/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Introduction</title><link>http://blogs.charteris.com/blogs/aland/archive/2008/02/18/introduction.aspx</link><pubDate>Mon, 18 Feb 2008 13:54:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:522</guid><dc:creator>aland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Hello and welcome.&lt;/p&gt;
&lt;p&gt;I am a Senior Technologist here at &lt;a class="" title="Charteris" href="http://www.charteris.com/"&gt;Charteris&lt;/a&gt;. This blog will focus on my activities here. For more information about me and what I do outside of Charteris, you can visit my &lt;a class="" title="homepage" href="http://thoughtpad.net/alan-dean.html"&gt;homepage&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=522" width="1" height="1"&gt;</description></item><item><title>ASP.Net MVC Further Info &amp; Microsoft ASP.Net 3.5 Extensions Preview Download Available</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2008/01/11/asp-net-mvc-further-info-amp-microsoft-asp-net-3-5-extensions-preview-download-available.aspx</link><pubDate>Fri, 11 Jan 2008 09:38:56 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:507</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This is a slightly belated &amp;quot;catch-up&amp;quot; post to update those that haven&amp;#39;t seen it elsewhere, but Scott Guthrie has posted further details (Parts 3 and 4) of&amp;nbsp; the&amp;nbsp;ASP.Net MVC Framework on his blog.&amp;nbsp; &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx"&gt;ASP.Net MVC Part 3 is available here&lt;/a&gt;&amp;nbsp;and &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx"&gt;ASP.Net MVC Part 4 is available here&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;ASP.Net MVC is not a solution for everyone as you lose things like state management and parts of the page lifecycle.&amp;nbsp;It does however offer very targetted functionality for those that have a specific need for Model View Controller based solutions. &lt;/p&gt; &lt;p&gt;The ASP.Net MVC framework is now available for download as part of the new &lt;a href="http://www.asp.net/downloads/3.5-extensions/"&gt;Microsoft ASP.Net 3.5 Extensions Preview&lt;/a&gt;&amp;nbsp;. This is a roll-up release of&amp;nbsp;new functionality to be added to ASP.Net 3.5 and ADO.Net&amp;nbsp; in 2008. It currently includes the following: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;ASP.Net MVC Framework&lt;/li&gt; &lt;li&gt;ASP.Net Dynamic Data&lt;/li&gt; &lt;li&gt;ASP.Net AJAX&lt;/li&gt; &lt;li&gt;ADO.Net Entity Framework&lt;/li&gt; &lt;li&gt;ADO.Net Data Services&lt;/li&gt; &lt;li&gt;Silverlight Controls for ASP.Net&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Some of these elements&amp;nbsp;were previously available via the&amp;nbsp;ASP.Net Futures CTP.&amp;nbsp; This is now superceded by the&amp;nbsp;extensions preview.&lt;/p&gt; &lt;p&gt;You can get the ASP.Net 3.5 Extensions Preview from &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A9C6BC06-B894-4B11-8300-35BD2F8FC908&amp;amp;displaylang=en"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=507" width="1" height="1"&gt;</description></item></channel></rss>