{"id":601,"date":"2020-10-13T00:12:00","date_gmt":"2020-10-12T11:12:00","guid":{"rendered":"https:\/\/blog.wiseowls.co.nz\/?p=601"},"modified":"2026-03-08T00:44:48","modified_gmt":"2026-03-07T11:44:48","slug":"arr-setting-up","status":"publish","type":"post","link":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/","title":{"rendered":"ARR: Setting up"},"content":{"rendered":"\n<p>Not so long ago a client asked us to spec up their CI\/CD pipeline. They are going through devops transformation and as part of their &#8220;speed up delivery&#8221; objective they wanted to minimize downtime when they deploy new versions of their software or run maintenance. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6\ud83d\udfe9-deployments<\/h2>\n\n\n\n<p>First thing we wanted to try was to introduce blue-green approach. The application runs on IIS and luckily for us, Microsoft offers a solution there: <a href=\"https:\/\/www.iis.net\/downloads\/microsoft\/application-request-routing\">ARR<\/a>. There\u2019s heaps documentation online, and most examples seem to point at scaling out by routing traffic to application round robin. In our case the application was not ready for that just yet so we decided to use it for directing all traffic to one backend server only while we deploy the inactive one:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/11\/Blue-Green-1024x714.png\" alt=\"typical blue-green diagram\" class=\"wp-image-606\" width=\"512\" height=\"357\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/11\/Blue-Green-1024x714.png 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/11\/Blue-Green-300x209.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/11\/Blue-Green-768x535.png 768w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/11\/Blue-Green.png 1354w\" sizes=\"auto, (max-width: 512px) 85vw, 512px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Farming Web Farms<\/h2>\n\n\n\n<p>ARR introduces a concept of Web Farms. This basically is a logical grouping of content servers that ARR treats as one site. Each farm comes with settings on how caching should work, or what actual content servers are like. It&#8217;s pretty easy to set up when we&#8217;ve got one or two of there. But in our case we were looking at approximately 100 farms. Yikes! Overall the process is pretty simple: create farm, add content servers, create URL rewrite rule. Nothing fancy and documentation is plentiful. What we wanted to do however was to automate everything into one script that could later run remotely when triggered by CI\/CD pipelines. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PowerShell to the rescue<\/h2>\n\n\n\n<p>Our requirements were pretty standard until we realized that there&#8217;s no easy way to insert URL rewrite rules into arbitrary positions in the list. So we implemented a set of dummy rules that the script uses as anchors to locate a place where to inject new rule. We also needed node health check to cut off inactive servers, the easiest was a plain text file in website root with words &#8220;UP&#8221; or &#8220;DOWN&#8221; so that we can swap ARR slots by simply updating a file. ARR supports a few ways to programmatically manage, but since we&#8217;re on Windows we picked PowerShell as our tool of choice and ended up with something like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">function CheckIfExists($xpath, $name, $remove = $true) {      \r\n   $existing = Get-WebConfigurationProperty -pspath $psPath \"$xpath[@name='$name']\" -Name .\r\n   if($null -ne $existing) {      \r\n      if($remove) {\r\n         Clear-WebConfiguration -pspath $psPath -Filter \"$xpath[@name='$name']\"\r\n      }\r\n      return  $true\r\n   }\r\nfunction IndexOfNode($collection, $name) {\r\n   $i=0\r\n   for ($i=0; $i -lt $existing.Collection.Count; $i++)\r\n   {\r\n      if ($collection[$i].name -eq $name) \r\n      { \r\n         return $i\r\n      }\r\n   }\r\n   return $i-1 #found nothing - return position at the end of collection\r\n}\r\n\r\nfunction CreateRule($name, $matchUrl = \"*\", $atAnchor = \"\") {\r\n   $matchingPatternSyntax = if ($matchUrl -eq \"*\") {\"Wildcard\"} else { \"ECMAScript\" };\r\n\r\n   $existing = Get-WebConfiguration -pspath $psPath \"system.webServer\/rewrite\/globalRules\"\r\n   $index = IndexOfNode $existing.Collection $atAnchor\r\n\r\n   Add-WebConfigurationProperty -pspath $psPath  -filter \"system.webServer\/rewrite\/globalRules\" -AtIndex $index -name \".\" -value @{name=$name;patternSyntax=$matchingPatternSyntax;stopProcessing='True';enabled='True'}\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"system.webServer\/rewrite\/globalRules\/rule[@name='$name']\/match\" -name \"url\" -value $matchUrl\r\n}\r\n\r\nfunction CreateRuleCondition($name, $in = \"{HTTP_HOST}\", $pattern, $negate = $false) \r\n{\r\n   $value = @{\r\n      input=$in;\r\n      pattern=$pattern; \r\n   }\r\n\r\n   if($negate -eq $true) {\r\n      $value.Add(\"negate\", \"True\")\r\n   }\r\n\r\n   Add-WebConfigurationProperty -pspath $psPath  -filter \"system.webServer\/rewrite\/globalRules\/rule[@name='$name']\/conditions\" -name \".\" -value $value\r\n}\r\n\r\nfunction CreateRewriteAction($name, $url) {   \r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"system.webServer\/rewrite\/globalRules\/rule[@name='$name']\/action\" -name \"type\" -value \"Rewrite\"\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"system.webServer\/rewrite\/globalRules\/rule[@name='$name']\/action\" -name \"url\" -value \"$url\/{R:0}\"\r\n}\n\nfunction CreateRedirectRule(\r\n   $ruleName,      \r\n   $matchUrl,\r\n   $conditionHost,\r\n   $farmName,\r\n   $recreate = $true,\r\n   $atName\r\n) \r\n{\r\n   if(CheckIfExists \"system.webServer\/rewrite\/globalRules\/rule\" $ruleName $recreate) {\r\n      if($recreate) {\r\n         Write-Host \"Removed existing $ruleName before proceeding\"\r\n      } else {\r\n         Write-Host \"Skipped existing $ruleName\"\r\n         return\r\n      }\r\n   }\r\n   \r\n   # Create a new rule\r\n   CreateRule \"$ruleName\" -matchUrl $matchUrl -atAnchor $atName\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"system.webServer\/rewrite\/globalRules\/rule[@name='$farmName']\/conditions\" -name \"logicalGrouping\" -value \"MatchAny\"\r\n   \r\n   $conditionHost | ForEach-Object {\r\n      CreateRuleCondition $ruleName -pattern $_\r\n   }\r\n   \r\n   CreateRewriteAction $farmName \"https:\/\/$farmName\"\r\n}\n\nfunction CreateWebFarm(\r\n      $farmName,\r\n      $healthCheckUrl,\r\n      $blueIpAddress,\r\n      $greenIpAddress,\r\n      $parentSiteHostName,\r\n      $Recreate = $true\r\n   )\r\n{\r\n   return; #debugging\r\n   if(CheckIfExists \"webFarms\/webFarm\" $farmName $Recreate) {\r\n      if($Recreate) {\r\n         Write-Host \"Removed existing $farmName before proceeding\"\r\n      } else {\r\n         Write-Host \"Skipped existing $farmName\"\r\n         return\r\n      }\r\n   }\r\n   \r\n   Add-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\" -name \".\" -value @{name=$farmName}\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\/applicationRequestRouting\/affinity\" -name \"useCookie\" -value \"True\"\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\/applicationRequestRouting\/protocol\/cache\" -name \"enabled\" -value \"False\"\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\/applicationRequestRouting\/healthCheck\" -name \"url\" -value $healthCheckUrl\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\/applicationRequestRouting\/healthCheck\" -name \"interval\" -value \"00:00:10\"\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\/applicationRequestRouting\/healthCheck\" -name \"timeout\" -value \"00:00:5\"\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\/applicationRequestRouting\/healthCheck\" -name \"responseMatch\" -value \"UP\"\r\n\r\n   Add-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\" -name \".\" -value @{address=$blueIpAddress}\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\/server[@address='$blueIpAddress']\/applicationRequestRouting\" -name \"hostName\" -value $parentSiteHostName\r\n\r\n   Add-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\" -name \".\" -value @{address=$greenIpAddress}\r\n   Set-WebConfigurationProperty -pspath $psPath  -filter \"webFarms\/webFarm[@name='$farmName']\/server[@address='$greenIpAddress']\/applicationRequestRouting\" -name \"hostName\" -value $parentSiteHostName\r\n}\n\n$host\r = \"newservice.example.com\"\n$farm = \"newservice-farm\"\r\n\nCreateWebFarm $farm \"https:\/\/$farm\/healthcheck.htm\" $greenIp $blueIp $host\r\nCreateRedirectRule -ruleName $farm -matchUrl \"*\" -conditionHost @($host) -farmName $farm -atName \"--Inserting rules above this point--\"<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Not so long ago a client asked us to spec up their CI\/CD pipeline. They are going through devops transformation and as part of their &#8220;speed up delivery&#8221; objective they wanted to minimize downtime when they deploy new versions of their software or run maintenance. \ud83d\udfe6\ud83d\udfe9-deployments First thing we wanted to try was to introduce &hellip; <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;ARR: Setting up&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":353,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[7],"tags":[],"class_list":["post-601","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-infrastructure"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ARR: Setting up - Timur and associates<\/title>\n<meta name=\"description\" content=\"Setting up Application Request Routing on IIS for blue-green deployments. Routing traffic while deploying the inactive backend.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ARR: Setting up - Timur and associates\" \/>\n<meta property=\"og:description\" content=\"Setting up Application Request Routing on IIS for blue-green deployments. Routing traffic while deploying the inactive backend.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/\" \/>\n<meta property=\"og:site_name\" content=\"Timur and associates\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-12T11:12:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-07T11:44:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/01\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1919\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"timur\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TimurKh\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/\"},\"author\":{\"name\":\"timur\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"headline\":\"ARR: Setting up\",\"datePublished\":\"2020-10-12T11:12:00+00:00\",\"dateModified\":\"2026-03-07T11:44:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/\"},\"wordCount\":359,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg\",\"articleSection\":[\"Infrastructure\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/\",\"name\":\"ARR: Setting up - Timur and associates\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg\",\"datePublished\":\"2020-10-12T11:12:00+00:00\",\"dateModified\":\"2026-03-07T11:44:48+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"description\":\"Setting up Application Request Routing on IIS for blue-green deployments. Routing traffic while deploying the inactive backend.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg\",\"width\":2560,\"height\":1919,\"caption\":\"Photo by Kevin Ku on Unsplash\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2020\\\/10\\\/13\\\/arr-setting-up\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ARR: Setting up\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\",\"name\":\"Timur and associates\",\"description\":\"Notes of an IT contractor\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\",\"name\":\"timur\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"caption\":\"timur\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/TimurKh\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ARR: Setting up - Timur and associates","description":"Setting up Application Request Routing on IIS for blue-green deployments. Routing traffic while deploying the inactive backend.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/","og_locale":"en_US","og_type":"article","og_title":"ARR: Setting up - Timur and associates","og_description":"Setting up Application Request Routing on IIS for blue-green deployments. Routing traffic while deploying the inactive backend.","og_url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/","og_site_name":"Timur and associates","article_published_time":"2020-10-12T11:12:00+00:00","article_modified_time":"2026-03-07T11:44:48+00:00","og_image":[{"width":2560,"height":1919,"url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/01\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"timur","twitter_card":"summary_large_image","twitter_creator":"@TimurKh","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/#article","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/"},"author":{"name":"timur","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"headline":"ARR: Setting up","datePublished":"2020-10-12T11:12:00+00:00","dateModified":"2026-03-07T11:44:48+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/"},"wordCount":359,"commentCount":0,"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/01\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg","articleSection":["Infrastructure"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/","url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/","name":"ARR: Setting up - Timur and associates","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/#primaryimage"},"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/01\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg","datePublished":"2020-10-12T11:12:00+00:00","dateModified":"2026-03-07T11:44:48+00:00","author":{"@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"description":"Setting up Application Request Routing on IIS for blue-green deployments. Routing traffic while deploying the inactive backend.","breadcrumb":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/#primaryimage","url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/01\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg","contentUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/01\/kevin-ku-w7ZyuGYNpRQ-unsplash-scaled.jpg","width":2560,"height":1919,"caption":"Photo by Kevin Ku on Unsplash"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2020\/10\/13\/arr-setting-up\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.wiseowls.co.nz\/"},{"@type":"ListItem","position":2,"name":"ARR: Setting up"}]},{"@type":"WebSite","@id":"https:\/\/blog.wiseowls.co.nz\/#website","url":"https:\/\/blog.wiseowls.co.nz\/","name":"Timur and associates","description":"Notes of an IT contractor","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.wiseowls.co.nz\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59","name":"timur","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","caption":"timur"},"sameAs":["https:\/\/x.com\/TimurKh"]}]}},"_links":{"self":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/comments?post=601"}],"version-history":[{"count":9,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/601\/revisions"}],"predecessor-version":[{"id":615,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/601\/revisions\/615"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media\/353"}],"wp:attachment":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media?parent=601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/categories?post=601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/tags?post=601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}