Beispiel #1
0
        /// <summary>
        /// Sends a request async
        /// </summary>
        /// <exception cref="ClientException"></exception>
        public async Task <TResponse> SendRequestAsync <TRequest, TResponse>(TRequest request)
            where TRequest : Request
            where TResponse : Response
        {
            String    requestData;
            TResponse response;
            Dictionary <String, String> headers = new Dictionary <String, String>(GlobalHeaders);

            if (request.Client != this)
            {
                request.Client = this;
            }

            requestData = JsonSerializer.Serialize(request);

            if (Client.DefaultOperationTimeout != OperationTimeout)
            {
                headers["X-Miva-API-Timeout"] = OperationTimeout.ToString();
            }

            if (request.GetBinaryEncoding() == Request.BinaryEncodingType.Base64)
            {
                headers["X-Miva-API-Binary-Encoding"] = "base64";
            }

            request.ProcessRequestHeaders(headers);

            if (Log != null)
            {
                Log.LogRequest(request, headers, requestData);
            }

            HttpResponseMessage httpResponse = await SendRequestLowLevel(requestData, headers);

            try
            {
                httpResponse.EnsureSuccessStatusCode();

                var options = new JsonSerializerOptions();

                if (request is MultiCallRequest mrequest)
                {
                    options.Converters.Add(new MultiCallResponseConverter(mrequest));
                }

                response              = JsonSerializer.Deserialize <TResponse>(httpResponse.Content.ReadAsStringAsync().Result, options);
                response.Request      = request;
                response.HttpResponse = httpResponse;

                if (Log != null)
                {
                    Log.LogResponse(response, httpResponse);
                }
            }
            catch (HttpRequestException e)
            {
                if (httpResponse.StatusCode == System.Net.HttpStatusCode.Unauthorized)
                {
                    throw new MerchantAPIException("HTTP Authentication Error", e);
                }

                throw new MerchantAPIException("HTTP Response Error", e);
            }
            catch (Exception e)
            {
                throw new MerchantAPIException("Error Parsing JSON Response", e);
            }

            if (request is MultiCallRequest mcreq && response is MultiCallResponse mcresp)
            {
                if (mcresp.HttpResponse.StatusCode == System.Net.HttpStatusCode.PartialContent)
                {
                    mcresp.Request = mcreq;
                    mcresp.Timeout = true;

                    if (mcreq.AutoTimeoutContinue && mcreq._InitialResponse == null)
                    {
                        mcresp.AutoContinue();
                    }
                }
            }

            return(response);
        }
Beispiel #2
0
        // Module defining this command


        // Optional custom code for this activity


        /// <summary>
        /// Returns a configured instance of System.Management.Automation.PowerShell, pre-populated with the command to run.
        /// </summary>
        /// <param name="context">The NativeActivityContext for the currently running activity.</param>
        /// <returns>A populated instance of Sytem.Management.Automation.PowerShell</returns>
        /// <remarks>The infrastructure takes responsibility for closing and disposing the PowerShell instance returned.</remarks>
        protected override ActivityImplementationContext GetPowerShell(NativeActivityContext context)
        {
            System.Management.Automation.PowerShell invoker       = global::System.Management.Automation.PowerShell.Create();
            System.Management.Automation.PowerShell targetCommand = invoker.AddCommand(PSCommandName);

            // Initialize the arguments

            if (ProxyAccessType.Expression != null)
            {
                targetCommand.AddParameter("ProxyAccessType", ProxyAccessType.Get(context));
            }

            if (ProxyAuthentication.Expression != null)
            {
                targetCommand.AddParameter("ProxyAuthentication", ProxyAuthentication.Get(context));
            }

            if (ProxyCredential.Expression != null)
            {
                targetCommand.AddParameter("ProxyCredential", ProxyCredential.Get(context));
            }

            if (SkipCACheck.Expression != null)
            {
                targetCommand.AddParameter("SkipCACheck", SkipCACheck.Get(context));
            }

            if (SkipCNCheck.Expression != null)
            {
                targetCommand.AddParameter("SkipCNCheck", SkipCNCheck.Get(context));
            }

            if (SkipRevocationCheck.Expression != null)
            {
                targetCommand.AddParameter("SkipRevocationCheck", SkipRevocationCheck.Get(context));
            }

            if (SPNPort.Expression != null)
            {
                targetCommand.AddParameter("SPNPort", SPNPort.Get(context));
            }

            if (OperationTimeout.Expression != null)
            {
                targetCommand.AddParameter("OperationTimeout", OperationTimeout.Get(context));
            }

            if (NoEncryption.Expression != null)
            {
                targetCommand.AddParameter("NoEncryption", NoEncryption.Get(context));
            }

            if (UseUTF16.Expression != null)
            {
                targetCommand.AddParameter("UseUTF16", UseUTF16.Get(context));
            }


            return(new ActivityImplementationContext()
            {
                PowerShellInstance = invoker
            });
        }
        protected override async Task <Action <NativeActivityContext> > ExecuteAsync(NativeActivityContext context, CancellationToken cancellationToken)
        {
            string path        = Path.Get(context);
            string libraryPath = LibraryPath.Get(context);

            if (!path.IsNullOrEmpty() && !Directory.Exists(path))
            {
                throw new DirectoryNotFoundException(string.Format(Resources.InvalidPathException, path));
            }

            cancellationToken.ThrowIfCancellationRequested();

            _pythonEngine = EngineProvider.Get(Version, path, libraryPath, !Isolated, TargetPlatform, ShowConsole);

            var workingFolder = WorkingFolder.Get(context);

            if (!workingFolder.IsNullOrEmpty())
            {
                var dir = new DirectoryInfo(workingFolder);
                if (!dir.Exists)
                {
                    throw new DirectoryNotFoundException(Resources.WorkingFolderPathInvalid);
                }
                workingFolder = dir.FullName; //we need to pass an absolute path to the python host
            }

            var operationTimeout = OperationTimeout.Get(context);

            if (operationTimeout == 0)
            {
                operationTimeout = 3600; //default to 1h for no values provided.
            }

            try
            {
                await _pythonEngine.Initialize(workingFolder, cancellationToken, operationTimeout);
            }
            catch (Exception e)
            {
                Trace.TraceError($"Error initializing Python engine: {e.ToString()}");
                try
                {
                    Cleanup();
                }
                catch (Exception) { }
                if (Version != Version.Auto)
                {
                    Version autodetected = Version.Auto;
                    EngineProvider.Autodetect(path, out autodetected);
                    if (autodetected != Version.Auto && autodetected != Version)
                    {
                        throw new InvalidOperationException(string.Format(Resources.InvalidVersionException, Version.ToFriendlyString(), autodetected.ToFriendlyString()));
                    }
                }
                throw new InvalidOperationException(Resources.PythonInitializeException, e);
            }

            cancellationToken.ThrowIfCancellationRequested();

            return(ctx =>
            {
                ctx.ScheduleAction(Body, _pythonEngine, OnCompleted, OnFaulted);
            });
        }