private async Task <ClientSignedResponse> SignWrapper <T>(ServerSignedRequest <T> request, Func <T, Task <ClientResponse> > func) where T : IClientCallback { ServerResponse <T> sins = new ServerResponse <T>(); try { PaymentGatewayClient cl = PaymentGatewayClientFactory.GetClient(request.Object.Object.Client); if (cl == null) { throw new ResultCodeException(ResultCodes.ClientServerError, ("en", $"Unable to locate PaymentGatewayClient for client '{request.Object.Object.Client}'."), ("es", $"No puedo encontrar una clase que defina a PaymentGatewayClient con el client '{request.Object.Object.Client}'.")); } using (var scope = new FlowingOperationContextScope(cl.InnerChannel)) { sins = await cl.UnwrapRequest(request).ContinueOnScope(scope); } if (sins.ResultCode != ResultCodes.Ok) { return(GenerateError(sins, request.Object.Object.Client)); } if (CallbackImplementation == null) { throw new ResultCodeException(ResultCodes.ClientServerError, ("en", "Callback message lost.There is no ICallback implementation"), ("es", "Mensaje del callback pedido. No hay implementacion de ICallback")); } ClientResponse cr = await func(sins.Response); cr.Client = request.Object.Object.Client; return(CertificateHelperFactory.Instance.SignClient <ClientSignedResponse, ClientResponse>(cr.Client, cr)); } catch (Exception e) { sins.PopulateFromException(e, Logger); return(GenerateError(sins, request.Object.Object.Client)); } }
private async Task <getCrossRatesResponse> CallSweaForCrossRate(string fromCurrency, string toCurrency, DateTime conversionDate) { var sweaWsClient = new SweaWebServicePortTypeClient(); var parameters = CrossRateConversionRequestHelper.GetParameters(fromCurrency, toCurrency, conversionDate); using (var scope = new FlowingOperationContextScope(sweaWsClient.InnerChannel)) { var request = new HttpRequestMessageProperty(); request.Headers.Add("Accept-Encoding", "gzip,deflate"); // this is crucial, without action="urn:[methodName]" the call to Swea WS will result in 404 error. request.Headers.Add("Content-Type", @"application/soap+xml;charset=UTF-8;action=""urn:getCrossRates"""); OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = request; return(await sweaWsClient.getCrossRatesAsync(parameters).ContinueOnScope(scope)); } }
private async Task <StateDataViewModel> GetStateDataAsync(TISWebServiceGetStateSupportIN stateIn) { GetStateResponse result = new GetStateResponse(); using (TISWebService.TISWebServiceSoapClient client = GetClient()) using (var scope = new FlowingOperationContextScope(client.InnerChannel)) { OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = CreateRequestMessageProperty(); string strIn = DCSerializer.SerializeWithDCS(stateIn); try { var webResponse = await client.GetStateAsync(strIn).ContinueOnScope(scope); return(GetStateData(webResponse.Body)); } catch (Exception ex) { return(new StateDataViewModel { Error = ex.Message }); } } }
public static SimpleAwaiter <TResult> ContinueOnScope <TResult>(this Task <TResult> @this, FlowingOperationContextScope scope) { return(new SimpleAwaiter <TResult>(@this, scope.BeforeAwait, scope.AfterAwait)); }
private async Task<StateDataViewModel> GetStateDataAsync(TISWebServiceGetStateSupportIN stateIn) { GetStateResponse result = new GetStateResponse(); using (TISWebService.TISWebServiceSoapClient client = GetClient()) using (var scope = new FlowingOperationContextScope(client.InnerChannel)) { OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = CreateRequestMessageProperty(); string strIn = DCSerializer.SerializeWithDCS(stateIn); try { var webResponse = await client.GetStateAsync(strIn).ContinueOnScope(scope); return GetStateData(webResponse.Body); } catch (Exception ex) { return new StateDataViewModel { Error = ex.Message }; } } }