2017-02-21 4 views
2

Мы работаем над проверкой нашего сервиса Loupe для запуска в качестве службы приложений Azure и запускаем шоу-шоу, который мы не можем понять. Все, что попытки разрешить временную папку не удается, за исключением:Не удается получить временную директорию для веб-сайта .NET, размещенного в службе Azure App.

 
    mscorlib : System.IO.IOException 
    The directory name is invalid. 
     at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
     at System.IO.__Error.WinIOError() 
     at System.IO.Path.InternalGetTempFileName(Boolean checkHost) 

Трассировка стека имеет это в методе .NET для создания имени временного файла. Эта трассировка стека является общей для почти всех областей, в которых мы получаем отказ. Похоже, что если бы мы заставили сайт перезагрузиться и/или заставили базовый план обслуживания приложений перемасштабировать, он исчезнет, ​​пока мы не обновим сайт, но больше не будем.

С тех пор как единственные результаты поиска, которые мы могли обнаружить, это ошибка возникает, когда олицетворение включено, а пользователь, которому выдают себя за образец, не имеет доступа к временному каталогу пользователей IIS App Pool, который мы выкопали. Во-первых, мы можем подтвердить из нашего ведения журнала, что нить не выдаёт себя за выдачу запроса. Во-вторых, просто для забавы мы добавили это в web.config, чтобы быть в полной уверенности:

<system.web>   
    <identity impersonate="false"/> 
</system.web> 

Все безрезультатно. Если бы это была общая проблема с Azure App Services, я бы предположил, что это сломает многие системы, поэтому я должен сделать вывод, что мы сделали что-то захватывающее и неправильное, чтобы вызвать это.

+0

Получаете ли вы эту ошибку все время или иногда она работает правильно? –

+1

На этом этапе мы больше не можем заставить его работать, каждый раз, когда мы вызываем что-то, что нуждается в каталоге temp * boom *. Раньше, как только процесс проявлял такое поведение, не было возврата, но перезапускали время от времени его работа (для жизни процесса). –

ответ

0

Возможно, это не тот точный ответ, который вы ищете, но это может помочь вам в правильном направлении.

У меня были подобные проблемы некоторое время назад, используя Azure App Services. Я обнаружил, что доступ к локальной файловой системе был несколько проблематичным. Иногда это работало нормально, а иногда - нет.

В конце концов, я обнаружил, что, когда создается служба приложений Azure, она не всегда использует одинаковые буквы дисков для системы, стоящей за ней. В некоторых случаях это может привести к ошибочным ошибкам среды. Они «думают», что они настроены правильно, но это не всегда так.

Генерация имени файла temp будет использовать эту переменную среды для пути, и если она установлена ​​на C: но вместо этого на машине есть диск D: если произойдет сбой. Дисковод C: не существует, поэтому путь к временному файлу также не существует.

Чтобы определить, если это проблема, вам необходимо включить RDP, чтобы вы могли войти в нее напрямую. https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-role-enable-remote-desktop

Это единственный способ, которым я смог в конечном итоге понять это.

+0

Он использует Azure App Service, а не облачные сервисы ... –

+0

О, это моя вина. Когда я столкнулся с этим, я использовал роль «Рабочий». Я не помню, были ли приложения App в то время отдельной вещью, и я предположил, что они были одинаковыми. Я просто указывал на нечто подобное, с которым я столкнулся, что могло бы привести в правильном направлении. Спасибо за исправление! –

+0

Справа - веб-роли/роли рабочей группы изменит буквы дисков. Веб-приложения просто будут использовать 'd: \ home \ ...'. –

0

Если вы откроете экземпляр Kudu для своего веб-приложения App App, вы сможете увидеть, что локальная папка Temp находится на управляемой виртуальной машине под ней. Вы можете получить доступ к Kudu, перейдя в «Расширенные инструменты» на blade-сервере App Service на портале Azure или перейдя по домену https: // {имя веб-приложения} .scm.azurewebsites.net для вашего веб-приложения.

Однажды в Куду нажмите «Окружающая среда» в верхней навигационной панели. Каталог Temp обычно D: \ local \ Temp, и этот путь хранится в переменной окружения «TEMP», доступной для вашего веб-приложения.

+0

Действительно, как и ожидалось, существует временная директория - проблема в том, что вызовы, сделанные моим приложением, которые в рамках обложек пытаются разрешить временный каталог, не могут этого сделать (или не имеют доступа к каталогу). –

Смежные вопросы