コード例 #1
0
        private static void ProcessStartOfRequest <T>(ExecutionState <T> executionState)
        {
            // 1. Build request
            executionState.Req = executionState.RestCMD.BuildRequestDelegate(executionState.Cmd.Uri, executionState.Cmd.Builder, executionState.Cmd.ServerTimeoutInSeconds, executionState.OperationContext);

            // User Headers
            Executor.ApplyUserHeaders(executionState);

            executionState.CancelDelegate = executionState.Req.Abort;

            // 2. Set Headers
            if (executionState.RestCMD.SetHeaders != null)
            {
                executionState.RestCMD.SetHeaders(executionState.Req, executionState.OperationContext);
            }

            if (executionState.RestCMD.SendStream != null)
            {
                CommonUtils.ApplyRequestOptimizations(executionState.Req, executionState.RestCMD.SendStream.Length - executionState.RestCMD.SendStream.Position);
            }
            else
            {
                CommonUtils.ApplyRequestOptimizations(executionState.Req, -1);
            }

            Executor.FireSendingRequest(executionState);

            // 3. Sign Request
            if (executionState.RestCMD.SignRequest != null)
            {
                executionState.RestCMD.SignRequest(executionState.Req, executionState.OperationContext);
            }

            // 4. Set timeout (this is actually not honored by asynchronous requests)
            executionState.Req.Timeout = executionState.RemainingTimeout;
        }
コード例 #2
0
        /// <summary>
        /// Callback on DataContext object sending request.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="System.Data.Services.Client.SendingRequestEventArgs"/> instance containing the event data.</param>
        private void TableServiceContext_SendingRequest(object sender, SendingRequestEventArgs e)
        {
            HttpWebRequest request = e.Request as HttpWebRequest;

            // Check timeout
            int timeoutDex = request.RequestUri.Query.LastIndexOf("&timeout=", System.StringComparison.Ordinal);

            if (timeoutDex > 0)
            {
                timeoutDex += 9; // Magic number -> length of "&timeout="
                int    endDex        = request.RequestUri.Query.IndexOf('&', timeoutDex);
                string timeoutString = endDex > 0
                                           ? request.RequestUri.Query.Substring(timeoutDex, endDex - timeoutDex)
                                           : request.RequestUri.Query.Substring(timeoutDex);

                int result = -1;
                int.TryParse(timeoutString, out result);
                if (result > 0)
                {
                    request.Timeout = result * 1000; // Convert to ms
                }
            }

            // Sign request
            if (this.ServiceClient.Credentials.IsSharedKey)
            {
                this.ServiceClient.AuthenticationHandler.SignRequest(request, null /* operationContext */);
            }
            else if (this.ServiceClient.Credentials.IsSAS)
            {
                Uri transformedUri = this.ServiceClient.Credentials.TransformUri(request.RequestUri);

                // Recreate the request
                HttpWebRequest newRequest = WebRequest.Create(transformedUri) as HttpWebRequest;
                TableUtilities.CopyRequestData(newRequest, request);
                e.Request = newRequest;
                request   = newRequest;
            }

            lock (this.cancellationLock)
            {
                if (this.cancellationRequested)
                {
                    throw new OperationCanceledException(SR.OperationCanceled);
                }

                this.currentRequest = request;
            }

            // SAS will be handled directly by the queries themselves prior to transformation
            request.Headers.Add(
                Constants.HeaderConstants.StorageVersionHeader,
                Constants.HeaderConstants.TargetStorageVersion);

            CommonUtils.ApplyRequestOptimizations(request, -1);

            if (this.sendingSignedRequestAction != null)
            {
                this.sendingSignedRequestAction(request);
            }
        }