コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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));
            }
        }
コード例 #3
0
ファイル: TisController.cs プロジェクト: belsoft/traingraph
        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
                        });
                    }
                }
        }
コード例 #4
0
 public static SimpleAwaiter <TResult> ContinueOnScope <TResult>(this Task <TResult> @this, FlowingOperationContextScope scope)
 {
     return(new SimpleAwaiter <TResult>(@this, scope.BeforeAwait, scope.AfterAwait));
 }
コード例 #5
0
ファイル: TisController.cs プロジェクト: belsoft/traingraph
        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 };
                }

            }
        }