diff --git a/products/ASC.Files/Core/Helpers/DocumentService.cs b/products/ASC.Files/Core/Helpers/DocumentService.cs
index 2bda91fade..adb0c8a4ef 100644
--- a/products/ASC.Files/Core/Helpers/DocumentService.cs
+++ b/products/ASC.Files/Core/Helpers/DocumentService.cs
@@ -29,21 +29,10 @@
namespace ASC.Files.Core.Helpers;
-///
-/// Class service connector
-///
public static class DocumentService
{
- ///
- /// Timeout to request conversion
- ///
- public static readonly int Timeout = 120000;
- //public static int Timeout = Convert.ToInt32(ConfigurationManagerExtension.AppSettings["files.docservice.timeout"] ?? "120000");
-
- ///
- /// Number of tries request conversion
- ///
- public static readonly int MaxTry = 3;
+ private const int Timeout = 120000;
+
private static readonly JsonSerializerOptions _bodySettings = new()
{
@@ -246,8 +235,7 @@ public static async Task CommandRequestAsync(FileUtility fileUt
Method = HttpMethod.Post
};
- var httpClient = clientFactory.CreateClient();
- httpClient.Timeout = TimeSpan.FromMilliseconds(commandTimeout);
+ var httpClient = clientFactory.CreateClient(nameof(DocumentService));
var body = new CommandBody
{
@@ -284,12 +272,20 @@ public static async Task CommandRequestAsync(FileUtility fileUt
var bodyString = JsonSerializer.Serialize(body, _bodySettings);
request.Content = new StringContent(bodyString, Encoding.UTF8, "application/json");
-
string dataResponse;
- using (var response = await httpClient.SendAsync(request, cancellationTokenSource.Token))
+ try
{
+ using var response = await httpClient.SendAsync(request, cancellationTokenSource.Token);
dataResponse = await response.Content.ReadAsStringAsync(cancellationTokenSource.Token);
}
+ catch (HttpRequestException e) when (e.HttpRequestError == HttpRequestError.NameResolutionError)
+ {
+ return new CommandResponse
+ {
+ Error = ErrorTypes.UnknownError,
+ ErrorString = e.Message
+ };
+ }
try
{
@@ -340,8 +336,7 @@ public static async Task CommandRequestAsync(FileUtility fileUt
Method = HttpMethod.Post
};
- var httpClient = clientFactory.CreateClient();
- httpClient.Timeout = TimeSpan.FromMilliseconds(Timeout);
+ var httpClient = clientFactory.CreateClient(nameof(DocumentService));
var body = new BuilderBody
{
@@ -722,19 +717,17 @@ private static (int ResultPercent, string responseuri, string convertedFileType)
public static class DocumentServiceHttpClientExtension
{
- public static void AddDocumentServiceHttpClient(this IServiceCollection services)
+ public static void AddDocumentServiceHttpClient(this IServiceCollection services, IConfiguration configuration)
{
+
services.AddHttpClient(nameof(DocumentService))
- .SetHandlerLifetime(TimeSpan.FromMilliseconds(DocumentService.Timeout))
+ .SetHandlerLifetime(TimeSpan.FromMilliseconds(Convert.ToInt32(configuration["files:docservice:timeout"] ?? "5000")))
.AddPolicyHandler((_, _) =>
HttpPolicyExtensions
- .HandleTransientHttpError()
- .OrResult(response =>
- {
- return response.IsSuccessStatusCode
- ? false
- : throw new HttpRequestException($"Response status code: {response.StatusCode}", null, response.StatusCode);
- })
- .WaitAndRetryAsync(MaxTry, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))));
+ .HandleTransientHttpError()
+ .OrResult(response => response.IsSuccessStatusCode
+ ? false
+ : throw new HttpRequestException($"Response status code: {response.StatusCode}", null, response.StatusCode))
+ .WaitAndRetryAsync(Convert.ToInt32(configuration["files:docservice:try"] ?? "3"), retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))));
}
}
\ No newline at end of file
diff --git a/products/ASC.Files/Server/Startup.cs b/products/ASC.Files/Server/Startup.cs
index b9a18760c5..f89278120c 100644
--- a/products/ASC.Files/Server/Startup.cs
+++ b/products/ASC.Files/Server/Startup.cs
@@ -56,7 +56,7 @@ public override async Task ConfigureServices(IServiceCollection services)
services.AddBaseDbContextPool();
services.RegisterQuotaFeature();
services.AddScoped();
- services.AddDocumentServiceHttpClient();
+ services.AddDocumentServiceHttpClient(_configuration);
services.AddStartupTask()
.TryAddSingleton(services);
diff --git a/products/ASC.Files/Service/Startup.cs b/products/ASC.Files/Service/Startup.cs
index 2e6b0d523a..8de6fbfbd3 100644
--- a/products/ASC.Files/Service/Startup.cs
+++ b/products/ASC.Files/Service/Startup.cs
@@ -74,6 +74,6 @@ public override async Task ConfigureServices(IServiceCollection services)
services.AddSingleton(Channel.CreateUnbounded>());
services.AddSingleton(svc => svc.GetRequiredService>>().Reader);
services.AddSingleton(svc => svc.GetRequiredService>>().Writer);
- services.AddDocumentServiceHttpClient();
+ services.AddDocumentServiceHttpClient(Configuration);
}
}
\ No newline at end of file
diff --git a/web/ASC.Web.Api/Startup.cs b/web/ASC.Web.Api/Startup.cs
index beec29489b..a3d5072b21 100644
--- a/web/ASC.Web.Api/Startup.cs
+++ b/web/ASC.Web.Api/Startup.cs
@@ -57,6 +57,7 @@ public override async Task ConfigureServices(IServiceCollection services)
.TryAddSingleton(services);
services.AddActivePassiveHostedService(_configuration, "WebApiNotifySchedulerService");
+ services.AddDocumentServiceHttpClient(_configuration);
}
public override void Configure(IApplicationBuilder app, IWebHostEnvironment env)