Проблемы с произвольным доступом к файлам IIS - PullRequest
0 голосов
/ 02 июля 2019

У меня есть два способа получения изображений на веб-сайте ASP.NET MVC. Если я ищу изображения на диске с помощью Проводника, изображение там, но в моем файле журнала много ошибок, говорящих о том, что каждое изображение не существует.

Иногда это работает без проблем, но другие, мое приложение не может найти изображение. Если я перезагружаю свой сайт IIS или перезагружаю компьютер, он работает без каких-либо проблем, но имеет случайное поведение, которое я должен разрешить.

Два пути, где расположены изображения:

"C:\inetpub\wwwroot\Test_Application\Content\Images" (Inside site public dir)
"C:\Test_Application\images" (Configured on IIS as a virtual directory)

Это устройство Windows 10 Pro, на котором запущены IIS, а пул приложений, на котором работает сайт, имеет учетную запись Windows с правами администратора в качестве удостоверения, поскольку мне нужно подключиться к SQL Server LocalDb.

Функция записи сообщения в журнал:

private bool Func_GetImages(RecordModel record)
{
    bool bResult = false;
    List<string> imagesFound = new List<string>();
    string sImageMaskName = string.Empty;
    string sAbsoluteImgPath = string.Empty;
    string sSourceImgPath = string.Empty; //Path to img directory with year, month and day.
    string sTargetImgPath = string.Empty;
    try
    {
        Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Debug, "Func_GetImages", "Get Images: ",
        string.Format("Get images for record with GUID: {0}; Image Mask Name: {1}; Times for Images: {2}", record.GUID, record.imageMaskName,
        record.TimeBetweenColorImages));

        if (HttpContext.Current != null)
        {
            sAbsoluteImgPath = HttpContext.Current.Server.MapPath(Config.sImgDirectory);
            sTargetImgPath = HttpContext.Current.Server.MapPath("~/Content/Images/Processed");
        }
        else
        {
            sAbsoluteImgPath = string.Format("{0}/", AppDomain.CurrentDomain.BaseDirectory);
            sTargetImgPath = string.Format("{0}/", "~/Content/Images/Processed");
        }

        sSourceImgPath = Path.Combine(sAbsoluteImgPath, record.DetectionDatetime.Year.ToString(), record.DetectionDatetime.Month.ToString("D2"), record.DetectionDatetime.Day.ToString("D2"));
        Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Debug, "Func_GetImages", "Get Images: ",
        string.Format("Path to search for files: {0}", sSourceImgPath));

        sImageMaskName = record.imageMaskName;

        if (!Directory.Exists(sSourceImgPath))
        {
            Directory.CreateDirectory(sSourceImgPath);
        }

        //Try to get files with this search pattern
        imagesFound = Directory.GetFiles(sSourceImgPath, string.Format("{0}*", sImageMaskName)).ToList();

        if (imagesFound.Count > 0)
        {
            Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Debug, "Func_GetImages", "Get Images: Ok",
            string.Format("Number of images for record with GUID: {0} is {1}", record.GUID, imagesFound.Count.ToString()));

            //Create new image name
            DateTime dateCapture = record.DetectionDatetime;
            string sImageName = record.imageMaskName;

            //Check if day directory exists. If not, create it
            Func_CheckOrCreateImageDirectory(dateCapture);

            string sBaseDirectory = Path.Combine(sTargetImgPath, dateCapture.Year.ToString(), dateCapture.Month.ToString("D2"), dateCapture.Day.ToString("D2"));

            //Rename, add image header and copy blackWhiteImages
            Func_ProcessImages(sBaseDirectory, sImageMaskName, sImageName, detection.numPicturesColor, enum_ImagesType.COLOR, detection); 

        }
        else
        {
            Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Error, "Func_GetImages", "Get Images: Ko",
            string.Format("No images found for record with GUID: {0} and Image Mask Name: {1}", record.GUID, sImageMaskName));
        }

        bResult = true;
    }
    catch (Exception exception1)
    {
        Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Error, new StackTrace(exception1).GetFrame(0).GetMethod().Name, "GeneralException",
        "Source = " + exception1.Source.Replace("'", "''") + ", Message = " + exception1.Message.Replace("'", "''"));
    }

    return bResult;
}

Сообщение журнала, записанное при возникновении проблемы, находится в другом предложении, когда я проверяю, «imagesFound.Count> 0».

Это сообщение об ошибке, которое иногда появляется:

"No images found for record with GUID: 8689ffcd-46d2-4a25-ab57-edce11e45977 and Image Mask Name: 002475-20190702_070949_326".

Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...