<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>blogbastlers - Taking eCommerce to the next level...</title>
	<atom:link href="http://blogbastlers.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogbastlers.wordpress.com</link>
	<description>Commerce Server 2007, Team Foundation Server, .Net Development and more!</description>
	<lastBuildDate>Wed, 03 Aug 2011 10:22:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blogbastlers.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>blogbastlers - Taking eCommerce to the next level...</title>
		<link>http://blogbastlers.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blogbastlers.wordpress.com/osd.xml" title="blogbastlers - Taking eCommerce to the next level..." />
	<atom:link rel='hub' href='http://blogbastlers.wordpress.com/?pushpress=hub'/>
		<item>
		<title>ServerName in WCF WSDL instead of domain name when hosted in IIS</title>
		<link>http://blogbastlers.wordpress.com/2011/08/03/servername-in-wcf-wsdl-instead-of-domain-name-when-hosted-in-iis/</link>
		<comments>http://blogbastlers.wordpress.com/2011/08/03/servername-in-wcf-wsdl-instead-of-domain-name-when-hosted-in-iis/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 10:14:42 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[IIS WCF]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/?p=116</guid>
		<description><![CDATA[If you have an IIS setup with multiple sites you will have problems with the urls that are used in the wsdl to include additional schemas. By default, the computer name is used for that instead of your specified domain. This makes it hard for your callers to generate a proxy. You can solve this [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=116&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you have an IIS setup with multiple sites you will have problems with the urls that are used in the wsdl to include additional schemas. By default, the computer name is used for that instead of your specified domain.</p>
<p>This makes it hard for your callers to generate a proxy.</p>
<p>You can solve this by the following settings: (add the bold configurations to the web.config)</p>
<p> &lt;system.serviceModel&gt;<br />
  <strong> &lt;serviceHostingEnvironment multipleSiteBindingsEnabled=&#8221;true&#8221; /&gt;</strong><br />
    &#8230;<br />
    &lt;services&gt;<br />
      &lt;service name=&#8221;YourService&#8221;&gt;<br />
        &lt;endpoint address=&#8221;" binding=&#8221;basicHttpBinding&#8221; contract=&#8221;YourContract&#8221;&gt;<br />
       <strong>  &lt;identity&gt;</strong><br />
<strong>            &lt;dns value=<a href="http://www.yourdomain.de">www.yourdomain.de</a> /&gt;</strong><br />
<strong>          &lt;/identity&gt;</strong><br />
        &lt;/endpoint&gt;<br />
      &lt;/service&gt;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=116&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2011/08/03/servername-in-wcf-wsdl-instead-of-domain-name-when-hosted-in-iis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>
	</item>
		<item>
		<title>Commerce Server was unable to access IIS</title>
		<link>http://blogbastlers.wordpress.com/2010/08/06/commerce-server-2009-unpack-site-with-ftp-sites/</link>
		<comments>http://blogbastlers.wordpress.com/2010/08/06/commerce-server-2009-unpack-site-with-ftp-sites/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 15:40:26 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/?p=109</guid>
		<description><![CDATA[The Site Packager seems to have an issue when you IIS 7 oder 7.5 contains an FTP Site. Once the site packager finds that site it will not let you proceed to the next step.  It will tell you &#8220;Commerce Server was unable to access IIS.&#8221; I found that it doesn&#8217;t help to stop the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=109&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The Site Packager seems to have an issue when you IIS 7 oder 7.5 contains an FTP Site. Once the site packager finds that site it will not let you proceed to the next step.  It will tell you &#8220;Commerce Server was unable to access IIS.&#8221;</p>
<p>I found that it doesn&#8217;t help to stop the particular site, but you can easily comment it out in you applicationhost.config file. So you don&#8217;t loose any settings.</p>
<p>HTH,</p>
<p>Ralf</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=109&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2010/08/06/commerce-server-2009-unpack-site-with-ftp-sites/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>
	</item>
		<item>
		<title>ASP.NET Sessions not timing out</title>
		<link>http://blogbastlers.wordpress.com/2010/03/02/asp-net-sessions-not-timing-out/</link>
		<comments>http://blogbastlers.wordpress.com/2010/03/02/asp-net-sessions-not-timing-out/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 21:04:06 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/?p=106</guid>
		<description><![CDATA[For one of our applications we had a very high memory consumption. Digging into the problem, we found out that no ASP.NET sessions are timing out. (You can see this using the ASP.NET 2.0 Perfomance Counters Active Sessions, Sessions Timed Out.) Investigation further the reason turned out to be a setting for the ASP.NET cache [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=106&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For one of our applications we had a very high memory consumption. Digging into the problem, we found out that no ASP.NET sessions are timing out. (You can see this using the ASP.NET 2.0 Perfomance Counters Active Sessions, Sessions Timed Out.)</p>
<p>Investigation further the reason turned out to be a setting for the ASP.NET cache in the web.config.</p>
<p>&lt;caching&gt;<br />
       &lt;cache percentagePhysicalMemoryUsedLimit=&#8221;50&#8243; disableExpiration=&#8221;true&#8221;/&gt;<br />
&lt;/caching&gt;</p>
<p>Reading through the following <a href="http://msdn.microsoft.com/en-us/magazine/cc163730.aspx">link</a> this makes sense. When InProc Session is used the Session data is stored in the Cache.</p>
<p>Maybe this helps you, because I couldn&#8217;t find anything helpful on this.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/106/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=106&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2010/03/02/asp-net-sessions-not-timing-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>
	</item>
		<item>
		<title>Silverlight xap-file is not copied to clientbin folder on Build Server</title>
		<link>http://blogbastlers.wordpress.com/2010/02/22/silverlight-xap-file-to-clientbin-on-build-server/</link>
		<comments>http://blogbastlers.wordpress.com/2010/02/22/silverlight-xap-file-to-clientbin-on-build-server/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 09:59:50 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[.Net Development]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/?p=100</guid>
		<description><![CDATA[The following postbuild event circumvents the problem:
"$(TargetDir)*.xap" "$(SolutionDir)[YourWebsite]\clientbin\" /Y /R
<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=100&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In one of our projects we had the problem that our TFS Build never deployed the latest version of our silverlight application via TFS build.<br />
It is probably because our build server has not all the silverlight related SDKs installed.</p>
<p>We recognized that the contents in one of the MSBuilds subfolders (C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications) was different from the content of the developer machines. A simple xcopy adjustment of this folder did not do the trick. <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>We implemented a temporary solution using the following post-buid event:<br />
&#8220;$(TargetDir)*.xap&#8221; &#8220;$(SolutionDir)[YourWebsite]\clientbin\&#8221; /Y /R</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/100/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=100&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2010/02/22/silverlight-xap-file-to-clientbin-on-build-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>
	</item>
		<item>
		<title>SOA – More flexibility for my business processes and applications?</title>
		<link>http://blogbastlers.wordpress.com/2010/02/17/soa-%e2%80%93-more-flexibility-in-for-my-business-processes-and-applications/</link>
		<comments>http://blogbastlers.wordpress.com/2010/02/17/soa-%e2%80%93-more-flexibility-in-for-my-business-processes-and-applications/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 21:46:48 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[eCommerce]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[System Design]]></category>
		<category><![CDATA[Online Credit Card Authorization]]></category>
		<category><![CDATA[Provider Pattern]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/2010/02/17/soa-%e2%80%93-more-flexibility-in-for-my-business-processes-and-applications/</guid>
		<description><![CDATA[It is a good idea to wrap all calls to external services in a DAL project. This DAL can offer an interface for my application that is more stable than the wsdl of the actual service. The provider pattern is very useful for this kind of wrapper projects.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=84&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:Georgia;font-size:10pt;">In the past years a lot of people told us about service oriented architecture. Loose-coupling, Contract First, Service Versioning, Orchestration, Mapping.<br />
</span></p>
<p><span style="font-family:Georgia;font-size:10pt;">One of the main goals of the SOA is to build IT systems that can be easily adapted to the changing needs of companies. What does it mean? Companies do not act alone in the market. They are connected to various partners, outsource parts of their business processes – or in other words, they consume certain aspects of their work as services from partner companies. Those partner networks are quite dynamic, as partners have to be exchanged from time to time for different reasons.<br />
</span></p>
<p><span style="font-family:Georgia;font-size:10pt;">SOA takes this principle over to the IT. Stand-alone services are defined and can be consumed from different applications and clients. Methods like &#8220;Contract First&#8221; help service providers to create stable interfaces for their services. Service Versioning ensures backward compatibility while the service itself is under ongoing development. The rise of the web service technology delivered a solid technological basis for the implementation of the new services.<br />
</span></p>
<p><span style="font-family:Georgia;font-size:10pt;">We heard a lot about the different approaches for the service implementation. But as long as we are not the service provider, we are more interested in consuming existing services. So which of the described approaches ensures, that I can easily exchange my service providers? How could my service provider do a proper &#8220;Contract First&#8221; design, when the service was created by the service provider alone - without any involvement from me as a potential client?  I think the answer is simple: It is not really possible. The contract will reflect the business processes of the service provider. &#8211; Not necessarily mine (Conway&#8217;s Law ) .<br />
</span></p>
<p>Let&#8217;s take a look at an easy example from my daily work. : <strong>Consuming Online CreditCard Authorization</strong></p>
<p>We are building worldwide eCommerce applications, where we offer online credit card authorization. As we are more a logistics company, we do not offer the authorization service our self, but use payment service providers (PSP) for it. We use RBS World Pay for Europe, Cybersource for North America and Cobre BEM for the Latam region. Although all three companies offer the same service to us, the interfaces are very different. The following things differ:</p>
<ul>
<li>Message Contracts with different field names</li>
<li>HTTP POST vs. HTTP GET vs. SOAP Web Service</li>
<li>Error and Result Codes</li>
<li>Backend Tools</li>
</ul>
<p>When I need to implement an online credit card authorization, I don&#8217;t want to care about the different PSP service contracts I need one solid facade. It means I have to encapsulate the real interfaces to the PSPs.</p>
<p>The following figure illustrates the situation.</p>
<p><a href="http://blogbastlers.files.wordpress.com/2010/02/021710_2145_soamoreflex11.png"><br />
<img src="http://blogbastlers.files.wordpress.com/2010/02/021710_2145_soamoreflex11.png?w=500" alt="" /><br />
</a></p>
<p>The Service DAL is a component inside our application that encapsulates the communication with the different service providers. This DAL is implemented by using the provider pattern, where each provider implements one interface. You probably see the equivalence to the typical SOA figures, where our service DAL would be an integration platform like biztalk. Such integration platform usually forces us a consumer contract (I choose the name by chance.). Interestingly, in our department we seldom applied this idea when we called external services within the application code. – without having a biztalk in place.</p>
<p>The provider pattern however also offers the possibility to consume a service functionality from different external service providers.</p>
<p><a href="http://blogbastlers.files.wordpress.com/2010/02/021710_2145_soamoreflex21.png"><br />
<img src="http://blogbastlers.files.wordpress.com/2010/02/021710_2145_soamoreflex21.png?w=500" alt="" /><br />
</a></p>
<p>The CreditCardProviderManager class implements logic to initialize and select the providers depending on the current scenario. The abstract class CreditCardProvider defines the Consumer Contract, and the different providers implement the mapping to the external services.</p>
<p>I made good experience with that approach of integrating external services into applications, because it forces you to think about a stable contract the fits for your business needs. – Not for the needs of the particular service provider.</p>
<p>To come back to the initial question: Does service orientation give me more flexibility for my business processes and applications? – I think YES, but you should not use the service contract without a proper mapping to a consumer contract.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/84/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=84&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2010/02/17/soa-%e2%80%93-more-flexibility-in-for-my-business-processes-and-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>

		<media:content url="http://blogbastlers.files.wordpress.com/2010/02/021710_2145_soamoreflex11.png" medium="image" />

		<media:content url="http://blogbastlers.files.wordpress.com/2010/02/021710_2145_soamoreflex21.png" medium="image" />
	</item>
		<item>
		<title>Run CS2007 configuration wizard only for selected features</title>
		<link>http://blogbastlers.wordpress.com/2010/01/19/run-cs2007-configuration-wizard-only-for-selected-features/</link>
		<comments>http://blogbastlers.wordpress.com/2010/01/19/run-cs2007-configuration-wizard-only-for-selected-features/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 20:19:09 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[.Net Development]]></category>
		<category><![CDATA[Commerce Server 2007]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/?p=74</guid>
		<description><![CDATA[We recently had to reconfigure some of our commerce server development images. I turned out that some of the images had installation issues with the performance counters &#8211; for other images the Direct Mailer feature could not be reconfigured. As we don&#8217;t really use those features, we just wanted to proceed with the reconfiguration without [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=74&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We recently had to reconfigure some of our commerce server development images. I turned out that some of the images had installation issues with the performance counters &#8211; for other images the Direct Mailer feature could not be reconfigured. As we don&#8217;t really use those features, we just wanted to proceed with the reconfiguration without those features.</p>
<p>Unfortunetally, you can specifiy the features that you want to reconfigure like this:</p>
<p> <strong>csconfig.exe /r</strong> &lt;comma seperated feature_list&gt;</p>
<p>The question is, what is the correct spelling of the single features. We couldn&#8217;t find it in any documentation. Reflector finally revealed, that we have to use the exact same spelling like the feature names in the registry.</p>
<p><img src="http://blogbastlers.files.wordpress.com/2010/01/cs2007regkey.png?w=500" alt="" /></p>
<p><strong>Plain text feature names:</strong></p>
<p>Feature.MS.CS.Admin<br />
Feature.MS.CS.Catalog<br />
Feature.MS.CS.Core<br />
Feature.MS.CS.DWA<br />
Feature.MS.CS.Marketing<br />
Feature.MS.CS.Misc<br />
Feature.MS.CS.Orders<br />
Feature.MS.CS.PCGN<br />
Feature.MS.CS.PerfCounters</p>
<p>In addition to the features that we found in the registry, there are some more features names:</p>
<p>Feature.MS.CS.DirectMailer<br />
Feature.MS.CS.PCW<br />
Feature.MS.CS.CsStaging<br />
Feature.MS.CS.HealthMonitoring</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/74/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=74&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2010/01/19/run-cs2007-configuration-wizard-only-for-selected-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>

		<media:content url="http://blogbastlers.files.wordpress.com/2010/01/cs2007regkey.png" medium="image" />
	</item>
		<item>
		<title>Guter Artikel über Requirements Engineering in agilen Prozessen</title>
		<link>http://blogbastlers.wordpress.com/2009/10/04/guter-artikel-uber-requirements-engineering-in-agilen-prozessen/</link>
		<comments>http://blogbastlers.wordpress.com/2009/10/04/guter-artikel-uber-requirements-engineering-in-agilen-prozessen/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 19:02:21 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[Software Design]]></category>
		<category><![CDATA[System Design]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/?p=67</guid>
		<description><![CDATA[Ein, wie ich finde, ziemlich interessanter Artikel! http://www.heise.de/developer/artikel/Requirements-Engineering-in-Zeiten-der-Agilitaet-804971.html<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=67&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ein, wie ich finde, ziemlich interessanter Artikel!</p>
<p><a href="http://www.heise.de/developer/artikel/Requirements-Engineering-in-Zeiten-der-Agilitaet-804971.html">http://www.heise.de/developer/artikel/Requirements-Engineering-in-Zeiten-der-Agilitaet-804971.html</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/67/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=67&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2009/10/04/guter-artikel-uber-requirements-engineering-in-agilen-prozessen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>
	</item>
		<item>
		<title>Thinking about system development</title>
		<link>http://blogbastlers.wordpress.com/2009/08/17/thinking-system-development/</link>
		<comments>http://blogbastlers.wordpress.com/2009/08/17/thinking-system-development/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 20:44:12 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[System Design]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/?p=53</guid>
		<description><![CDATA[Whenever we create technical systems, software solutions, business processes or whole organization structures, we have to make a lot of decisions. Different constraints are balanced against each other, assumptions are made, models and abstractions for real-world entities are created. Most of you know these situations where you have to choose between several imperfect options during the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=53&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Whenever we create technical systems, software solutions, business processes or whole organization structures, we have to make a lot of decisions. Different constraints are balanced against each other, assumptions are made, models and abstractions for real-world entities are created. Most of you know these situations where you have to choose between several imperfect options during the design phase of a solution. Often, we even have to make decisions under time pressure and with lack of deeper knowledge about the issue. In those cases, it is nice to have at least a set of rules and principles that often lead to a good design and the successful organization of a development.  I know that there is no ultimate guideline, but I like to stick to some principles, which can be used to derive solution strategies. I’d like to use this post to pick out some of those general principles and to explain why I like them.</p>
<p>Let’s start quite general by seeing a system as a set of interacting or interdependent entities, real or abstract, forming an integrated whole. – This can be anything from software, organizations or even whole markets.</p>
<p>Based on that definition, let’s have a look at some laws from different science areas. There is e.g. the law of economizing, that states that individuals tend to economize, maximizing gains for a given cost, and minimizing costs for a given gain. (Optimizing behavior of agents)  Secondly, we have Le Chatelier&#8217;s Principle. Originally from the area of chemistry, it says: “Any change in status quo prompts an opposing reaction in the responding system.”  (Stability of the equilibrium).  Paul A. Samuelson applied those two principles to economics and considers as the underlying mathematical structure of economies.</p>
<p>From the area of physics, we know the<strong> 2<sup>nd</sup> Law of Thermodynamics.</strong> It states that the total entropy of any isolated thermodynamic system tends to increase over time, approaching a maximum value. The biologist Fisher formulated the <strong>theory of natural selection.</strong> It states that the more highly adapted an organism becomes, the less adaptable it is to any new change.</p>
<p>You might be wondering what those laws have to do with technical system design. – They all tell us something about the general ability of a system to handle changes. In my opinion the mayor design goal of each system or solution is to <strong>do more with less, </strong>or in other words to economize.  As long as we want to reach this goal, according to Samuelsons theory  your system is forced to change.</p>
<p>Your system is constantly faced with new feature requests just because of Le Chatelier’s principle.  Jakob Nielson has refined that principle in his <strong>Law of Internet User Experience:</strong> Users spend most of their time on other sites. This means that users prefer your site to work the same way as all the other sites they already know. So your software system tends towards equilibrium with their environment. Unfortunately, changing a system increases its complexity. – The system gets more and more chaotic. A similar process happens in physical systems. Here the measured value is not called complexity but entropy. After we have implemented enough new features, that the initial architecture did not really foresee, we have increased the complexity of the system significantly. – The system was adapted the very special demands, future changes get harder or even not feasible. At this point, the market selects which of the competing systems survive.</p>
<p>I hope, you excuse this brief excursion to those very general laws. What I wanted to show, is that the context and the forces, we are facing in software system design are not unique to this area. Parallels exist to other research fields and there might be potential to leverage existing patterns and strategies from them.</p>
<p>Coming back to software development, 1997 Lehmann published the following laws of software evolution, which more or less refine the above general laws. (Lehmann, 1997)</p>
<p><strong>Continuing Change</strong> &#8211; A system must be continually adapted else they become progressively less satisfactory in use. So without changes a system looses its primary function helping people.</p>
<p><strong>Continuing Growth</strong> &#8211; The functional capability of systems must be continually increased to maintain user satisfaction over the system lifetime.</p>
<p><strong>Increasing Complexity</strong> &#8211; As a system is evolved its complexity increases unless work is done to maintain or reduce it.</p>
<p><strong>Declining Maintainability &#8211; </strong>The maintainability of a system is inversely proportional to the complexity of its individual pieces.<strong> (Kanat-Alexander, 2008)</strong></p>
<p><strong>Declining Quality</strong> &#8211; Unless rigorously adapted to take into account for changes in the operational environment, the quality of a system will appear to be declining.</p>
<p>Considering those laws, we see again that changes cause a lot of bad things to our system, but changes are inevitable. That’s why, my second design goal is to <strong>maximize the ability to change</strong>.</p>
<h3 style="text-align:left;">Goals defined – How to reach them?</h3>
<p>Hmm… not very easy to answer. From my experience, the solutions have to least ability to change, if the requirements were misunderstood or incomplete, and therefore lead to an inappropriate model. Nevertheless, I’d like to push this scenario away, because talking about requirements engineering and project management would be far beyond the scope of this post. So assuming, we understood what we have to build, let’s take a look at the following well known principles, which I think help us to maximize the ability to change.</p>
<p><strong>Ockham&#8217;s razor – Don’t assume</strong></p>
<p>The principle states that the explanation of any phenomenon should make as few assumptions as possible, eliminating those that make no difference in the observable predictions of the explanatory hypothesis or theory. In software projects, there is always a gap between real world processes and the models that developers create to map real world things to program code.  Assumptions usually simplify the model, but they are often subject to change.</p>
<p><strong>Divide and Conquer</strong></p>
<p>When a problem seems to be too complex to solve directly, break it down to smaller sub-problems and try to solve them. Especially in big projects, the divide and conquer principle is important for creating a platform, that makes it easy to for different team members to contribute solutions for smaller sub-problems. So, Divide and Conquer is about organization not about coding itself. It can be used for structuring processes in companies as well as structuring software.</p>
<p>Sometimes it is not very easy to define the single modules that form the solution for the bigger problem. A lot of strategies exist for that, which more or less can be summarized as separation of concerns. It says: Create your modules in a way that the functionality does not overlap between the modules. Maximize the dependencies between elements within a module (cohesion). Minimize the dependencies between elements of different modules (coupling).</p>
<p><strong>YAGNI – You ain’t gonna need it</strong></p>
<p>Never implement something because you might need it in the future. It often just complicates the current implementation and increases the efforts. – In other words “Simple is Sexy”.</p>
<p><strong>Pareto Principle  &#8211; 80/20 principle</strong></p>
<p>Sometimes, you create a nice and simple model which covers all of your requirements, and then suddenly you get a new requirement on your plate which complicates everything. – I just had a call for one of our projects, where we have exactly that case. <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  &#8211;  if you them implement that change, it can complicate all future changes for the whole application, and is therefore not a good idea. &#8211; You just have to find a way to tell it to your customer. <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Incremental Development: Code, Release, improve, repeat.</strong></p>
<p>An incremental development can help you to convince you customer to postpone a requirement to the next iteration, when it is in contrast to the 80/20 principle. It also helps to constantly improve and develop the system over a long time, and enables you to respect the YAGNI principle for each iteration.</p>
<p><strong>Last Responsible moment</strong></p>
<p>Wait to really implement requirements until you really can’t wait any longer to do it. This reduces the number of changes that you have to do. Nevertheless, constantly gather information on the topic.</p>
<p>There are a lot more laws and basic principles available in specialists publications, but I just wanted to pick out those, that I find most important. I wonder how you see those things.</p>
<p>Take care!</p>
<p>Ralf</p>
<h3>Biblography</h3>
<p><strong>deVilla, Joey. 2007.</strong> <em>Laws of Software Development. </em>[Online] 07 18, 2007. [Cited: 01 30, 2009.] <a href="http://www.globalnerdy.com/2007/07/18/laws-of-software-development/">http://www.globalnerdy.com/2007/07/18/laws-of-software-development/</a> </p>
<p><strong>Haack, Phil. 2007.</strong> <em>19 Eponymous Laws Of Software Development. </em>[Online] 07 17, 2007. [Cited: 01 31, 2009.] <a href="http://haacked.com/archive/2007/07/17/the-eponymous-laws-of-software-development.aspx">http://haacked.com/archive/2007/07/17/the-eponymous-laws-of-software-development.aspx</a> </p>
<p><strong>Kanat-Alexander, Max. 2008.</strong> <em>Code Simplicity. </em>[Online] 12 12, 2008. [Cited: 01 12, 2009.] <a href="http://www.codesimplicity.com/">http://www.codesimplicity.com/</a></p>
<p><strong>Lehmann, M.M. 1997.</strong> <em>Metrics and Laws of Software Evolution &#8211; The Nineties View. </em>[Paper] Warsaw : Institute of Informatics, Warsaw University, 1997.</p>
<p><strong>Unknown. 2009.</strong> Wikipedia &#8211; System. <em>Wikipedia &#8211; System. </em>[Online] 01 31, 2009. [Cited: 01 31, 2009.] <a href="http://en.wikipedia.org/wiki/System">http://en.wikipedia.org/wiki/System</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=53&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2009/08/17/thinking-system-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>
	</item>
		<item>
		<title>A/B Deployment of Commerce Server 2007 Product Catalog Database</title>
		<link>http://blogbastlers.wordpress.com/2009/01/17/ab-deployment-of-commerce-server-2007-product-catalog-database/</link>
		<comments>http://blogbastlers.wordpress.com/2009/01/17/ab-deployment-of-commerce-server-2007-product-catalog-database/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 21:43:27 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[.Net Development]]></category>
		<category><![CDATA[Commerce Server 2007]]></category>
		<category><![CDATA[eCommerce]]></category>
		<category><![CDATA[Deployment]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/?p=39</guid>
		<description><![CDATA[Recently, we were asked how we can reduce shop downtimes  during bigger catalog changes. We have a load-balanced setup consisting of two web servers. Those web servers both host our Commerce Site which share the commerce server databases. So we can easily deploy a new version of the site code without a downtime. Unfortunately, this is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=39&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, we were asked how we can reduce shop downtimes  during bigger catalog changes. We have a load-balanced setup consisting of two web servers. Those web servers both host our Commerce Site which share the commerce server databases. So we can easily deploy a new version of the site code without a downtime. Unfortunately, this is not possible when we have to do changes to the product catalog database, which happens quite often. &#8211; Why?  &#8211; Because changes to the database will already affect to node on which we are not deploying yet.</p>
<p>You have to options to come around this issue. First, you can setup two Commerce Sites in Commerce Server for one shop. Then you can switch between those two sites via web.config. Second, you can modify the database connection string of the catalog context pragmatically.</p>
<p>Here is a possible implementation for the second option:</p>
<p>Add a HttpModule to you site and add to following code to the OnBeginRequest Event.</p>
<p> </p>
<pre class="brush: csharp;">
 private void OnBeginRequest(object sender, EventArgs e)
 {
            if (!(bool)HttpContext.Current.Application[&quot;CatalogConnectionChanged&quot;])
            {
                if (CommerceContext.Current != null)
                {
                        if (CommerceContext.Current.Resources[&quot;Product Catalog&quot;][&quot;connstr_db_Catalog&quot;].ToString() != YourProductCatalogConnectionString)
                        {
                            CommerceContext.Current.CatalogSystem = Microsoft.CommerceServer.Catalog.CatalogContext.CreateFromConnectionString(
                                YourProductCatalogConnectionString,
                                new Microsoft.CommerceServer.Runtime.Diagnostics.ConsoleDebugContext(Microsoft.CommerceServer.Runtime.Diagnostics.DebugMode.Debug));
                          }
                        else
                            log.Info(&quot;The connectionString defined in Commerce Server Manager is equal to that one defined in web.config. Going on without changing the connectionString.&quot;);
                            HttpContext.Current.Application[&quot;CatalogConnectionChanged&quot;] = true;
                }
 }
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=39&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2009/01/17/ab-deployment-of-commerce-server-2007-product-catalog-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>
	</item>
		<item>
		<title>Introduction to dealing with ASP.NET perfomance issues</title>
		<link>http://blogbastlers.wordpress.com/2008/12/14/introduction-to-dealing-with-aspnet-perfomance-issues/</link>
		<comments>http://blogbastlers.wordpress.com/2008/12/14/introduction-to-dealing-with-aspnet-perfomance-issues/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 21:10:34 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[.Net Development]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[ISAPI Rewrite Rules]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blogbastlers.wordpress.com/?p=18</guid>
		<description><![CDATA[During our last project, we had big problems with the performance of our website on both the integration and to production systems. The website was rather slow and consumed a lot of memory. So we digged into this to find out what’s happening. As a result, this post gives an introduction to dealing with performance and memory issues, and it provides links to sites with further information.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=18&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-indent:-17.85pt;margin:6pt 0 12pt 17.85pt;"><span style="color:#365f91;"><span lang="EN-US"><span style="font-size:large;font-family:Arial;">1 Introduction</span></span></span></p>
<div style="border-right:medium none;border-top:medium none;border-left:medium none;padding:0 0 4pt;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">During our last project, we had big problems with the performance of our website on both the integration and to production systems. The website was rather slow and consumed a lot of memory. So we digged into this to find out what’s happening. As a result, this post gives an introduction to dealing with performance and memory issues, and it provides links to sites with further information.</span></span></span></div>
<div style="border-right:medium none;border-top:medium none;border-left:medium none;padding:0 0 4pt;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Performance issues can be classified like this. Hereby, the magnitude of the problem increases from one to three.</span></span></span></div>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span lang="EN-US"><span><span style="font-size:x-small;font-family:Lucida Sans Unicode;">1.</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Slow performance – application not responsive</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span lang="EN-US"><span><span style="font-size:x-small;font-family:Lucida Sans Unicode;">2.</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Hangs</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span lang="EN-US"><span><span style="font-size:x-small;font-family:Lucida Sans Unicode;">3.</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Crashes</span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">We can find ourselves in two basic situations when experiencing slow performance or hangs </span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span style="font-size:x-small;"><span lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Low CPU </span></span><span style="font-family:Wingdings;" lang="EN-US"><span>à</span></span><span lang="EN-US"><span style="font-family:Lucida Sans Unicode;">waiting for external resources and or locks</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span style="font-size:x-small;"><span lang="EN-US"><span style="font-family:Lucida Sans Unicode;">High CPU </span></span><span style="font-family:Wingdings;" lang="EN-US"><span>à</span></span><span lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Busy Server, Infinite Loops, long time in GC</span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"> </p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">A Crash is recycling of the applications app domain. A app domain recycle is a normal process of IIS and ASP.NET which usually happens in the following situations (amongst others):<span> </span></span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">IIS recycles app pools by default after a period of time</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">When changes to web.config or directory names are made.</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">When the number of compilations (ASPX, ASCX, or ASAX) exeeds the configured number</span></span></span></p>
<p class="MsoListParagraph" style="margin:4pt 0 4pt 36pt;"> </p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Beside those regular recycling processes, the app domain can be recycled unwanted e.g. by the follwing things: </span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">StackOverflow Exception</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">OutOfMemory Exception</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Fatal Excecution Engine Exception (Assert in CLR)</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 72pt;"><span style="font-family:&quot;" lang="EN-US"><span><span style="font-size:x-small;">o</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Managed Heap Corruption e.g.</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">When unhandled Exceptions in non-request threads, COM-Component Calls, Destructors /Finalizers</span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">A StackOverflow exception is generally caused by bad recursions. It is quite hard to write non-recursive code that causes the stack to overflow. The reason for an OutOfMemory exception is not so obvious. It can be caused by insufficient memory, or by memory fragmentation. Regardless of the real cause of the OutOfMemory exception, the occurrence of this exception means that your worker process is unstable, and it should not continue it’s work.</span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;font-family:Lucida Sans Unicode;">To dive deeper into understanding memory issues, here is a little recap of the .NET memory organisation. There a two memory areas. The stack and the heap. The stack is the place where .NET stores value types (char, int, long, byte, enum) and structures</span></span><span style="font-size:9.5pt;line-height:120%;font-family:&quot;" lang="EN-US">.</span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;"> It is organized via Last In &#8211; First Out principle (LIFO), and it uses scoping to identify blocks of local variables. So the stack is self-cleaning and doesn’t use garbage collection. </span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">The heap on the other hand is the place where reference types are stored. For example strings as a very simple object, where each char takes up to 2 bytes on the heap. The pointers – or in .NET terms references – to the objects on the heap are stored on the stack as they are simple types. (They only contain the memory address.) Every object on heap is immutable according to memory allocation.<span> </span>This is also the reason for using StringBuilder for string manipulation, rather then concatenating strings with +=. Every concatenation creates a new object on the heap. The heap has an extra area for objects that are bigger than 85000 bytes. It is called the large object heap (LOH). </span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">The heap is frequently cleaned and compressed by the .NET garbage collector (GC). It takes care about freeing heap memory that an application has allocated, but no longer uses it. The clean-up takes place by categorizing objects into three generation Gen 0, Gen 1 and Gen 2. At the beginning every object is in generation Gen 0. With every GC run that an object survives, it moves to the next generation but at max. to Gen 2. So the generation of an object tells us something about it’s lifetime. GC runs are are increasingly resource critical from 0 to 2, because a run on e.g. Gen 1 also includes all objects on Gen 0. GC runs for Gen 2 are runs on the complete .NET heap, and they even suspend all other threads in the worker process and therefore slow down the application. </span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;font-family:Lucida Sans Unicode;">The compression step of GC is not applied to the LOH, because it would take too much CPU. So the LOH gets fragmented over time.<span> </span>When you consider that the .NET runtime allocates space on the heap in chunks of several mega bytes, you can surely image that you can get an OutOfMemory Exception alltough there is still enough memory left. – Just because there is no big enough </span></span><a href="http://dict.tu-chemnitz.de/english-german/contiguous.html"><span style="color:windowtext;text-decoration:none;" lang="EN-US"><span style="font-size:x-small;font-family:Lucida Sans Unicode;">contiguous</span></span></a><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;"> block.</span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"> </p>
<p class="MsoNormal" style="margin:4pt 0;"><span style="color:#365f91;"><span lang="EN-US"><span><span style="font-size:large;font-family:Arial;">2</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:large;font-family:Arial;">Meassuring Performance and Memory</span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Having in mind those basic facts about the .NET memory organization, lets take a look at available performance counters that help us in finding out what goes on on the server. The following table provides a list of the most important counters and their significance.</span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">To get a picture about the performance of you application, you need to be able to set the application under load,<span> </span>and you have to monitor to following criteria. </span></span></span></p>
<ul type="disc">
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Throughput</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes the number of requests executed per second and throughput related bottlenecks, such as the number of requests waiting to be executed and the number of requests being rejected. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Cost of throughput</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes the cost of processor, memory, disk I/O, and network utilization. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Queues</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes the queue levels for the worker process and for each virtual directory hosting a .NET Web application. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Response time and latency</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. The response time is measured at the client as the amount of time between the initial request and the response to the client (first byte or last byte). Latency generally includes server execution time and the time taken for the request and response to be sent across the network. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Cache utilization</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes the ratio of cache hits to cache misses. It needs to be seen in larger context because the virtual memory utilization may affect the cache performance. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Errors and exceptions</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes numbers of errors and exceptions generated. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Sessions</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. You need to be able to determine the optimum value for session timeout and the cost of storing session data locally versus remotely. You also need to determine the session size for a single user. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Loading</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes the number of assemblies and application domains loaded, and the amount of committed virtual memory consumed by the application. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">View state size</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes the amount of view state per page. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Page size</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes the size of individual pages. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Page cost</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes the processing effort required to serve pages. </span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Worker process restarts</span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">. This includes the number of times the ASP.NET worker process recycles. </span></li>
</ul>
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">For monitoring those criteria, you can use performance counters on the server.</span></span></span></p>
<p class="MsoNormal" style="margin:4pt 0;">
<p class="MsoNormal" style="margin:4pt 0;"><span style="color:#4f81bd;"><span style="line-height:120%;" lang="EN-US"><span><em><span style="font-size:small;font-family:Arial;">2.1</span></em><span style="font:7pt &quot;"> </span></span></span><span style="line-height:120%;" lang="EN-US"><em><span style="font-size:small;"><span style="font-family:Arial;">Interessting Performance Counters</span></span></em></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Performance counters are a good way to estimate your current implementation. Often, it is not easy to judge the impact of a code change just from browsing the pages. You should set up some of the following performance counter to get hard numbers.</span></span></span></p>
<table class="MsoTableMediumShading1Accent1" style="border-collapse:collapse;text-align:left;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="background:#4f81bd 0 0;width:115.45pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><strong><span style="color:white;" lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Counter Name</span></span></span></strong></p>
</td>
<td style="background:#4f81bd 0 0;width:208.95pt;border:#c0c0c0;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><strong><span style="color:white;" lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Description</span></span></span></strong></p>
</td>
<td style="background:#4f81bd 0 0;width:177.2pt;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><strong><span style="color:white;" lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Significance/Treshold</span></span></span></strong></p>
</td>
</tr>
<tr>
<td style="background:#d3dfee 0 0;width:115.45pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">Process\Private Bytes</span><strong></strong></p>
</td>
<td style="background:#d3dfee 0 0;width:208.95pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">This counter indicates the current number of bytes allocated to this process that cannot be shared with other processes.</span></p>
</td>
<td style="background:#d3dfee 0 0;width:177.2pt;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">Depends on your application and on settings in the Machine config.</span></p>
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">ASP.NET default is min(60 percent available physical RAM, 800 MB)</span></p>
</td>
</tr>
<tr>
<td style="width:115.45pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">.NET CLR Memory\# Gen X Collections</span><strong></strong></p>
</td>
<td style="width:208.95pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">This counter indicates the number of times the generation X objects are garbage-collected from the start of the application. (X ={0,1,2}) </span></p>
</td>
<td style="width:177.2pt;background-color:transparent;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">X : X+1 = 10 : 1</span></p>
</td>
</tr>
<tr>
<td style="background:#d3dfee 0 0;width:115.45pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><strong><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">.</span></strong><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">NET CLR Memory\% Time in GC</span><strong></strong></p>
</td>
<td style="background:#d3dfee 0 0;width:208.95pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">the percentage of elapsed time spent performing a garbage collection since the last garbage collection cycle.</span></p>
</td>
<td style="background:#d3dfee 0 0;width:177.2pt;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">Should average about 5 percent for most applications when the CPU is 70 percent busy, with occasional peaks</span></p>
</td>
</tr>
<tr>
<td style="width:115.45pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><strong><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">.</span></strong><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">NET CLR Memory\# Bytes in all Heaps</span><strong></strong></p>
</td>
<td style="width:208.95pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">Sum of Gen 0 Heap Size, Gen 1 Heap Size, Gen 2 Heap Size and Large Object Heap Size. Is always smaller then Process\Private Bytes</span></p>
</td>
<td style="width:177.2pt;background-color:transparent;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Server-Dependant. Should reach a max value after time.</span></span></span></p>
</td>
</tr>
<tr>
<td style="background:#d3dfee 0 0;width:115.45pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">.NET CLR Memory\Large Object Heap Size</span><strong></strong></p>
</td>
<td style="background:#d3dfee 0 0;width:208.95pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">Place for objects that are &gt; 85 Kb. LO-Heap can’t be compacted after GC. So it gets fragmented.</span></p>
</td>
<td style="background:#d3dfee 0 0;width:177.2pt;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"> </p>
</td>
</tr>
<tr>
<td style="width:115.45pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">ASP.NET\Requests Rejected</span></p>
</td>
<td style="width:208.95pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">The total number of requests not executed because of insufficient server resources to process them. This counter represents the number of requests that return a 503 HTTP status code, indicating that the server is too busy.</span></p>
</td>
<td style="width:177.2pt;background-color:transparent;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"> </p>
</td>
</tr>
<tr>
<td style="background:#d3dfee 0 0;width:115.45pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">ASP.NET\Requests WaitTime</span></p>
</td>
<td style="background:#d3dfee 0 0;width:208.95pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">The number of milliseconds that the most recent request waited in the queue for processing.</span></p>
</td>
<td style="background:#d3dfee 0 0;width:177.2pt;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"> </p>
</td>
</tr>
<tr>
<td style="width:115.45pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">WebService\ISAPI Extension Requests/Sec</span></p>
</td>
<td style="width:208.95pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8.5pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">The rates at which the server is processing ISAPI application requests. If this value decreases due to increasing load, you might need to redesign the application.</span></p>
</td>
<td style="width:177.2pt;background-color:transparent;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"> </p>
</td>
</tr>
<tr>
<td style="background:#d3dfee 0 0;width:115.45pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">ASP.NET\Requests Queued</span></p>
</td>
<td style="background:#d3dfee 0 0;width:208.95pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">The number of requests waiting for service from the queue. When this number starts to increment linearly with increased client load, the Web server computer has reached the limit of concurrent requests that it can process. The default maximum for this counter is 5,000. You can change this setting in the Machine.config file.</span></p>
</td>
<td style="background:#d3dfee 0 0;width:177.2pt;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"> </p>
</td>
</tr>
<tr>
<td style="width:115.45pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">ASP.NET\Requests in Application Queue</span></p>
</td>
<td style="width:208.95pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">The number of requests in the application request queue.</span></p>
</td>
<td style="width:177.2pt;background-color:transparent;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;font-family:Lucida Sans Unicode;">Configured in appRequestQueueLimit.</span></span><strong><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US"> </span></strong></p>
</td>
</tr>
<tr>
<td style="background:#d3dfee 0 0;width:115.45pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">ASP.NET\Applications\ Requests Executing</span></p>
</td>
<td style="background:#d3dfee 0 0;width:208.95pt;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">This counter is incremented when the <strong>HttpRuntime</strong> begins to process the request and is decremented after the <strong>HttpRuntime</strong> finishes the request.</span></p>
</td>
<td style="background:#d3dfee 0 0;width:177.2pt;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"> </p>
</td>
</tr>
<tr>
<td style="width:115.45pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="154" valign="top">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;" align="left"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">ASP.NET\Worker Process Restart</span></p>
</td>
<td style="width:208.95pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 5.4pt;" width="279" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;" lang="EN-US">The number of aspnet_wp process restarts.</span></p>
</td>
<td style="width:177.2pt;background-color:transparent;border:#c0c0c0;padding:0 5.4pt;" width="236" valign="top">
<p class="MsoNormal" style="margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">1</span></span></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoCaption" style="text-align:left;margin:0 0 4pt;"><span style="font-size:x-small;"><span style="color:#7f7f7f;"><span style="font-family:Lucida Sans Unicode;"><em><span lang="EN-US">Table </span><span lang="EN-US">1</span><span lang="EN-US">ASP.NET and IIS 6.0 Performance Counters</span></em></span></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span style="font-size:8pt;color:black;line-height:120%;font-family:&quot;"><span style="font-size:x-small;color:#7f7f7f;font-family:Lucida Sans Unicode;"><em></em></span></span></p>
<p class="MsoCaption" style="text-align:left;margin:0 0 4pt;"><span style="font-size:x-small;"><span style="color:#7f7f7f;"><span style="font-family:Lucida Sans Unicode;"><em></em></span></span></span></p>
<div class="mceTemp mceIEcenter" style="text-align:left;">
<dl class="wp-caption aligncenter">
<dt class="wp-caption-dt"><img class="size-full wp-image-19" title="aspnet_counter" src="http://blogbastlers.files.wordpress.com/2008/12/aspnet_counter.png?w=500&#038;h=266" alt="ASP.NET Performance Counter (Figure from Microsoft)" width="500" height="266" /></dt>
<dd class="wp-caption-dd">ASP.NET Performance Counter (Figure from Microsoft)</dd>
</dl>
</div>
<p class="MsoCaption" style="text-align:left;margin:0 0 4pt;">
<p class="MsoCaption" style="text-align:left;margin:0 0 4pt;"><span style="font-size:x-small;"><span style="color:#7f7f7f;"><span style="font-family:Lucida Sans Unicode;"><em></em></span></span></span><span style="color:#4f81bd;"><span lang="EN-US"><span><em><span style="font-size:small;font-family:Arial;">2.2</span></em><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><em><span style="font-size:small;font-family:Arial;">Improving application performance</span></em></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Now that we know how to judge the performance of our application with performance counters, we should investigate the real issue. Herefore, you can use automatic tools, memory dump analysis or just a simple code review. </span></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span style="color:#4f81bd;"><span lang="EN-US"><span><em><span style="font-size:x-small;font-family:Arial;">2.2.1</span></em><span style="font:7pt &quot;"> <em><span style="font-size:x-small;font-family:Arial;">By </span></em></span></span></span><span lang="EN-US"><span style="font-size:x-small;font-family:Arial;"><em>Code Review</em></span></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">A code review is probably the most effective way to identify performance issues. Beside some commonly known issues, that are listed here, also logical mistakes can be found that way.</span></span></span></p>
<ul style="margin-top:0;text-align:left;" type="disc">
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Use Output buffering where possible</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Use StringBuilder for string concatenation</span></li>
<li class="MsoNormal"><span style="font-size:8pt;color:black;line-height:140%;font-family:&quot;" lang="EN-US">Don’t use <strong>.ToLower()</strong> for case-insensitive string comparison. Using String.Compare (string strA, string strB, bool ignoreCase); avoids temp memory allocations</span></li>
<li class="MsoNormal"><span style="font-size:8pt;color:black;line-height:140%;font-family:&quot;" lang="EN-US">Don’t use exception handling to control the flow of your normal application logic</span></li>
<li class="MsoNormal"><span style="font-size:8pt;color:black;line-height:140%;font-family:&quot;" lang="EN-US">Don’t use a <strong>try-catch</strong> block inside a performance critical loop</span></li>
<li class="MsoNormal"><span style="font-size:8pt;color:black;line-height:140%;font-family:&quot;" lang="EN-US">Use strongly typed collections over generics (Hashtable, Dictionary, Arraylist) for storing simple types. This avoids <strong>unnecessary boxing</strong>.</span></li>
<li class="MsoNormal"><span style="font-size:8pt;color:black;line-height:140%;font-family:&quot;" lang="EN-US">Initialize collections to an approximate final size</span></li>
<li class="MsoNormal"><span style="font-size:8pt;color:black;line-height:140%;font-family:&quot;" lang="EN-US">Prefer <strong><span style="font-family:&quot;">StringDictionary</span></strong> instead of <strong><span style="font-family:&quot;">Hashtable</span></strong> for storing strings</span></li>
<li class="MsoNormal"><span style="font-size:8pt;color:black;line-height:140%;font-family:&quot;" lang="EN-US">Call Dispose on IDisposable objects in finally blocks to free ressources</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Avoid calling <strong>Page.DataBind</strong> and bind each control individually to optimize your data binding. Calling <strong>Page.DataBind</strong> recursively calls <strong>DataBind</strong> on each control on the page. </span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Use <strong>Repeater Control</strong> rather than  <strong>DataList</strong>, <strong>DataGrid</strong> and <strong>DataView</strong> controls. It has a smaller HTML output</span></li>
<li class="MsoNormal"><strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">DataBinder.Eval </span></strong><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">uses reflection, which affects performance. In most cases <strong><span style="font-family:&quot;">DataBinder.Eval </span></strong>is called many times from within a page, so implementing alternative methods provides a good opportunity to improve performance.</span><span style="font-size:8pt;line-height:140%;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;"> </span></span><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US"><br />
eg: Bad &lt;%# DataBinder.Eval(Container.DataItem,&#8221;field1&#8243;) %&gt;<br />
Good<span> </span>&lt;%# (string)DataBinder.Eval(Container.DataItem,&#8221;field1&#8243;) %&gt;</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Mind DataSet Serialization: Avoid multiple versions of the data. Only return relevant data in the <strong><span style="font-family:&quot;">DataSet</span></strong> and call <strong><span style="font-family:&quot;">AcceptChanges</span></strong> before serializing a <strong><span style="font-family:&quot;">DataSet</span></strong>.</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">If you need to search a <strong><span style="font-family:&quot;">DataSet</span></strong> using a primary key, create the primary key on the <strong><span style="font-family:&quot;">DataTable</span></strong>. This creates an index that the <strong><span style="font-family:&quot;">Rows.Find</span></strong> method can use to quickly find the required records. </span><span style="font-size:8pt;line-height:140%;font-family:&quot;">Avoid using <strong><span style="font-family:&quot;">DataTable.Select</span></strong>, which does not use indices</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Do not call <strong>GC.Collect()</strong> yourself.</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">If your code uses <strong>recursion</strong>, consider using a loop instead. A loop is preferable in some scenarios because each recursive call builds a new stack frame for the call. This results in consumption of memory, which can be expensive depending upon the number of recursions.</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Avoid foreach loops when performance is critical. Using <strong><span style="font-family:&quot;">foreach</span></strong> can result in extra overhead because of the way enumeration is implemented in .NET Framework collections.</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Do not use exceptions as a tool to exit one or more loops.</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Use <strong>Output Caching</strong> of pages or user controls whenever possible</span></li>
<li class="MsoNormal"><span style="font-size:8pt;line-height:140%;font-family:&quot;" lang="EN-US">Disable <strong>SessionState </strong>and<strong> Viewstate</strong> for pages that don’t need it. If a page only needs to read from session, consider using &lt;%@ Page EnableSessionState=&#8221;ReadOnly&#8221; . . .%&gt;</span></li>
</ul>
<p class="MsoNormal" style="vertical-align:top;line-height:140%;text-align:left;margin:0 0 6.8pt;"><span style="font-size:8pt;color:black;line-height:140%;font-family:&quot;" lang="EN-US">A more complete checklist as well as a lot of other interesting information about .NET code performance can be found at <span>(J.D. Meier, 2007)</span></span></p>
<p class="MsoNormal" style="vertical-align:top;line-height:140%;text-align:left;margin:0 0 6.8pt;"><span style="color:#4f81bd;"><span lang="EN-US"><span><em><span style="font-size:small;font-family:Arial;"><span lang="EN-US"><span><span style="font-size:x-small;">2.2.2</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;">With Tools</span></span></span></em></span></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Sometimes resolving the issue just a code review is not possible. In our case, we could identify some issues in our code, but the biggest issue was found at another place. It turned out to be a memory leak in the used ISAPI Rewrite engine. So how do you find such issues?</span></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Here is a list of tools which can help you with analysing performance issues of web applications.</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;text-align:left;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Debug Diagnostic Tool (DebugDiag)</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;text-align:left;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Debugging Tools for Windows (X-copy deployment possible!!)</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;text-align:left;margin:4pt 0 4pt 72pt;"><span style="font-family:&quot;" lang="EN-US"><span><span style="font-size:x-small;">o</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">WinDbg (a Microsoft debugger)</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;text-align:left;margin:4pt 0 4pt 72pt;"><span style="font-family:&quot;" lang="EN-US"><span><span style="font-size:x-small;">o</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">ADPlus (Recording of Memory Dumps)</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;text-align:left;margin:4pt 0 4pt 72pt;"><span style="font-family:&quot;" lang="EN-US"><span><span style="font-size:x-small;">o</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">TinyGet (Command Line Load Tester)</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;text-align:left;margin:4pt 0 4pt 72pt;"><span style="font-family:&quot;" lang="EN-US"><span><span style="font-size:x-small;">o</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Son-Of-Strike (SOS.dll) (.net extension for native debugger windbg)</span></span></span></p>
<p class="MsoListParagraph" style="text-indent:-18pt;text-align:left;margin:4pt 0 4pt 36pt;"><span style="font-family:Symbol;" lang="EN-US"><span><span style="font-size:x-small;">·</span><span style="font:7pt &quot;"> </span></span></span><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">SysInternals Process Explorer / Task Manager</span></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Debug Diag is probably the easiest tool, to record and analyse performance dumps. We could eventually find our problem with DebugDiag on integration. The program has to be installed, what might not be an easy process on a production landscape. But for those cases, we can use the Debugging Tools for Windows, which can be just copied to the server.</span></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"><span lang="EN-US"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;">Here is a list of important commands for doing the analysis with the debugging tools for windows.</span></span></span></p>
<table class="MsoTableMediumShading1Accent1" style="border-collapse:collapse;text-align:left;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="background:#4f81bd 0 0;width:119.8pt;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="160" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:4pt 0;"><span style="font-size:8pt;color:white;"><span style="font-family:Lucida Sans Unicode;">Program</span></span></p>
</td>
<td style="background:#4f81bd 0 0;width:162.05pt;border:#c0c0c0;padding:0 2.85pt;" width="216" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:4pt 0;"><span style="font-size:8pt;color:white;"><span style="font-family:Lucida Sans Unicode;">Commands</span></span></p>
</td>
<td style="background:#4f81bd 0 0;width:7cm;border:#c0c0c0;padding:0 2.85pt;" width="265" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:4pt 0;"><span style="font-size:8pt;color:white;"><span style="font-family:Lucida Sans Unicode;">Description</span></span></p>
</td>
</tr>
<tr>
<td style="background:#d3dfee 0 0;width:119.8pt;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="160" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Command Line<strong></strong></span></span></p>
</td>
<td style="background:#d3dfee 0 0;width:162.05pt;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="216" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">adplus -hang -p [PID] –quiet</span></span></p>
</td>
<td style="background:#d3dfee 0 0;width:7cm;border:#c0c0c0;padding:0 2.85pt;" width="265" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Starts recording a memory dump. Tracking all current activity. Not only hangs are recorded</span></span></p>
</td>
</tr>
<tr>
<td style="width:119.8pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="160" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Command Line<strong></strong></span></span></p>
</td>
<td style="width:162.05pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="216" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">adplus -crash -p [PID] –quiet</span></span></p>
</td>
<td style="width:7cm;background-color:transparent;border:#c0c0c0;padding:0 2.85pt;" width="265" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Sets up a recording session that waits in the background for crashes. When a crash occurs the dump is recorded.</span></span></p>
</td>
</tr>
<tr>
<td style="background:#d3dfee 0 0;width:119.8pt;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="160" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">WinDbg<strong></strong></span></span></p>
</td>
<td style="background:#d3dfee 0 0;width:162.05pt;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="216" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">.loadby sos mscorwks</span></span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"> </p>
</td>
<td style="background:#d3dfee 0 0;width:7cm;border:#c0c0c0;padding:0 2.85pt;" width="265" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Load the Managed Extensions Module in WinDbg</span></span></p>
</td>
</tr>
<tr>
<td style="width:119.8pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="160" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">WinDbg<strong></strong></span></span></p>
</td>
<td style="width:162.05pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="216" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">!runaway</span></span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"> </p>
</td>
<td style="width:7cm;background-color:transparent;border:#c0c0c0;padding:0 2.85pt;" width="265" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Lists all threads that used the most CPU time in during the recording session of the memory dump</span></span></p>
</td>
</tr>
<tr>
<td style="background:#d3dfee 0 0;width:119.8pt;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="160" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">WinDbg<strong></strong></span></span></p>
</td>
<td style="background:#d3dfee 0 0;width:162.05pt;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="216" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">~* e!clrstack</span></span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"> </p>
</td>
<td style="background:#d3dfee 0 0;width:7cm;border:#c0c0c0;padding:0 2.85pt;" width="265" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Shows the callstack of all threads in the memory dump</span></span></p>
</td>
</tr>
<tr>
<td style="width:119.8pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="160" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">WinDbg<strong></strong></span></span></p>
</td>
<td style="width:162.05pt;background-color:transparent;border:#7ba0cd 1pt solid;padding:0 2.85pt;" width="216" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">!synchblk </span></span></p>
</td>
<td style="width:7cm;background-color:transparent;border:#c0c0c0;padding:0 2.85pt;" width="265" valign="top">
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:8pt;" lang="EN-US"><span style="font-family:Lucida Sans Unicode;">Which treads holds a lock</span></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoCaption" style="text-align:left;margin:0 0 4pt;"><em><span style="font-size:x-small;"><span style="color:#7f7f7f;"><span style="font-family:Lucida Sans Unicode;"><span lang="EN-US">Table </span><span lang="EN-US">2</span><span lang="EN-US">Commands for analysing performance problems</span></span></span></span></em></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"> </p>
<p style="text-align:left;"><span style="color:#365f91;"><span lang="EN-US"><span><span style="font-size:large;font-family:Arial;">3</span><span style="font:7pt &quot;"> </span></span></span><span style="font-size:large;"><span style="font-family:Arial;"><span lang="EN-US">Bibliography</span></span></span></span></p>
<p class="MsoBibliography" style="text-align:left;margin:4pt 0;"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;"><span><strong>Douglass, David. 2006.</strong> .NET on my mind. <em>.NET on my mind. </em>[Online] 03 14, 2006. [Cited: 12 06, 2008.] <a href="http://geekswithblogs.net/.netonmymind/archive/2006/03/14/72262.aspx">http://geekswithblogs.net/.netonmymind/archive/2006/03/14/72262.aspx</a>.</span></span></span></p>
<p class="MsoBibliography" style="text-align:left;margin:4pt 0;"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;"><strong><span lang="EN-US">Ferrandez, Tess. 2008.</span></strong><span lang="EN-US"> If broken it is, fix it you should. <em>If broken it is, fix it you should. </em>[Online] 2008. [Cited: 12 06, 2008.] <a href="http://blogs.msdn.com/tess/default.aspx">http://blogs.msdn.com/tess/default.aspx</a>.</span></span></span></p>
<p class="MsoBibliography" style="text-align:left;margin:4pt 0;"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;"><strong><span lang="EN-US">J.D. Meier, Srinath Vasireddy, Ashish Babbar, John Allen and Alex Mackman. 2004.</span></strong><span lang="EN-US"> Improving .NET Application Performance and Scalability . <em>Improving .NET Application Performance and Scalability . </em>[Online] 2004. [Cited: 12 06, 2008.] <a href="http://msdn.microsoft.com/en-us/library/ms998549.aspx">http://msdn.microsoft.com/en-us/library/ms998549.aspx</a>.</span></span></span></p>
<p class="MsoBibliography" style="text-align:left;margin:4pt 0;"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;"><strong><span lang="EN-US">J.D. Meier, Srinath Vasireddy, Ashish Babbar, Rico Mariani, and Alex Mackman. 2007.</span></strong><span lang="EN-US"> Web Application Performance Design Inspection Questions. <em>Web Application Performance Design Inspection Questions. </em>[Online] 12 18, 2007. [Cited: 12 14, 2008.] <a href="http://www.guidanceshare.com/wiki/Web_Application_Performance_Design_Inspection_Questions">http://www.guidanceshare.com/wiki/Web_Application_Performance_Design_Inspection_Questions</a>.</span></span></span></p>
<p class="MsoBibliography" style="text-align:left;margin:4pt 0;"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;"><strong><span lang="EN-US">2005.</span></strong><span lang="EN-US"> Monitoring Applications That Use the IIS 6.0 WWW Service. <em>Monitoring Applications That Use the IIS 6.0 WWW Service. </em>[Online] Microsoft, 08 22, 2005. [Cited: 12 12, 2008.] <a href="http://technet.microsoft.com/en-us/library/cc775979.aspx">http://technet.microsoft.com/en-us/library/cc775979.aspx</a>.</span></span></span></p>
<p class="MsoBibliography" style="text-align:left;margin:4pt 0;"><span style="font-size:x-small;"><span style="font-family:Lucida Sans Unicode;"><strong><span lang="EN-US">Seguin, Karl. 2008.</span></strong><span lang="EN-US"> <em>Foundations of Programming &#8211; Building better software. </em><a href="http://blogbastlers.wordpress.com/wp-admin/www.codebetter.com">www.codebetter.com</a>, Canada/Ontario : s.n., 07 17, 2008.</span></span></span></p>
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"> </p>
<p style="text-align:left;">
<p class="MsoNormal" style="text-align:left;margin:4pt 0;"> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/blogbastlers.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/blogbastlers.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/blogbastlers.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/blogbastlers.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/blogbastlers.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/blogbastlers.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/blogbastlers.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/blogbastlers.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/blogbastlers.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/blogbastlers.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/blogbastlers.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/blogbastlers.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/blogbastlers.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/blogbastlers.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogbastlers.wordpress.com&amp;blog=5632139&amp;post=18&amp;subd=blogbastlers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogbastlers.wordpress.com/2008/12/14/introduction-to-dealing-with-aspnet-perfomance-issues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8704163285128f3aaed325344f34d448?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Penny</media:title>
		</media:content>

		<media:content url="http://blogbastlers.files.wordpress.com/2008/12/aspnet_counter.png" medium="image">
			<media:title type="html">aspnet_counter</media:title>
		</media:content>
	</item>
	</channel>
</rss>
