Недостаточный размер стандартной папки TEMP для рабочей роли или веб-роли облачной службы (классической)
Внимание
Облачные службы (классическая версия) теперь устарела для всех клиентов с 1 сентября 2024 года. Все существующие запущенные развертывания будут остановлены и завершены корпорацией Майкрософт, и данные будут окончательно потеряны начиная с октября 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой. Это новая модель развертывания на основе Azure Resource Manager.
Максимальный размер временного каталога по умолчанию рабочей роли или веб-роли облачной службы составляет 100 МБ, чего может оказаться недостаточно в определенный момент. В этой статье описано, как можно предотвратить нехватку места для временного каталога.
Если проблема Azure не устранена в этой статье, посетите форумы Azure на форумах Microsoft Q и A и Stack Overflow. Описание своей проблемы можно опубликовать на этих форумах или написать в Twitter (@AzureSupport). Также можно отправить запрос в службу поддержки Azure. Чтобы отправить такой запрос, на странице поддержки Azure щелкните Получить поддержку.
Почему мне не хватает свободного места?
В выполняемом в вашей программе коде используются стандартные переменные среды Windows: TEMP и TMP. Переменные TEMP и TMP указывают на один каталог с максимальным размером в 100 МБ. Все данные, хранящиеся в этом каталоге, не сохраняются в течение жизненного цикла облачной службы. Если экземпляры ролей в облачной службе перезапускаются, каталог очищается.
Предложение по устранению проблемы
Примените один из следующих альтернативных способов.
- Настройте локальный ресурс хранилища и обращайтесь напрямую к нему, не используя TEMP или TMP. Чтобы получить доступ к локальному ресурсу хранилища из кода, запущенного в программе, вызовите метод RoleEnvironment.GetLocalResource .
- Настройте локальный ресурс хранилища и задайте каталоги TEMP и TMP, чтобы указать путь к этому локальному ресурсу хранилища. Это изменение следует выполнить внутри метода RoleEntryPoint.OnStart .
В следующем примере кода показано, как изменить целевые каталоги TEMP и TMP из метода OnStart:
using System;
using Microsoft.WindowsAzure.ServiceRuntime;
namespace WorkerRole1
{
public class WorkerRole : RoleEntryPoint
{
public override bool OnStart()
{
// The local resource declaration must have been added to the
// service definition file for the role named WorkerRole1:
//
// <LocalResources>
// <LocalStorage name="CustomTempLocalStore"
// cleanOnRoleRecycle="false"
// sizeInMB="1024" />
// </LocalResources>
string customTempLocalResourcePath =
RoleEnvironment.GetLocalResource("CustomTempLocalStore").RootPath;
Environment.SetEnvironmentVariable("TMP", customTempLocalResourcePath);
Environment.SetEnvironmentVariable("TEMP", customTempLocalResourcePath);
// The rest of your startup code goes here…
return base.OnStart();
}
}
}
Следующие шаги
См. блог, в котором описывается, как увеличить размер временной папки ASP.NET веб-ролей Azure.
Просмотрите дополнительные статьи об устранении неполадок в облачных службах.
Чтобы узнать, как устранять неполадки ролей облачной службы с помощью диагностических данных компьютеров Azure PaaS, изучите серию статей в блоге Кевина Уильямсона.