2016-03-30 17 views
0

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 
+1

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. –

Antwort

1

wir diese Art von Zufallsfehler hatten die Version v 0.3 der Bibliothek, in einer Multi-Thread-Umgebung. Wir haben es nicht geschafft, dieses zufällige Verhalten zu beheben, aber wir haben festgestellt, dass wir den Fehler nicht mehr bekommen haben, seit wir das Bildformat von PNG auf JPEG umgestellt haben.

Verwandte Themen