HttpTransferClient
using System;
using System.ComponentModel.Composition;
using System.Diagnostics.CodeAnalysis;
using System.Threading;
using System.Threading.Tasks;
namespace Relativity.Transfer.Http
{
[TransferClientMetadata(Attributes = (TransferClientAttributes.Http | TransferClientAttributes.Slow), Client = WellKnownTransferClient.Http, Company = "kCura Corporation", Copyright = "Copyright © kCura Corp 2017", Description = "The document repository is accessed through the Relativity web service API over standard HTTP. This is the slowest of all methods, but is always available.", Id = "18F9E382-288C-4B6D-8AE8-FBA4D88CD841", DisplayName = "Web", Name = "Http", Version = "1.0")]
[Export(typeof(ITransferClient))]
internal sealed class HttpTransferClient : TransferClientBase
{
internal const int HttpMaxSupportedPathLength = 222;
internal const int HttpTransferFileNameLength = 36;
internal const string Description = "The document repository is accessed through the Relativity web service API over standard HTTP. This is the slowest of all methods, but is always available.";
[SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily", Justification = "This is a MEF only requirement.")]
[ImportingConstructor]
public HttpTransferClient([Import("RelativityConnectionInfo")] RelativityConnectionInfo connectionInfo, [Import("Logger")] ITransferLog log, [Import("ClientConfiguration")] ClientConfiguration configuration)
: this(connectionInfo, new WorkspaceService(connectionInfo, log, configuration.MaxHttpRetryAttempts, configuration.HttpTimeoutSeconds), log, configuration)
{
}
public HttpTransferClient(RelativityConnectionInfo connectionInfo, IWorkspaceService workspaceService, ITransferLog log, ClientConfiguration configuration)
: base(connectionInfo, configuration, workspaceService, log, new Guid("18F9E382-288C-4B6D-8AE8-FBA4D88CD841"), WellKnownTransferClient.Http, "Http", "Web")
{
base.ClientLimits.MaxClientSupportedPathLength = 222;
base.ClientLimits.TransferFileNameLength = 36;
}
protected override async Task<ITransferJob> OnCreateJobAsync(ITransferRequest request, CancellationToken token)
{
HttpClientConfiguration configuration = (Configuration as HttpClientConfiguration) ?? new HttpClientConfiguration(Configuration);
ITransferJobService transferJobService = CreateTransferJobService(request, configuration, token);
SoapFileTransferService fileTransferService = new SoapFileTransferService(ConnectionInfo, Workspace, configuration, FileSystemService, Log);
HttpTransferCommand command = new HttpTransferCommand(Log, request, transferJobService, FileSystemService, configuration, fileTransferService);
TransferEngineJob job = new TransferEngineJob(Log, request, transferJobService, configuration, CreateRelativityServiceFactory(), command);
if (ClientLimits.MaxClientSupportedPathLength.HasValue)
job.ClientMaxSupportedPathLength = ClientLimits.MaxClientSupportedPathLength.Value;
if (ClientLimits.TransferFileNameLength.HasValue)
job.ClientTransferFileNameLength = ClientLimits.TransferFileNameLength.Value;
await job.StartAsync(token).ConfigureAwait(false);
return job;
}
protected override IPathEnumerator OnCreateLocalPathEnumerator()
{
return new LocalPathEnumerator(base.FileSystemService, base.Log, base.ClientLimits);
}
protected override Task<ISupportCheckResult> OnSupportCheckAsync(CancellationToken token)
{
return Task.FromResult((ISupportCheckResult)new SupportCheckResult {
IsSupported = true
});
}
protected override async Task<IConnectionCheckResult> OnExecConnectionCheckAsync(DiagnosticsContext context, CancellationToken token)
{
using (HttpConnectionService service = new HttpConnectionService(ConnectionInfo, Workspace, Configuration, FileSystemService, Log, context))
return await service.ExecConnectionCheckAsync(token).ConfigureAwait(false);
}
}
}