В GDI + произошла общая ошибка.Происходит только в производственной среде.(WebAPI) - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть функция, которая принимает строку с рабочим идентификатором, генерирует QR-код с использованием библиотеки ZXing и сохраняет изображение на диск с помощью метода Bitmap.save (). Проблема отсутствует на моем локальном компьютере, и все работает нормальноно исключение GDI генерируется в производственной среде, которая работает нормально некоторое время, но через несколько часов или иногда через день, и генерируется пустой файл, а исключение разрешается только путем повторного использования пула приложений.Я перепробовал все, что смог найти, от проверки прав доступа к пути к файлу до анализа памяти, используя растровое изображение, но, похоже, ничего не работает.

 public QRCodeModel GenerateQRCode(QRCodeModel obj, UserProfile profile)
    {
        try
        {
            string base64Image = "";
            var writer = new BarcodeWriter();
            writer.Format = BarcodeFormat.QR_CODE;
            writer.Options.Height = 70;
            writer.Options.Width = 70;
            writer.Options.Margin = 0;

            var result = writer.Write(obj.WORK_ID.ToString());

            if (!Directory.Exists(obj.AbsolutePath))
            {
                Directory.CreateDirectory(obj.AbsolutePath);
            }

            using (var bitmap = new Bitmap(result))
                {
                //bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                //base64Image = Convert.ToBase64String(ms.GetBuffer()); //Get Base64
                string curtime=obj.AbsolutePath+obj.WORK_ID+ DateTime.Now.Ticks.ToString() + ".png";
                bitmap.Save(curtime, System.Drawing.Imaging.ImageFormat.Png);
                base64Image = Convert.ToBase64String(File.ReadAllBytes(curtime)); //Get Base64
            }
            //}
            string src = "data:image/png;base64," + base64Image;
            string encodedString = HttpUtility.UrlEncode(src);
            obj.ENCODED_IMAGE_BYTES = encodedString;
            return obj;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...