<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><language>en</language><title>Blog posts by Marco ter Horst @ Mirabeau</title> <link>https://world.optimizely.com/blogs/Marco-ter-Horst--Mirabeau/</link><description></description><ttl>60</ttl><generator>Optimizely World</generator><item> <title>Configuring GZip with IIS 7.5</title>            <link>https://world.optimizely.com/blogs/Marco-ter-Horst--Mirabeau/Dates/2012/2/Configuring-GZip-with-IIS-75/</link>            <description>&lt;p&gt;Today I had a real struggle when trying to change the GZip settings in our EPiServer environment.&lt;/p&gt;  &lt;p&gt;I found Frederik Vig’s excellent blog post ( &lt;a href=&quot;http://www.frederikvig.com/2011/10/faster-episerver-sites-client-side-performance/&quot;&gt;http://www.frederikvig.com/2011/10/faster-episerver-sites-client-side-performance/&lt;/a&gt; ) but like so many users, I also found that getting these supposedly easy settings to work, proved quite a challenge.&lt;/p&gt;  &lt;p&gt;Several online posts mentioned that “it just suddenly started working while troubleshooting”. I wasn’t gonna settle for this, so when I too got it to work, I reversed engineered all steps to find out exactly what was needed to get it to work.    &lt;br /&gt;This is what I found:     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;&lt;u&gt;The Case&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Common practice is &lt;em&gt;not&lt;/em&gt; to GZip images (e.g. jpg’s). Overall it is said that this type of content is already compressed and the tiny bit of extra compression does not compete with the extra CPU power required for GZipping it.     &lt;br /&gt;But is this really true IRL?     &lt;br /&gt;For one of our customers I found out that it’s not.     &lt;br /&gt;Despite several pleads to their content management team.     &lt;br /&gt;    &lt;br /&gt;So I started the quest to “help” this customer server-side by Gzipping images.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;&lt;u&gt;The Tools&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Crucial tool on this quest was WebPageTest (&lt;a href=&quot;http://webpagetest.org&quot;&gt;http://webpagetest.org&lt;/a&gt;).     &lt;br /&gt;If you don’t know it yet, shame on you! Crawl out under that rock and start harvesting the power.&lt;/p&gt;  &lt;p&gt;Second I used IIS Trace logging.    &lt;br /&gt;You can enable it using the following command lines:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;%windir%\system32\inetsrv\appcmd configure trace &amp;quot;&amp;lt;appPoolname&amp;gt;/&amp;quot; /enablesite        &lt;br /&gt;%windir%\system32\inetsrv\appcmd configure trace &amp;quot;&amp;lt;appPoolname&amp;gt;/&amp;quot; /enable /statusCodes:&amp;quot;200-600&amp;quot;         &lt;br /&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This will create XML files in the C:\inetpub\logs\FailedReqLogFiles folder.    &lt;br /&gt;Just open these XML files, go to “Compact View” and search for “compression”     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;&lt;u&gt;The Quest&lt;/u&gt;&lt;/strong&gt;     &lt;br /&gt;Long story short: %Windir%\system32\inetsrv\config\applicationHost.config is more important that you could ever imagine.     &lt;br /&gt;In this case it’s simply impossible to achieve your goals just by editing the web.config file. For me this was the hardest thing to grasp at first. Ofcourse I knew of the existence of the applicationhost.config file, but to me it was just the basis. Any specific application settings are set in the web.config, overruling everything else…. fail.&lt;/p&gt;  &lt;p&gt;If you want to edit your Gzip settings, both files are equally important.&lt;/p&gt;  &lt;p&gt;Here are the settings that work.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;applicationHost.config&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;section name=&amp;quot;httpCompression&amp;quot; overrideModeDefault=&amp;quot;Allow&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;and&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;httpCompression directory=&amp;quot;%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;scheme name=&amp;quot;gzip&amp;quot; dll=&amp;quot;%Windir%\system32\inetsrv\gzip.dll&amp;quot; dynamicCompressionLevel=&amp;quot;4&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;dynamicTypes&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;text/*&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;message/*&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;application/x-javascript&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;image/jpeg&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;*/*&amp;quot; enabled=&amp;quot;false&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/dynamicTypes&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;staticTypes&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;text/*&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;message/*&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;image/jpeg&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;application/x-javascript&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;application/atom+xml&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;application/xaml+xml&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;*/*&amp;quot; enabled=&amp;quot;false&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/staticTypes&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/httpCompression&amp;gt;&lt;/font&gt;&lt;/em&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;web.config&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;&amp;lt;httpCompression&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;staticTypes&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;text/*&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;message/*&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;application/javascript&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;application/x-javascript&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;image/jpeg&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;*/*&amp;quot; enabled=&amp;quot;false&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160; &amp;lt;/staticTypes&amp;gt;         &lt;br /&gt;&amp;#160; &amp;lt;dynamicTypes&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;text/*&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;message/*&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;application/javascript&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;application/x-javascript&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;image/jpeg&amp;quot; enabled=&amp;quot;true&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add mimeType=&amp;quot;*/*&amp;quot; enabled=&amp;quot;false&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160; &amp;lt;/dynamicTypes&amp;gt;         &lt;br /&gt;&amp;#160; &amp;lt;scheme name=&amp;quot;gzip&amp;quot; dll=&amp;quot;%Windir%\system32\inetsrv\gzip.dll&amp;quot; dynamicCompressionLevel=&amp;quot;4&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;lt;/httpCompression&amp;gt;&lt;/font&gt;&lt;/em&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Seems kinda double doesn’t it.    &lt;br /&gt;Like I said: I reverse engineered all settings. If you want to test yourself, just start commenting settings out. You’ll see that you’ll break it. &lt;/p&gt;  &lt;p&gt;One last remark: when I finally got Gzip to work for my jpeg images, the benefit of the extra compression (in KB) was next to nothing.   &lt;br /&gt;This was kinda WTF for me.    &lt;br /&gt;Before I started on this quest, I tested compression on the existing JPG’s on the website using Yahoo’s Smush.it ( &lt;a href=&quot;http://www.smushit.com/ysmush.it/&quot;&gt;http://www.smushit.com/ysmush.it/&lt;/a&gt; ). it told me that there as a lot to gain. So what went wrong?    &lt;br /&gt;I started Googling and found this great blog post by Scott Forsyth ( &lt;a href=&quot;http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx&quot;&gt;http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx&lt;/a&gt; ).    &lt;br /&gt;Based on this calculations I set dynamicCompressionLevel (IIS Trace logs had already shown me, that the GZipping of the images was done by dynamicCompression) to 4.    &lt;br /&gt;    &lt;br /&gt;End result: The webpage with most images 50% smaller.    &lt;br /&gt;    &lt;br /&gt;Good luck on your quest!&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Marco-ter-Horst--Mirabeau/Dates/2012/2/Configuring-GZip-with-IIS-75/</guid>            <pubDate>Thu, 09 Feb 2012 15:30:57 GMT</pubDate>           <category>Blog post</category></item><item> <title>Load balancing EPiServer CMS</title>            <link>https://world.optimizely.com/blogs/Marco-ter-Horst--Mirabeau/Dates/2011/10/Load-balancing-EPiServer-CMS/</link>            <description>&lt;p&gt;Load balancing EPiServer can be quite tricky and there are a few key configuration items to be set.    &lt;br /&gt;All the information below has been gathered from several different articles, blog posts, etc. on the Internet. The purpose of this blog is to provide you with the tools to successfully setup a Load balanced EPiServer environment.     &lt;br /&gt;&lt;/p&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;h1&gt;Introduction&lt;/h1&gt;  &lt;p&gt;For one of our customers we have the following EPiServer setup:    &lt;br /&gt;&lt;strong&gt;Functional:      &lt;br /&gt;&lt;/strong&gt;A customer website with both a public and a private pages, using Forms bases authentication + (of course) EPiServer CMS pages.     &lt;br /&gt;The public part of website is available over http, the private and CMS pages over https.     &lt;br /&gt;Customers seamlessly roam back and forth between http and https pages.     &lt;br /&gt;&lt;strong&gt;Technical:      &lt;br /&gt;&lt;/strong&gt;The architecture consists of 3 servers, all virtuals in the TerreMark eCloud: 2 EPiServer application servers and 1 database server.     &lt;br /&gt;&lt;em&gt;     &lt;br /&gt;Web servers:       &lt;br /&gt;&lt;/em&gt;&lt;strong&gt;Windows 2008 R2      &lt;br /&gt;4 VPU’s       &lt;br /&gt;6GB Memory       &lt;br /&gt;&lt;/strong&gt;    &lt;br /&gt;Both http and https traffic is load balanced over both application servers. Load balancing is configured with stickiness based on source IP address with a TTL of 5 minutes.     &lt;br /&gt;On both application servers the EPiServer application is served by a “Web Garden” of three Worker Processes.     &lt;br /&gt;So in effect EPiServer is served by 6 Worker Processes in total.     &lt;br /&gt;&lt;em&gt;     &lt;br /&gt;Database server:&lt;/em&gt;     &lt;br /&gt;&lt;strong&gt;Windows 2008      &lt;br /&gt;2 VPU’s       &lt;br /&gt;8GB Memory&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;Next to the standard EPiServer database, the application uses five more databases (i.e. store and product databases).     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;/link/031e72e0fd7a482f861e65419b7d2f4b.jpg&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Arch&quot; border=&quot;0&quot; alt=&quot;Arch&quot; src=&quot;/link/fd177901bdf2426ca24c459736c803ca.jpg&quot; width=&quot;189&quot; height=&quot;383&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;Challenges&lt;/h1&gt;  &lt;p&gt;With the setup described above, we are faced with a couple of challenges.&lt;/p&gt;  &lt;p&gt;- Content &amp;amp; Cache Updates    &lt;br /&gt;- Shared VPP Data     &lt;br /&gt;- Unauthenticated Session States     &lt;br /&gt;- Authenticated Session States&lt;/p&gt;  &lt;p&gt;The first two are actually easy because they are well documented in several EPiServer articles.    &lt;br /&gt;For the latter two some .net trickery is required.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Content &amp;amp; Cache Updates&lt;/strong&gt;     &lt;br /&gt;Make sure the following section is uncommented in your web.config on all nodes:&lt;/p&gt;  &lt;p&gt;&lt;font size=&quot;1&quot;&gt;&amp;lt;system.serviceModel&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;extensions&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;bindingElementExtensions&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add name=&amp;quot;udpTransport&amp;quot; type=&amp;quot;Microsoft.ServiceModel.Samples.UdpTransportElement, EPiServer.Implementation&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/bindingElementExtensions&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/extensions&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;services&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- Before deployment, you should remove the returnFaults behavior configuration to avoid disclosing information in exception messages --&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;service name=&amp;quot;EPiServer.Events.Remote.EventReplication&amp;quot; behaviorConfiguration=&amp;quot;DebugServiceBehaviour&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;endpoint name=&amp;quot;RemoteEventServiceEndPoint&amp;quot; contract=&amp;quot;EPiServer.Events.ServiceModel.IEventReplication&amp;quot; binding=&amp;quot;customBinding&amp;quot; bindingConfiguration=&amp;quot;RemoteEventsBinding&amp;quot; address=&amp;quot;soap.udp://239.255.255.19:5000/RemoteEventService&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/service&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/services&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;client&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;endpoint name=&amp;quot;RemoteEventServiceClientEndPoint&amp;quot; address=&amp;quot;soap.udp://239.255.255.19:5001/RemoteEventService&amp;quot; binding=&amp;quot;customBinding&amp;quot; bindingConfiguration=&amp;quot;RemoteEventsBinding&amp;quot; contract=&amp;quot;EPiServer.Events.ServiceModel.IEventReplication&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!--Client configuration for the ImageEditor, the client name has to be &amp;quot;ImageServiceClientEndPoint&amp;quot;--&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- Only uncomment if the Image Service is hosted in an external application       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;endpoint       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; name=&amp;quot;ImageServiceClientEndPoint&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; address=&amp;quot;the address of the hosting application&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; binding=&amp;quot;the binding the hosting application is using&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bindingConfiguration=&amp;quot;ImageServiceBinding&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; contract=&amp;quot;EPiServer.ImageLibrary.IImageService&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; --&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/client&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;behaviors&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;serviceBehaviors&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;behavior name=&amp;quot;DebugServiceBehaviour&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;serviceDebug includeExceptionDetailInFaults=&amp;quot;false&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/behavior&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/serviceBehaviors&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/behaviors&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;bindings&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;customBinding&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;binding name=&amp;quot;RemoteEventsBinding&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;binaryMessageEncoding /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;udpTransport multicast=&amp;quot;True&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/binding&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/customBinding&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- Only uncomment if the Image Service is hosted in an external application       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;binding type used by the Image Service&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;binding name=&amp;quot;ImageServiceBinding&amp;quot; maxReceivedMessageSize=&amp;quot;20000000&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;readerQuotas maxArrayLength=&amp;quot;20000000&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;security mode=&amp;quot;None&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/binding&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/binding type used by the Image Service&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; --&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/bindings&amp;gt;       &lt;br /&gt;&amp;lt;/system.serviceModel&amp;gt;&lt;/font&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This enables content updates, which are made e.g. on node CMS01 to be propagated to node CMS02.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://world.episerver.com/Documentation/Items/Tech-Notes/EPiServer-CMS-5/EPiServer-CMS-5-R2-SP2/Event-Management-System-Specification/&quot; target=&quot;_blank&quot;&gt;More information here.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Shared VPP Data&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Use the following steps to enable use of shared VPP Folder:&lt;/p&gt;  &lt;p&gt;1) Create a new user    &lt;br /&gt;2) Make this user member of the IIS IUSRS\ group (remove all other group memberships for extra security)     &lt;br /&gt;3) Make sure the IIS IUSRS\ group has appropriate rights on “non default” folders. (E.g. Logging folders)     &lt;br /&gt;4) Configure your Application Pool to run as this user     &lt;br /&gt;5) On the Server with the VPP folders, repeat steps 1) &amp;amp; 2)     &lt;br /&gt;6) Give the IIS IUSRS\ group appropriate rights on the VPP Folders (and sub folders)&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://world.episerver.com/Documentation/Items/Tech-Notes/EPiServer-CMS-6/EPiServer-CMS-60/Setting-Up-File-Shares-for-Load-Balancing-Scenario/&quot; target=&quot;_blank&quot;&gt;More information here.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Unauthenticated Session States&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;By default Microsoft Internet Information Server saves session states “In Process”. Meaning in the Worker Process of the web application.    &lt;br /&gt;In our scenario we will want to use a Session State Database. Using the ASP.NET State Service (part of default install) to save session states to a database.     &lt;br /&gt;Don’t worry about performance. This actually works very well and very fast.     &lt;br /&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms178586.aspx&quot; target=&quot;_blank&quot;&gt;Here is all the info you need to configure your website to use it.&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;After following the steps from the KB article to setup the DB. You add this piece of configuration to your web.config on all nodes:&lt;/p&gt;  &lt;p&gt;&lt;font size=&quot;1&quot;&gt;&amp;lt;sessionState mode=&amp;quot;SQLServer&amp;quot; sqlConnectionString=&amp;quot;data source=10.1.1.1;user id=aspstate;password=******&amp;quot; cookieless=&amp;quot;false&amp;quot; timeout=&amp;quot;20&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Make sure the user id is created on the DB server and has DBO rights (only) on the ASPstate DB.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Authenticated Session States&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Picture this scenario:    &lt;br /&gt;- a user opens a public page and is routed by the load balancer over port 80 to CMS01     &lt;br /&gt;- he clicks a link to use a feature on the website only available for logged in users and is redirected to the login page. This is a SSL encrypted page and the users is routed by the load balancer over port 443 to CMS02     &lt;br /&gt;- the user fills in his credentials and is redirected back to the original public page to CMS01&lt;/p&gt;  &lt;p&gt;Unless we perform the steps below, the user will not be logged in and the following error will appear in the Windows System Eventlog:&lt;/p&gt;  &lt;p&gt;&lt;font size=&quot;1&quot;&gt;Event code: 4005      &lt;br /&gt;Event message: &lt;strong&gt;Forms authentication failed for the request. Reason: The ticket supplied was invalid.        &lt;br /&gt;&lt;/strong&gt;Event time: 10/10/2011 2:29:32 PM       &lt;br /&gt;Event time (UTC): 10/10/2011 12:29:32 PM       &lt;br /&gt;Event ID: 2ddd863e47534f53a182f84a9a613070       &lt;br /&gt;Event sequence: 75       &lt;br /&gt;Event occurrence: 1       &lt;br /&gt;Event detail code: 50201       &lt;br /&gt;&amp;#160; &lt;br /&gt;Application information:       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Application domain: /LM/W3SVC/2/ROOT-1-129627223033590000       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Trust level: Full       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Application Virtual Path: /       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Application Path: D:\Inetpub\wwwroot\       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Machine name: CMS01       &lt;br /&gt;&amp;#160; &lt;br /&gt;Process information:       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Process ID: 2716       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Process name: w3wp.exe       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Account name: username       &lt;br /&gt;&amp;#160; &lt;br /&gt;Request information:       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Request URL: &lt;/font&gt;&lt;a href=&quot;http://website/UI/javascript/system.aspx&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://website/UI/javascript/system.aspx&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;&lt;font size=&quot;1&quot;&gt;&amp;#160;&amp;#160;&amp;#160; Request path: /UI/javascript/system.aspx      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; User host address: ip address       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; User:&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Is authenticated: False       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Authentication Type:&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Thread account name: username&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This is what happened: after the post of login credentials on CMS02. The server encrypted the VIEWSTATE using the node’s machine key.    &lt;br /&gt;Now when the users arrived back on the node CMS01, this node was unable to decrypt the VIEWSTATE and therefore did not accept the user as validated user.&lt;/p&gt;  &lt;p&gt;To fix this, we need to make sure all servers in the farm use the same machine key.&lt;/p&gt;  &lt;p&gt;There are a ton of websites who provide online machine key generation. Like this one: &lt;a href=&quot;http://aspnetresources.com/tools/machineKey&quot;&gt;http://aspnetresources.com/tools/machineKey&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Just click generate and add it to your web.config. Make sure you add it between system.web tags:&lt;/p&gt;  &lt;p&gt;&lt;font size=&quot;1&quot;&gt;&amp;lt;system.web&amp;gt;      &lt;br /&gt;&amp;lt;machineKey validationKey=&amp;quot;7F252ED2FAF2BB70FDFB7AF2CC5864981D4933F795FDBC5E5B54DB2589148AF1BD10E277044C0426C6C47601AE2074F3B5E7012D6&amp;quot; decryptionKey=&amp;quot;00C0C09D8E7D0DCB3535A29A00E3FBA39DF3300&amp;quot; validation=&amp;quot;SHA1&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Good luck!&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/e2d9c3a0dfbb4034ba768bf582cbaeb0.png&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Marco-ter-Horst--Mirabeau/Dates/2011/10/Load-balancing-EPiServer-CMS/</guid>            <pubDate>Mon, 10 Oct 2011 16:14:02 GMT</pubDate>           <category>Blog post</category></item></channel>
</rss>