Exemplo n.º 1
0
        protected ResultDownloadFileRequest InternalGetReport(RequestsCounterData requestsCounter)
        {
            //var jobs = BulkDataService.GetJobs();

            //BulkDataService.DeleteRecurringJob( ReportType );

            ResultInfoJobRequest jobRez = BulkDataService.DownloadJob(ReportType);
            var reportTypeString        = ReportType.ToString();

            requestsCounter.IncrementRequests("DownloadJob", reportTypeString);
            if (jobRez.HasError)
            {
                return(new ResultDownloadFileRequest(jobRez.Errors, jobRez.SubmittedDate));
            }

            var fileReferenceId = jobRez.FileReferenceId;
            var jobId           = jobRez.JobId;

            if (string.IsNullOrEmpty(fileReferenceId))
            {
                JobProfile job = BulkDataService.GetJob(jobId);
                requestsCounter.IncrementRequests("GetJob", reportTypeString);
                fileReferenceId = job.fileReferenceId;
            }
            var rez = FileTransferService.DownloadFile(jobId, fileReferenceId);

            requestsCounter.IncrementRequests("DownloadFile", reportTypeString);
            return(new ResultDownloadFileRequest(rez));
        }
Exemplo n.º 2
0
        public GetOrdersResponseType GetOrders(GetOrdersRequestType request, RequestsCounterData requestsCounter)
        {
            var details = string.Empty;

            if (request.NumberOfDaysSpecified)
            {
                details = string.Format("Num od Days: {0}", request.NumberOfDays);
            }
            else if (request.ModTimeFromSpecified)
            {
                details = string.Format("[ {0} - {1} ]", request.ModTimeFrom, request.ModTimeTo);
            }
            else if (request.CreateTimeFromSpecified)
            {
                details = string.Format("[ {0} - {1} ]", request.CreateTimeFrom, request.CreateTimeTo);
            }

            var response = base.GetServiceData(Service.GetOrders, request);

            requestsCounter.IncrementRequests("GetOrders", details);
            return(response);
        }
        private T DoServiceAction <T>(ITrapForThrottling trapForThrottling, string actionName, ActionAccessType access, RequestsCounterData requestCounter, Func <T> func, string details)
        {
            return(_WaitBeforeRetryController.Do(() =>
            {
                T response = default(T);

                trapForThrottling.Execute(new ActionInfo(actionName)
                {
                    Action = () =>
                    {
                        response = func();
                        requestCounter.IncrementRequests(actionName, details);
                    },
                    Access = access
                });

                return response;
            },
                                                 ex =>
            {
                if (ex != null)
                {
                    WriteLoggerHelper.Write(ex.Message, WriteLogType.Warning, null, ex);
                    Debug.WriteLine(ex);
                }

                if (ex is MarketplaceWebServiceProductsException)
                {
                    var prodEx = ex as MarketplaceWebServiceProductsException;
                    if (prodEx.StatusCode == HttpStatusCode.InternalServerError ||
                        prodEx.StatusCode == HttpStatusCode.ServiceUnavailable ||
                        string.Equals(prodEx.ErrorCode, _RequestThrottledString, StringComparison.InvariantCultureIgnoreCase))
                    {
                        return true;
                    }
                    else if (prodEx.StatusCode == HttpStatusCode.Unauthorized || prodEx.StatusCode == HttpStatusCode.BadRequest)
                    {
                        return false;
                    }
                }
                else if (ex is MarketplaceWebServiceOrdersException)
                {
                    var ordersEx = ex as MarketplaceWebServiceOrdersException;
                    if (ordersEx.StatusCode == HttpStatusCode.InternalServerError ||
                        ordersEx.StatusCode == HttpStatusCode.ServiceUnavailable ||
                        string.Equals(ordersEx.ErrorCode, _RequestThrottledString, StringComparison.InvariantCultureIgnoreCase))
                    {
                        return true;
                    }
                    else if (ordersEx.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        return false;
                    }
                }
                else if (ex is MarketplaceWebServiceException)
                {
                    var repEx = ex as MarketplaceWebServiceException;

                    if (repEx.StatusCode == HttpStatusCode.InternalServerError ||
                        repEx.StatusCode == HttpStatusCode.ServiceUnavailable ||
                        string.Equals(repEx.ErrorCode, _RequestThrottledString, StringComparison.InvariantCultureIgnoreCase))
                    {
                        return true;
                    }
                    else if (repEx.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        return false;
                    }
                }

                return true;
            }
                                                 ));
        }
        private TransactionSearchResponseType GetTransactions(DateTime startDate, DateTime endDate, PayPalRequestInfo reqInfo, RequestsCounterData requestsCounter, ref int daysFailedSoFar)
        {
            var request = new TransactionSearchReq {
                TransactionSearchRequest = new TransactionSearchRequestType {
                    Version          = Version,
                    StartDate        = startDate.ToUniversalTime(),
                    StatusSpecified  = true,
                    EndDate          = endDate.ToUniversalTime(),
                    EndDateSpecified = true,
                    DetailLevel      = new[] { DetailLevelCodeType.ReturnAll },
                    Status           = PaymentTransactionStatusCodeType.Success
                }
            };

            var userId = reqInfo.SecurityInfo.UserId;

            bool      needToRetry = true;
            Exception lastEx      = null;
            int       counter     = 0;

            while (needToRetry && counter <= CurrentValues.Instance.PayPalNumberOfRetries)
            {
                counter++;
                try {
                    var cred = CreateCredentials(reqInfo.SecurityInfo);
                    WriteLog(string.Format("PayPalService TransactionSearch Starting ({0})", userId));
                    var service = CreateService(reqInfo);
                    TransactionSearchResponseType resp = service.TransactionSearch(ref cred, request);

                    WriteLog(string.Format(
                                 "PayPalService TransactionSearch Request:\n{0}\nResponse:\n{1}",
                                 request.TransactionSearchRequest.ToLogStr(),
                                 resp.ToLogStr()
                                 ));

                    requestsCounter.IncrementRequests("TransactionSearch");
                    if (resp.Ack == AckCodeType.Failure)
                    {
                        throw ServiceRequestExceptionFactory.Create(new PayPalServiceResponceExceptionWrapper(resp));
                    }
                    WriteLog(string.Format("PayPalService TransactionSearch Ended ({0})", userId));

                    return(resp);
                } catch (Exception ex) {
                    lastEx = ex;
                    if (ex is IServiceRequestException)
                    {
                        var exFail = ex as IServiceRequestException;
                        needToRetry = _CommonInternalErrors.Any(exFail.HasErrorWithCode);
                    }

                    WriteLoggerHelper.Write(string.Format("PayPalService TransactionSearch Error ({0}): need to retry: {2} \n {1} ", userId, ex.Message, needToRetry), WriteLogType.Error, null, ex);
                }
            }

            WriteLoggerHelper.Write(string.Format("Failed fetching pay pal data from {0} to {1}", request.TransactionSearchRequest.StartDate, request.TransactionSearchRequest.EndDate), WriteLogType.Info, null, lastEx);

            if (daysFailedSoFar == CurrentValues.Instance.PayPalMaxAllowedFailures)
            {
                WriteLoggerHelper.Write(string.Format("Max number of failures:{0} exceeded.", daysFailedSoFar), WriteLogType.Error, null, lastEx);
                throw lastEx ?? new Exception();
            }

            daysFailedSoFar++;

            return(null);
        }