소스 검색

adjust http request caching

Luke Pulverenti 9 년 전
부모
커밋
788d302e41
1개의 변경된 파일11개의 추가작업 그리고 56개의 파일을 삭제
  1. 11 56
      MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs

+ 11 - 56
MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs

@@ -164,22 +164,9 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
                 }
                 }
             }
             }
 
 
-            //request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback;
-
             return request;
             return request;
         }
         }
 
 
-        private static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
-        {
-            // Prefer local ipv4
-            if (remoteEndPoint.AddressFamily == AddressFamily.InterNetworkV6)
-            {
-                return new IPEndPoint(IPAddress.IPv6Any, 0);
-            }
-
-            return new IPEndPoint(IPAddress.Any, 0);
-        }
-
         private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options)
         private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options)
         {
         {
             foreach (var header in options.RequestHeaders.ToList())
             foreach (var header in options.RequestHeaders.ToList())
@@ -199,20 +186,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
             }
             }
         }
         }
 
 
-        /// <summary>
-        /// The _semaphoreLocks
-        /// </summary>
-        private readonly ConcurrentDictionary<string, SemaphoreSlim> _semaphoreLocks = new ConcurrentDictionary<string, SemaphoreSlim>(StringComparer.OrdinalIgnoreCase);
-        /// <summary>
-        /// Gets the lock.
-        /// </summary>
-        /// <param name="url">The filename.</param>
-        /// <returns>System.Object.</returns>
-        private SemaphoreSlim GetLock(string url)
-        {
-            return _semaphoreLocks.GetOrAdd(url, key => new SemaphoreSlim(1, 1));
-        }
-
         /// <summary>
         /// <summary>
         /// Gets the response internal.
         /// Gets the response internal.
         /// </summary>
         /// </summary>
@@ -283,7 +256,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
 
 
             var url = options.Url;
             var url = options.Url;
             var urlHash = url.ToLower().GetMD5().ToString("N");
             var urlHash = url.ToLower().GetMD5().ToString("N");
-            
+
             var responseCachePath = Path.Combine(_appPaths.CachePath, "httpclient", urlHash);
             var responseCachePath = Path.Combine(_appPaths.CachePath, "httpclient", urlHash);
 
 
             response = await GetCachedResponse(responseCachePath, options.CacheLength, url).ConfigureAwait(false);
             response = await GetCachedResponse(responseCachePath, options.CacheLength, url).ConfigureAwait(false);
@@ -292,31 +265,14 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
                 return response;
                 return response;
             }
             }
 
 
-            var semaphore = GetLock(url);
-
-            await semaphore.WaitAsync(options.CancellationToken).ConfigureAwait(false);
+            response = await SendAsyncInternal(options, httpMethod).ConfigureAwait(false);
 
 
-            try
+            if (response.StatusCode == HttpStatusCode.OK)
             {
             {
-                response = await GetCachedResponse(responseCachePath, options.CacheLength, url).ConfigureAwait(false);
-                if (response != null)
-                {
-                    return response;
-                }
-
-                response = await SendAsyncInternal(options, httpMethod).ConfigureAwait(false);
-
-                if (response.StatusCode == HttpStatusCode.OK)
-                {
-                    await CacheResponse(response, responseCachePath).ConfigureAwait(false);
-                }
-
-                return response;
-            }
-            finally
-            {
-                semaphore.Release();
+                await CacheResponse(response, responseCachePath).ConfigureAwait(false);
             }
             }
+
+            return response;
         }
         }
 
 
         private async Task<HttpResponseInfo> GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url)
         private async Task<HttpResponseInfo> GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url)
@@ -361,13 +317,12 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
 
 
             using (var responseStream = response.Content)
             using (var responseStream = response.Content)
             {
             {
-                using (var fileStream = _fileSystem.GetFileStream(responseCachePath, FileMode.Create, FileAccess.Write, FileShare.Read, true))
-                {
-                    var memoryStream = new MemoryStream();
-
-                    await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false);
+                var memoryStream = new MemoryStream();
+                await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false);
+                memoryStream.Position = 0;
 
 
-                    memoryStream.Position = 0;
+                using (var fileStream = _fileSystem.GetFileStream(responseCachePath, FileMode.Create, FileAccess.Write, FileShare.None, true))
+                {
                     await memoryStream.CopyToAsync(fileStream).ConfigureAwait(false);
                     await memoryStream.CopyToAsync(fileStream).ConfigureAwait(false);
 
 
                     memoryStream.Position = 0;
                     memoryStream.Position = 0;