private static IEnumerable <CompositeRootCommandResponse> GetCommandResponses(WebRequest request, IEnumerable <CompositeRootCommandRequest> commands)
        {
            using (var requestContentStream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(commands))))
            {
                var returnedBytes = CompositeRootHttpServerTesterConnection.SendRequest(request, "application/json", requestContentStream, out string responseContentType, out string responseContentEncoding);

                try
                {
                    return(JsonConvert.DeserializeObject <CompositeRootCommandResponse[]>(Encoding.UTF8.GetString(returnedBytes)) as IEnumerable <CompositeRootCommandResponse>);
                }
                catch
                {
                    return(new CompositeRootCommandResponse[]
                    {
                        new CompositeRootCommandResponse
                        {
                            Success = true,
                            ReturnValue = returnedBytes,
                            ReturnValueContentType = responseContentType,
                            ReturnValueContentEncoding = responseContentEncoding
                        }
                    });
                }
            }
        }
        public static IEnumerable <CompositeRootCommandResponse> SendRequest(CompositeRootConfiguration configuration, string command, IEnumerable <FileInfo> files, string sessionToken)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            var commandPath = new Uri("file:///" + command);
            var formFields  = GetFormFields(commandPath);

            var returnedBytes = CompositeRootHttpServerTesterConnection.SendMultipartFormDataRequest(
                configuration.Endpoint + sessionToken + commandPath.AbsolutePath,
                files.Select(f => f.FullName).ToArray(),
                formFields, out string responseContentType, out string responseContentEncoding);

            try
            {
                return(JsonConvert.DeserializeObject <CompositeRootCommandResponse[]>(Encoding.UTF8.GetString(returnedBytes)) as IEnumerable <CompositeRootCommandResponse>);
            }
            catch
            {
                return(new CompositeRootCommandResponse[]
                {
                    new CompositeRootCommandResponse
                    {
                        Success = true,
                        ReturnValue = returnedBytes,
                        ReturnValueContentType = responseContentType,
                        ReturnValueContentEncoding = responseContentEncoding
                    }
                });
            }
        }
        public static IEnumerable <CompositeRootCommandResponse> SendRequest(WebRequest request, IEnumerable <FileInfo> files)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var formFields = GetFormFields(request.RequestUri);

            var returnedBytes = CompositeRootHttpServerTesterConnection.SendMultipartFormDataRequest(
                request,
                files.Select(f => f.FullName).ToArray(),
                formFields, out string responseContentType, out string responseContentEncoding);

            try
            {
                return(JsonConvert.DeserializeObject <CompositeRootCommandResponse[]>(Encoding.UTF8.GetString(returnedBytes)) as IEnumerable <CompositeRootCommandResponse>);
            }
            catch
            {
                return(new CompositeRootCommandResponse[]
                {
                    new CompositeRootCommandResponse
                    {
                        Success = true,
                        ReturnValue = returnedBytes,
                        ReturnValueContentType = responseContentType,
                        ReturnValueContentEncoding = responseContentEncoding
                    }
                });
            }
        }
        private CompositeRootHttpServerTesterConnection CreateCompositeRootHttpServerTesterConnection(CompositeRootConfiguration configuration, WebRequest request)
        {
            var response = JsonConvert.DeserializeObject <CompositeRootAuthenticatorResponse>(Encoding.UTF8.GetString(CompositeRootHttpServerTesterConnection.SendRequest(request, out _, out _)));

            var sessionToken = response.SessionToken;
            CompositeRootHttpServerTesterConnection compositeRootHttpServerTesterConnection = null;

            try
            {
                compositeRootHttpServerTesterConnection = new CompositeRootHttpServerTesterConnection(configuration.Endpoint, sessionToken);
                if (!_connections.TryAdd(sessionToken, compositeRootHttpServerTesterConnection))
                {
                    return(null);
                }
            }
            catch
            {
                compositeRootHttpServerTesterConnection?.Dispose();
                throw;
            }

            return(compositeRootHttpServerTesterConnection);
        }