Beispiel #1
0
        public static void ProcessedRequestHandler(object source, DataServiceProcessingPipelineEventArgs args)
        {
            TraceHelper.Current.DebugMessage("QuotaSystem.ProcessedRequestHandler entered");
            if (args != null)
            {
                args.OperationContext.Trace();
            }
            UserContext userContext = new UserContext(CurrentRequestHelper.Identity, CurrentRequestHelper.Certificate);

            if (DataServiceController.Current.IsRequestProcessingStarted(userContext))
            {
                try
                {
                    DataServiceController.Current.SetRequestProcessingState(userContext, false);
                    UserDataCache.UserDataEnvelope userDataEnvelope = DataServiceController.Current.UserDataCache.Get(userContext);
                    using (userDataEnvelope)
                    {
                        userDataEnvelope.Data.Usage.RequestProcessed();
                    }
                    TraceHelper.Current.RequestProcessingEnd();
                }
                finally
                {
                    DataServiceController.Current.UserDataCache.TryUnlockKey(userContext);
                    TraceHelper.Current.DebugMessage("QuotaSystem.ProcessedRequestHandler exited");
                }
                return;
            }
            else
            {
                TraceHelper.Current.DebugMessage("QuotaSystem.ProcessedRequestHandler IsRequestProcessingStarted returned false");
                return;
            }
        }
Beispiel #2
0
        public static void ProcessedRequestHandler(object sender, DataServiceProcessingPipelineEventArgs e)
        {
            ProcessedRequestInvokeCount++;
            e.OperationContext.ResponseHeaders["ProcessedRequestInvokeCount"] = ProcessedRequestInvokeCount.ToString();

            if (CheckInvokeCount)
            {
                Assert.AreEqual(1, ProcessingRequestInvokeCount);

                if (!e.OperationContext.IsBatchRequest)
                {
                    if (e.OperationContext.RequestMethod == "GET")
                    {
                        Assert.AreEqual(0, ProcessingChangesetInvokeCount);
                        Assert.AreEqual(0, ProcessedChangesetInvokeCount);
                    }
                    else
                    {
                        Assert.AreEqual(1, ProcessingChangesetInvokeCount);
                        Assert.AreEqual(1, ProcessedChangesetInvokeCount);
                    }
                }

                Assert.AreEqual(1, ProcessedRequestInvokeCount);
            }
        }
 protected virtual void OnProcessedRequest(object sender, DataServiceProcessingPipelineEventArgs e)
 {
     // Commit UnitOfWork, this should not be call when have exception
     if (this.transaction != null)
     {
         this.transaction.Commit();
     }
 }
Beispiel #4
0
 public void ProcessedRequest(object sender, DataServiceProcessingPipelineEventArgs e)
 {
     this.Parent.Add("DataServiceProcessingPipeline.ProcessedRequest",
                     "sender", sender.GetType().Name,
                     "AbsoluteRequestUri", e.OperationContext.AbsoluteRequestUri.ToString(),
                     "AbsoluteServiceUri", e.OperationContext.AbsoluteServiceUri.ToString(),
                     "IsBatchRequest", e.OperationContext.IsBatchRequest.ToString(),
                     "RequestMethod", e.OperationContext.RequestMethod.ToUpperInvariant());
     // TODO: headers?
 }
Beispiel #5
0
        void ProcessingPipeline_ProcessingRequest(object sender, DataServiceProcessingPipelineEventArgs e)
        {
            HttpRequest req = HttpContext.Current.Request;

            if (req.HttpMethod == "POST" && req.PathInfo == @"/GetCustomerNames")
            {
                StreamReader reader = new StreamReader(req.InputStream);
                string       body   = reader.ReadToEnd();
            }
        }
Beispiel #6
0
         void ProcessingPipeline_ProcessingRequest(object sender, DataServiceProcessingPipelineEventArgs e)
         {
             if (!HttpContext.Current.Request.ClientCertificate.IsPresent)
             {
                 throw new DataServiceException(401, "401 Unauthorized");
             }
 
             var cert = new X509Certificate2(HttpContext.Current.Request.ClientCertificate.Certificate);
             if (!ValidateCertificate(cert))
             {
                 throw new DataServiceException(401, "401 Unauthorized");
             }
  
             var identity = new GenericIdentity(cert.Subject, "ClientCertificate");
             var principal = new GenericPrincipal(identity, null);
             Thread.CurrentPrincipal = principal;
             HttpContext.Current.User = principal;
         }
Beispiel #7
0
        public static void ProcessingRequestHandler(object source, DataServiceProcessingPipelineEventArgs args)
        {
            UserData userDatum = null;

            TraceHelper.Current.DebugMessage("QuotaSystem.ProcessingRequestHandler entered");
            if (args != null && args.OperationContext != null)
            {
                TraceHelper.CorrelateWithClientRequestId(args.OperationContext);
            }
            UserContext userContext = new UserContext(CurrentRequestHelper.Identity, CurrentRequestHelper.Certificate);

            if (!DataServiceController.Current.IsRequestProcessingStarted(userContext))
            {
                UserDataCache.UserDataEnvelope userDataEnvelope = DataServiceController.Current.UserDataCache.Get(userContext);
                using (userDataEnvelope)
                {
                    UserQuota userQuota = DataServiceController.Current.GetUserQuota(userContext);
                    if (args != null)
                    {
                        Guid activityId = EtwActivity.GetActivityId();
                        args.OperationContext.ResponseHeaders.Add("request-id", activityId.ToString());
                    }
                    if (userDataEnvelope.Data.Usage.QuotaCheckAndUpdate(userContext, userQuota))
                    {
                        DataServiceController.Current.UserDataCache.TryLockKey(userContext, out userDatum);
                    }
                    else
                    {
                        throw new DataServiceException(0x193, ExceptionHelpers.GetDataServiceExceptionMessage(HttpStatusCode.Forbidden, Resources.UserQuotaExceeded, new object[0]));
                    }
                }
                DataServiceController.Current.SetRequestProcessingState(userContext, true);
                TraceHelper.Current.RequestProcessingStart();
                DataServiceController.Current.UserDataCache.Trace();
                TraceHelper.Current.DebugMessage("QuotaSystem.ProcessingRequestHandler exited");
                return;
            }
            else
            {
                TraceHelper.Current.DebugMessage("QuotaSystem.ProcessingRequestHandler IsRequestProcessingStarted returned true");
                return;
            }
        }
Beispiel #8
0
        /// <summary>
        /// Limits allowable paths to /ValidationJobs(id), /ValidationJobs(id)/TestResults, /ValidationJobs(id)/PayloadLines
        /// This path scoping is done such that users cannot query on information not relevant to the job they submitted.
        /// Finally, this disallows use of $filter for now to limit cost per request
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void ProcessingPipeline_ProcessingRequest(object sender, DataServiceProcessingPipelineEventArgs e)
        {
            int i;

            for (i = 0; i < e.OperationContext.AbsoluteRequestUri.Segments.Length; i++)
            {
                if (e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith(ServiceName, StringComparison.OrdinalIgnoreCase))
                {
                    break;
                }
            }

            // i at index of segment immediately after the service root segment
            i++;
            if (i < e.OperationContext.AbsoluteRequestUri.Segments.Length &&
                !e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith("ExtValidationJobs", StringComparison.OrdinalIgnoreCase) &&
                !e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith("validationjobs", StringComparison.OrdinalIgnoreCase) &&
                !e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith("$metadata", StringComparison.OrdinalIgnoreCase) &&
                !e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith("UriValidationJobs", StringComparison.OrdinalIgnoreCase) &&
                !e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith("ConformanceRerunJob", StringComparison.OrdinalIgnoreCase) &&
                !e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith("SimpleRerunJob", StringComparison.OrdinalIgnoreCase) &&
                !e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith("TestResults", StringComparison.OrdinalIgnoreCase) &&
                !e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith("Records", StringComparison.OrdinalIgnoreCase) &&
                !e.OperationContext.AbsoluteRequestUri.Segments[i].ToUpperInvariant().StartsWith("Reload", StringComparison.OrdinalIgnoreCase)
                )
            {
                throw new DataServiceException(400, "Test result and payload line sets must be accessed via an associated validation job");
            }

            // for now limiting complexity of queries the service is willing to run
            if (e.OperationContext.AbsoluteRequestUri.Query != null &&
                e.OperationContext.AbsoluteRequestUri.Query.Contains("$filter"))
            {
                throw new DataServiceException(400, "This service does not currently support $filter requests");
            }
        }
 protected virtual void OnProcessingRequest(object sender, DataServiceProcessingPipelineEventArgs dataServiceProcessingPipelineEventArgs)
 {
     // Begin UnitOfWork
     this.transaction = this.personContext.Database.BeginTransaction();
 }
Beispiel #10
0
 private static void APICallLog_ProcessedRequest(object sender, DataServiceProcessingPipelineEventArgs e)
 {
     APICallLog.Current.ProcessingPipeline.ProcessedRequest(sender, e);
     APICallLog.Current.Pop();
 }
 void ProcessingPipeline_ProcessingRequest(object sender, DataServiceProcessingPipelineEventArgs e)
 {
     var name = HttpContext.Current.User.Identity.Name;
     //if (!HttpContext.Current.Request.IsAuthenticated)
     //    throw new DataServiceException(401, "401 Unauthorized");
 }
Beispiel #12
0
 protected static void ProcessedRequestListener(object caller, DataServiceProcessingPipelineEventArgs args)
 {
     ModifyHeadersScenarioTests.OverwriteHeaders(args.OperationContext);
 }