Ошибка Azure ARR при включении дискового кэша

У нас есть служба Azure, и теперь мне нужно настроить ARR (маршрутизацию запросов приложений). Я следил за блогом http://robindotnet.wordpress.com/2011/07/ и ARR работает нормально. Теперь мне нужно включить DiskCaching для этого, и я пытаюсь команда ниже:

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/diskCache /+"[path='c:\cache',maxUsage='0']" /commit:apphost >> C:\setDiskCache.txt

Но получается ошибка ниже: ОШИБКА (сообщение: В новом объекте driveLocation отсутствуют обязательные атрибуты. Невозможно добавить повторяющуюся запись коллекции типа "driveLocation" с уникальным ключевым атрибутом "path", установленным в "c:\cache".)

и в этой папке нет кэшируемого контента. Любое направление или помощь приветствуется.

Ниже приведен полный cmd-файл для справки:

cd /d "%~dp0"

start /wait msiexec.exe /i webfarm_amd64_en-US.msi /qn /log C:\installWebfarmLog.txt
start /wait msiexec.exe /i requestRouter_amd64_en-US.msi /qn /log C:\installARRLog.txt

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy /enabled:"True" /reverseRewriteHostInResponseHeaders:"False" /preserveHostHeader:"True" /commit:apphost >> C:\setProxyLog.txt

%windir%\system32\inetsrv\appcmd.exe set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00 >> C:\setAppPool.txt

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/diskCache /+"[path='c:\cache',maxUsage='0']" /commit:apphost >> C:\setDiskCache.txt

exit /b 0

Я могу найти то же самое здесь для IIS [http://www.iis.net/learn/extensions/configuring-application-request-routing-(arr)/configure-and-enable-disk-cache-in-application-request-routing], который можно включить вручную. Но мы должны включить это программно.

1 ответ

Как это часто бывает, сообщение об ошибке содержит подсказку о причине. Проблема в том, что вы можете иметь только одну запись для каждого значения местоположения диска. Это означает, что сценарий работает нормально в первый раз, но во второй раз он будет выдан, потому что значение уже применено.

Вы не можете удалить узел с помощью appcmd (он не поддерживает очистку коллекции), но вы можете использовать текстовый редактор (этот файл: %windir%\System32\inetsrv\config\applicationHost.config). Или вы можете запустить скрипт powershell:

Import-Module WebAdministration
Remove-WebConfigurationProperty  -pspath 'MACHINE/WEBROOT/APPHOST'  -filter "system.webServer/diskCache" -name "."

В любом случае, это узел, которым будут манипулировать:

<driveLocation path="c:\cache" maxUsage="0" />

После этого вы сможете перезапустить свой код.

Другие вопросы по тегам