Ich bekomme mehrere generische gdi + Fehlercode zu Zeiten, wenn viele Anfragen kommen. Die meisten Male gibt es keine Fehler auf diesem Teil tho.Generic GDI + Fehler aufgetreten QR-Code
Ich glaube, dass der Fehler in diesem Teil sein
string guidString = Guid.NewGuid().ToString();
string dateNowString = DateTime.Now.ToString("ddMMyyyHHmmssfff");
var localFilePath = @"c:\temp\" + dateNowString + ".png";
//Create QrCode on local
QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.M);
QrCode qrCode = qrEncoder.Encode(pass.Barcode);
Renderer renderer = new Renderer(5, Brushes.Black, Brushes.White);
renderer.CreateImageFile(qrCode.Matrix, localFilePath, ImageFormat.Png);
/*using (MemoryStream ms = new MemoryStream())
{
using (FileStream stream = new FileStream(localFilePath, FileMode.Create))
{
renderer.WriteToStream(qrCode.Matrix, ms, ImageFormat.Png);
}
}*/
//Upload locally saved QR image to AWS S3
string bucketName = ConfigurationManager.AppSettings["bucketName"].ToString();
var s3Client = new S3(bucketName, guidString);
string key = guidString + dateNowString + ConfigurationManager.AppSettings["FileFormatExtension"].ToString();
qrCodeUrl = s3Client.UploadFile(localFilePath, key);
//Delete QrCode image on local
if (File.Exists(localFilePath))
{
File.Delete(localFilePath);
}
//Save QrCode Url to BoardingPass Table
pass.QrCodeUrl = qrCodeUrl;
data.SaveChanges();
Dies wird durch mehrere Fäden (1 Aufruf = 1 Thread aufgerufen wird, ich eine Aufgabe am Anwendung dieser Threads gleichzeitig ausgeführt werden, kann ein Thread dieser Teil nennen mehr als einmal)
hier ist der Stacktrace
at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) at Gma.QrCodeNet.Encoding.Windows.Controls.Renderer.CreateImageFile(BitMatrix matrix, String fileName, ImageFormat imageFormat) at <redacted>API.Helpers.BoardingPassHelper.GenerateQRCode(BoardingPassRequest request) in <redacted>.API\Helpers\BoardingPassHelper.cs:line 972 at BCSBoardingPass.API.Controllers.API.BoardingPassController.GenerateMultiPaxBoardingPass(MBPRequest mbpRequest, Int32 requestIndex, Boolean isMbp) in <redacted>controllers\API\BoardingPassController.cs:line 615
Könnte es sein, dass zwei Threads versuchen, die gleiche Datei zu erstellen? Versuchen Sie, den Dateinamen zu ändern, indem Sie anstelle eines Datumssuffixes einen laufenden Zähler verwenden, nur um ihn zu testen. –