public static GetTimeoutValue ( System.TimeSpan clientTimeout, System.TimeSpan requestTimeout ) : TimeSpan? | ||
clientTimeout | System.TimeSpan | |
requestTimeout | System.TimeSpan | |
return | TimeSpan? |
/// <summary> /// Creates the HttpWebRequest and configures the end point, content, user agent and proxy settings. /// </summary> /// <param name="asyncResult">The async request.</param> /// <returns>The web request that actually makes the call.</returns> protected virtual HttpWebRequest ConfigureWebRequest(AsyncResult asyncResult)//IRequest wrappedRequest, byte[] requestData) { IRequest wrappedRequest = asyncResult.Request; byte[] requestData = GetRequestData(asyncResult.Request); Uri url = ComposeUrl(wrappedRequest, wrappedRequest.Endpoint); HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; if (request != null) { if (asyncResult.Request.ContentStream != null) { request.Timeout = int.MaxValue; request.ReadWriteTimeout = int.MaxValue; request.AllowWriteStreamBuffering = false; } // Override the Timeout and ReadWriteTimeout values if set at the request or config level. // Public Timeout and ReadWriteTimeout properties are present on client config objects. var timeout = ClientConfig.GetTimeoutValue(this.Config.Timeout, wrappedRequest.OriginalRequest.TimeoutInternal); var readWriteTimeout = ClientConfig.GetTimeoutValue(this.Config.ReadWriteTimeout, wrappedRequest.OriginalRequest.ReadWriteTimeoutInternal); if (timeout != null) { request.Timeout = (int)timeout.Value.TotalMilliseconds; } if (readWriteTimeout != null) { request.ReadWriteTimeout = (int)readWriteTimeout.Value.TotalMilliseconds; } request.ServicePoint.ConnectionLimit = this.Config.ConnectionLimit; request.ServicePoint.UseNagleAlgorithm = this.Config.UseNagleAlgorithm; request.ServicePoint.MaxIdleTime = this.Config.MaxIdleTime; if (!string.IsNullOrEmpty(this.Config.ProxyHost) && this.Config.ProxyPort > 0) { WebProxy proxy = new WebProxy(this.Config.ProxyHost, this.Config.ProxyPort); asyncResult.Metrics.AddProperty(Metric.ProxyHost, this.Config.ProxyHost); request.Proxy = proxy; } if (request.Proxy != null && Config.ProxyCredentials != null) { request.Proxy.Credentials = Config.ProxyCredentials; } // Setting of these properties is moved to before signing //request.UserAgent = this.config.UserAgent; //request.ContentType = AWSSDKUtils.UrlEncodedContent; request.Method = wrappedRequest.HttpMethod; if (!wrappedRequest.UseQueryString && (request.Method == "POST" || request.Method == "PUT")) { if (wrappedRequest.ContentStream != null) { if (wrappedRequest.OriginalRequest.IncludeSHA256Header && !wrappedRequest.Headers.ContainsKey(HeaderKeys.XAmzContentSha256Header)) { request.Headers[HeaderKeys.XAmzContentSha256Header] = wrappedRequest.ComputeContentStreamHash(); } request.ContentLength = wrappedRequest.ContentStream.Length; } else { request.ContentLength = requestData.Length; } } else { string headerValue; if (wrappedRequest.Headers.TryGetValue(HeaderKeys.XAmzContentLengthHeader, out headerValue) && headerValue != null) { request.ContentLength = long.Parse(headerValue, CultureInfo.InvariantCulture); } } AddHeaders(request, wrappedRequest.Headers); if (asyncResult.Unmarshaller is JsonResponseUnmarshaller) { request.Accept = "application/json"; } request.ServicePoint.Expect100Continue = wrappedRequest.OriginalRequest.Expect100Continue; } return(request); }