/// <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); }
// 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); }); }