GDI +中发生一般错误。仅在生产环境上发生。 (WebAPI)

时间:2019-02-15 18:26:45

标签: c# exception asp.net-web-api gdi+ zxing

我有一个接受工作ID字符串并使用ZXing库生成QRcode并通过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;
        }
    }

1 个答案:

答案 0 :(得分:0)

  

但是GDI异常会在生产环境中抛出,该环境可以正常工作一段时间,但要经过几个小时

是一个坏兆头。请注意,Microsoft explicitly marks GDI+ as unfit for servers

我看到的症状略有不同。当您挖掘该堆栈跟踪时,您可能会发现可怕的Operation completed successfully

我对您的QrCode库不熟悉,但是我切换到ImageSharp