Ошибка 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» с атрибутом «путь» уникального ключа, установленным на «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], который можно включить вручную. Но нам нужно включить это программно.


person Manish Garg    schedule 25.04.2013    source источник


Ответы (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" />

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

person Geoffrey McGrath    schedule 21.11.2013