示例#1
0
        public string UploadBlobWithRetry(Request request)
        {
            int blobId = request.Blob;
            //int remainingTries = Constants.MaxTrial;
            int    remainingTries = 10;
            var    exceptions     = new List <Exception>();
            string jsonRequest    = new JavaScriptSerializer().Serialize(request);

            while (remainingTries > 0)
            {
                try
                {
                    //Get blob storage account connection string randomly
                    var blob = new WEP.GSP.CacheManager.CacheManager().GetBlob(blobId);

                    //Upload gstn response to blobstorage
                    var blobStorage = new BlobStorage(blob.Connection,
                                                      Constants.GstnResponseContainer,
                                                      request.RequestToken,
                                                      new Dictionary <string, string>(),
                                                      blob.Id);

                    var blobPath = blobStorage.UploadBlob(request);

                    blobId = (blobId + 1) % 10;

                    //blobId += 1 % 10;

                    return(blobPath);
                }
                catch (TimeoutException e)
                {
                    exceptions.Add(e);
                }
                catch (CustomException cex)
                {
                    exceptions.Add(cex);
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                Thread.Sleep(Constants.DelayTrialms);

                remainingTries--;
                if (remainingTries == 0) //Circit breaker
                {
                    new RequestData().InsertBacklogRequest(request.RequestToken, request.Username, jsonRequest);
                }
            }

            throw new AggregateException("Could not process request. Will be re-attempt after some time", exceptions);
        }
        /// <summary>
        /// ProcessGSTR3BFileData
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        internal ServiceResponse <string> ProcessGSTR3BFileData(Request request)
        {
            #region Download from blob storage
            // ConfigData configData = new ConfigData();
            var blob = new WEP.GSP.CacheManager.CacheManager().GetBlob(request.Blob);

            var blobStorageRetry = new BlobWithRetry(blob.Connection, Constants.CotainerPayload
                                                     , request.BlobFile, new Dictionary <string, string>(), request.Blob);

            Attrbute attribute = blobStorageRetry.DownloadBlobRetry();
            #endregion

            //Serialize to string
            string jsonReqst = new JavaScriptSerializer().Serialize(request);

            //log to table storage  => P2 started
            TableStorage objTableStorage = new TableStorage(Constants.PartitionKey, Constants.RowKey
                                                            , request.RequestToken
                                                            , Constants.GSTNStageP2Table
                                                            , Constants.actualTime);

            Task.Factory.StartNew(() =>
                                  objTableStorage.InsertStageToTableStorage(blob.Keys, (int)WEP.GSP.Document.Stage.Response_Invoke_BEGIN));


            //Sends request GSTN
            request.Response = new GSTR3B(request.Clientid
                                          , request.Statecd
                                          , request.Username
                                          , request.Txn
                                          , request.AuthToken
                                          , request.ClientSecret
                                          , request.IpUsr
                                          , request.RetPeriod
                                          , request.Gstin
                                          , request.RequestToken
                                          , request.ApiAction)
                               .ExecuteGSTR3BFileDataWithRetry(attribute);

            request.ModifiedOn = System.DateTime.UtcNow.ToString();

            //Upload response to blob
            var gstnStorageRespBlob = CommonFunction.GetGstnRespBlob();

            var blobStorageGstn = new BlobStorage(gstnStorageRespBlob.Connection, Constants.GstnResponseContainer
                                                  , request.BlobFile, new Dictionary <string, string>(), gstnStorageRespBlob.Id);


            var results = JsonConvert.DeserializeObject <GstnResponse>(request.Response);


            var blobPath = blobStorageGstn.UploadBlob(results);


            results.reqtoken   = request.RequestToken;
            results.username   = request.Username;
            results.apiAction  = request.ApiAction;
            results.blobUrl    = blobPath;
            results.respBlobId = gstnStorageRespBlob.Id;

            //save response blob url to database table
            new RequestData().InsertResponseLog(results);

            //Pipeline Handler

            //log to table storage  => P2 end
            Task.Factory.StartNew(() =>
                                  objTableStorage.InsertStageToTableStorage(blob.Keys, (int)WEP.GSP.Document.Stage.Response_Invoke_SUCCESS));

            var respone = new ServiceResponse <string> {
                ResponseObject = request.Response, IsError = false
            };
            return(respone);
        }