コード例 #1
0
ファイル: WorkerRole.cs プロジェクト: nomada2/azure-cloud-ocr
        private void ProcessOCRQueueMessage(CloudQueueMessage queueMessage)
        {
            var messageContent = queueMessage.AsString;

            Trace.TraceInformation("Processing OCR queue message: " + messageContent);

            OCRQueueMessage ocrMessage = null;
            Exception       exception  = null;

            try
            {
                ocrMessage = OCRQueueMessage.Parse(messageContent);
                string         imageFileName   = SaveImageBlobToLocalFile(ocrMessage.ImageBlobName);
                string         ocrTextFileName = PerformOCROnImageFile(imageFileName);
                string         ocrBlobName     = new FileInfo(ocrTextFileName).Name;
                CloudBlockBlob textBlob        = StoreRecognizedTextAsBlob(ocrTextFileName, ocrBlobName);
                CreateEmailTask(ocrMessage.JobID, textBlob.Name, ocrMessage.RecipientEmail);
                DeleteInputImage(ocrMessage.ImageBlobName);
                DeleteTemporaryFiles(imageFileName, ocrTextFileName);
            }
            catch (Exception ex)
            {
                Trace.TraceError("An error occurred while processing OCR message. Details: " + ex);
                exception = ex;

                if (ocrMessage == null)
                {
                    Trace.TraceError("Invalid message format. Deleting.");
                    AzureQueues.OCRQueue.DeleteMessage(queueMessage);
                    return;
                }
            }

            try
            {
                var job = AzureTables.OCRJobRepository.GetOCRJob(ocrMessage.JobID, ocrMessage.RecipientEmail);
                if (exception == null)
                {
                    job.IsCompleted  = true;
                    job.ErrorMessage = null;
                    AzureTables.OCRJobRepository.UpdateOCRJob(job);

                    Trace.TraceInformation("Message (JobID = {0}) successfully processed, deleting.", ocrMessage.JobID);
                    AzureQueues.OCRQueue.DeleteMessage(queueMessage);
                }
                else
                {
                    job.IsCompleted  = true;
                    job.ErrorMessage = exception.ToString();
                    AzureTables.OCRJobRepository.UpdateOCRJob(job);
                }
            }
            catch (Exception ex)
            {
                Trace.TraceError("Failed to update job status: " + ex);
            }
        }