コード例 #1
0
 private void cboEndPoint_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (txtServiceURL.Text.Trim().Length > 0)
     {
         try
         {
             cboMethodName.Items.Clear();
             if (factoryCache == null || factoryCache.WsdlUri != txtServiceURL.Text)
             {
                 factoryCache = new DynamicProxyFactory(txtServiceURL.Text);
             }
             ServiceEndpoint endpoint = (from ep in factoryCache.Endpoints
                                         where ep.Name == cboEndPoint.Text
                                         select ep).FirstOrDefault();
             if (endpoint != null)
             {
                 string       contractName = endpoint.Contract.Name;
                 DynamicProxy proxy        = factoryCache.CreateProxy(contractName);
                 Type         proxyType    = proxy.ProxyType;
                 foreach (OperationDescription operation in endpoint.Contract.Operations)
                 {
                     cboMethodName.Items.Add(operation.Name);
                 }
             }
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
 }
コード例 #2
0
ファイル: AopTests.cs プロジェクト: berkaroad/cqrs
 public AopTests()
 {
     ConfigurationManager.Instance.UseAutofac();
     IocContainer.Instance.OnServiceTypeRegistering += (sender, e) =>
     {
         if (e.ServiceType == typeof(IUser))
         {
             e.SetNewImplementationType(DynamicProxyFactory.CreateProxyType(e.ServiceType
                                                                            , e.ImplementationType
                                                                            , new Type[] {
                 typeof(UnitOfWorkInterceptor)
                 , typeof(PerformanceCounterInterceptor)
             }).ProxyType);
         }
     };
     IocContainer.Instance.OnServiceInstanceRegistering += (sender, e) =>
     {
         if (e.ServiceType == typeof(IUser))
         {
             e.SetNewInstance(DynamicProxyFactory.CreateProxy(e.ServiceType
                                                              , e.Instance
                                                              , new Type[] {
                 typeof(UnitOfWorkInterceptor)
                 , typeof(PerformanceCounterInterceptor)
             }));
         }
     };
     IocContainer.RegisterByAssembly(typeof(AopTests).GetTypeInfo().Assembly);
 }
コード例 #3
0
ファイル: Program.cs プロジェクト: ravish27/WCFQuickSamples
        public static void Test()
        {
            ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(SkipCertValidation);
            string      baseAddress = "https://" + Environment.MachineName + ":8888/Service";
            ServiceHost host        = new ServiceHost(typeof(Service), new Uri(baseAddress));

            host.AddServiceEndpoint(typeof(ITest), GetBinding(), "");
            host.Description.Behaviors.Add(new ServiceMetadataBehavior {
                HttpsGetEnabled = true
            });

            host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode  = UserNamePasswordValidationMode.Custom;
            host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new MyPasswordValidator();
            host.Authorization.PrincipalPermissionMode = PrincipalPermissionMode.UseAspNetRoles;

            host.Open();
            Console.WriteLine("Host opened");

            DynamicProxyFactory factory = new DynamicProxyFactory(baseAddress + "?wsdl");

            DynamicProxy      proxy       = factory.CreateProxy("ITest");
            ClientCredentials credentials = proxy.GetProperty("ClientCredentials") as ClientCredentials;

            credentials.UserName.UserName = "******";
            credentials.UserName.Password = "******";

            Console.WriteLine(proxy.CallMethod("Hello"));

            Console.Write("Press ENTER to close the host");
            Console.ReadLine();
            host.Close();
        }
コード例 #4
0
        public Dictionary <MethodInfo, ParameterInfo[]> GetMethods(string endpoint)
        {
            var factory      = new DynamicProxyFactory(endpoint);
            var serviceModel = new ServiceModel {
                ParamsList = new Dictionary <MethodInfo, ParameterInfo[]>()
            };

            var contract = factory.Contracts.FirstOrDefault();

            if (contract == null)
            {
                throw new DynamicProxyException(ErrorResource.NoContractFound);
            }

            var proxy = factory.CreateProxy(contract.Name);

            var type = proxy.ProxyType;

            var methods = proxy.ProxyType.GetMethods();

            foreach (var methodInfo in methods.Where(methodInfo => methodInfo.DeclaringType == type))
            {
                serviceModel.MethodName = methodInfo.Name;

                var paramList = methodInfo.GetParameters();

                serviceModel.ParamsList.Add(methodInfo, paramList);
            }

            return(serviceModel.ParamsList);
        }
コード例 #5
0
        private DynamicProxy CreateDynamicProxy()
        {
            string serviceWsdlUri = ServiceAddress;

            // create the dynamic proxy factory, that downloads the service metadata
            // and create the dynamic factory.
            DynamicProxyFactory factory = new DynamicProxyFactory(serviceWsdlUri);

            //Setup timeout
            var bindingList = factory.Bindings;

            if (bindingList != null)
            {
                foreach (var binding in bindingList)
                {
                    binding.OpenTimeout    = new TimeSpan(0, 30, 0);
                    binding.ReceiveTimeout = new TimeSpan(0, 30, 0);
                    binding.SendTimeout    = new TimeSpan(0, 30, 0);
                    binding.CloseTimeout   = new TimeSpan(0, 30, 0);
                }
            }
            // operations
            DynamicProxy proxy = factory.CreateProxy(OperationContractName);

            return(proxy);
        }
コード例 #6
0
        private static void DynamicServiceInvoke(string wsdlUri, string operationName, object[] operationParameters,
                                                 HeaderData headerData)
        {
            var factory         = new DynamicProxyFactory(wsdlUri);
            var serviceContract = factory.Contracts.FirstOrDefault();

            // create the DynamicProxy for the contract  and perform operations

#if DEBUG
            Console.WriteLine("Creating DynamicProxy to GenericJobScheduler Service");
#endif
            if (serviceContract != null)
            {
                DynamicProxy dynamicProxy = factory.CreateProxy(serviceContract.Name);

                var innerChannel = dynamicProxy.GetProperty("InnerChannel") as IClientChannel;
                if (innerChannel != null)
                {
                    using (new OperationContextScope(innerChannel))
                    {
                        OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader(headerData.HeaderName, headerData.HeaderNamespace,
                                                                                                       headerData.DataAsXmlString));
                        var result = dynamicProxy.CallMethod(operationName, operationParameters);
                    }
                }
            }
        }
コード例 #7
0
ファイル: InvokeTests.cs プロジェクト: tukzer/Seif
        public void CreateProxy()
        {
            var proxyFactory = new DynamicProxyFactory();
            var service = proxyFactory.CreateProxy<IEchoService>(new ProxyOptions
            {
                EndpointUri = "localhost:3310",
                ServiceKind = ServiceKind.Remote
            }, new IInvokeFilter[0]);

            var result = service.GetServerTime();
            Assert.IsNull(result);
        }
コード例 #8
0
        private void button1_Click(object sender, EventArgs e)
        {
            var serviceWsdlUri = "http://localhost.fc.local/FundConnect.Authentication.IisHost/Groups.svc?wsdl";

            var factory = new DynamicProxyFactory(serviceWsdlUri);

            var count = 0;

            var myEndpoints = new List <string>( );

            foreach (var endpoint in factory.Endpoints)
            {
                Console.WriteLine("Service Endpoint[{0}]", count);
                Console.WriteLine("\tAddress = " + endpoint.Address);
                Console.WriteLine("\tContract = " + endpoint.Contract.Name);
                Console.WriteLine("\tBinding = " + endpoint.Binding.Name);


                myEndpoints.Add(endpoint.Contract.Name);
            }
            foreach (var endpoint in myEndpoints)
            {
                var dp = factory.CreateProxy(endpoint);

                var operations = factory.GetEndpoint(endpoint).Contract.Operations;

                var proxyType = dp.ProxyType;
                var mi        = proxyType.GetMethods(BindingFlags.Public | BindingFlags.Instance);

                for (var i = 0; i < mi.Length; i++)
                {
                    var name = mi[i].Name;
                    if (operations.FirstOrDefault(x => x.Name == name) != null)
                    {
                        var returnType = mi[i].ReturnType.ToString( );
                        Console.Write("Func: " + returnType + " " + name + "(");
                        var pi = mi[i].GetParameters( );
                        for (var j = 0; j < pi.Length; j++)
                        {
                            var param = pi[j].ParameterType.FullName + " " + pi[j].Name;
                            Console.Write((j > 0 ? "," : "") + param);
                        }
                        Console.WriteLine(")");
                    }
                }
                dp.Close( );
            }
            Console.ReadKey( );
        }
コード例 #9
0
ファイル: AopTests.cs プロジェクト: berkaroad/cqrs
        public void Test1()
        {
            var obj1 = DynamicProxyFactory.CreateProxy <IUser>(new Saller(), null);

            obj1.property2 = -9;
            Assert.Equal(-9, obj1.property2);
            obj1.Eat(new Rice());

            var obj2 = DynamicProxyFactory.CreateProxyType(typeof(IUser), typeof(Supplier), null).ProxyType.GetConstructor(Type.EmptyTypes).Invoke(null);

            var resolver = IocContainer.Instance.Resolve <IIocResolver>();
            var user1    = resolver.Resolve <IUser>();

            var val1 = user1.method2();
            var val2 = user1.property1;

            user1.property2 = -9;
            Assert.Equal(-9, user1.property2);
            user1.Eat(new Rice());
        }
コード例 #10
0
ファイル: Program.cs プロジェクト: ravish27/WCFQuickSamples
        public static void Test()
        {
            string      baseAddress = "http://" + Environment.MachineName + ":8000/Service";
            ServiceHost host        = new ServiceHost(typeof(Service), new Uri(baseAddress));

            host.AddServiceEndpoint(typeof(IService), new BasicHttpBinding(), "");
            host.Description.Behaviors.Add(new ServiceMetadataBehavior {
                HttpGetEnabled = true
            });

            host.Open();
            Console.WriteLine("Host opened");

            DynamicProxyFactory factory = new DynamicProxyFactory(baseAddress + "?wsdl");

            DynamicProxy dynamicProxy = factory.CreateProxy("IService");

            Console.WriteLine(dynamicProxy.CallMethod("GetData", 123));

            Type          proxyType            = dynamicProxy.ProxyType;
            MethodInfo    getDataUsingDCMethod = proxyType.GetMethod("GetDataUsingDataContract");
            Type          dcType = getDataUsingDCMethod.GetParameters()[0].ParameterType;
            DynamicObject obj    = new DynamicObject(dcType);

            obj.CallConstructor();
            obj.SetProperty("BoolValue", true);
            obj.SetProperty("StringValue", "Hello world");

            DynamicObject result = new DynamicObject(
                dynamicProxy.CallMethod(
                    "GetDataUsingDataContract",
                    obj.ObjectInstance));

            Console.WriteLine(result.GetProperty("StringValue"));

            Console.Write("Press ENTER to close the host");
            Console.ReadLine();
            host.Close();
        }
コード例 #11
0
        public IOutputDescription ExecuteWebService(WcfService src)
        {
            var source  = (WcfSource)src.Source;
            var factory = new DynamicProxyFactory(source.EndpointUrl);

            var contract = factory.Contracts.FirstOrDefault();

            if (contract == null)
            {
                throw new DynamicProxyException(ErrorResource.NoContractFound);
            }

            var proxy = factory.CreateProxy(contract.Name);

            var parameters = src.Method.Parameters?.Select(a => new MethodParameter {
                Name = a.Name, Value = a.Value, TypeName = a.TypeName
            })
                             .ToList() ?? new List <MethodParameter>();
            var paramObjects =
                parameters.Select(methodParameter => Convert.ChangeType(methodParameter.Value, Type.GetType(methodParameter.TypeName))).ToArray();

            var result          = proxy.CallMethod(src.Method.Name, paramObjects);
            var dataBrowser     = DataBrowserFactory.CreateDataBrowser();
            var dataSourceShape = DataSourceShapeFactory.CreateDataSourceShape();
            var method          = GetMethod(src.Method.Name, proxy);

            if (result != null)
            {
                result = AdjustPluginResult(result, method);

                var tmpData = dataBrowser.Map(result);
                dataSourceShape.Paths.AddRange(tmpData);
            }

            var output = OutputDescriptionFactory.CreateOutputDescription(OutputFormats.ShapedXML);

            output.DataSourceShapes.Add(dataSourceShape);
            return(output);
        }
コード例 #12
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="jobUrl">任务地址</param>
        /// <param name="serviceName">服务名称</param>
        /// <param name="methodName">方法名</param>
        /// <param name="valus">值集</param>
        /// <param name="internval">间隔时间</param>
        /// <param name="effectHour">生效时间</param>
        /// <param name="expireHour">失效时间</param>
        /// <param name="name">任务名称</param>
        public JobAgent(string jobUrl, string serviceName, string methodName, string valus, int internval, int effectHour, int expireHour, string name)
        {
            Id = Guid.NewGuid();
            var factory = new DynamicProxyFactory(jobUrl);

            dynamicProxy     = factory.CreateProxy(serviceName);
            timer            = new System.Timers.Timer(internval);
            this.effectHour  = effectHour;
            this.expireHour  = expireHour;
            Name             = name;
            this.serviceName = serviceName;
            this.valus       = valus;
            jobAgentContract = new JobAgentContract(methodName, valus.Split(','));
            timerHandler     = this.timer_Elapsed;

            foreach (ServiceEndpoint endpoint in factory.Endpoints)
            {
                Console.WriteLine("Service Endpoint={0}", endpoint.Name);
                Console.WriteLine("\tAddress = " + endpoint.Address);
                Console.WriteLine("\tContract = " + endpoint.Contract.Name);
                Console.WriteLine("\tBinding = " + endpoint.Binding.Name);
            }
        }
コード例 #13
0
        public object ExcecuteMethod(IWcfAction action, string endpointUrl)
        {
            var factory = new DynamicProxyFactory(endpointUrl);

            var contract = factory.Contracts.FirstOrDefault();

            if (contract == null)
            {
                throw new DynamicProxyException(ErrorResource.NoContractFound);
            }

            var proxy = factory.CreateProxy(contract.Name);

            var parameters = action.Inputs?.Select(
                a =>
                new MethodParameter
            {
                EmptyToNull = a.EmptyIsNull,
                IsRequired  = a.RequiredField,
                Name        = a.Name,
                Value       = a.Value,
                TypeName    = a.TypeName
            }).ToList() ?? new List <MethodParameter>();
            var paramObjects =
                parameters.Select(methodParameter => Convert.ChangeType(methodParameter.Value, Type.GetType(methodParameter.TypeName))).ToArray();

            var result = proxy.CallMethod(action.Method, paramObjects);

            var method = GetMethod(action.Method, proxy);

            if (result != null)
            {
                result = AdjustPluginResult(result, method);
            }

            return(result);
        }
コード例 #14
0
ファイル: Program.cs プロジェクト: ravish27/WCFQuickSamples
        public static void Test()
        {
            string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
            ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
            host.AddServiceEndpoint(typeof(IService), new BasicHttpBinding(), "");
            host.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });

            host.Open();
            Console.WriteLine("Host opened");

            DynamicProxyFactory factory = new DynamicProxyFactory(baseAddress + "?wsdl");

            DynamicProxy dynamicProxy = factory.CreateProxy("IService");
            Console.WriteLine(dynamicProxy.CallMethod("GetData", 123));

            Type proxyType = dynamicProxy.ProxyType;
            MethodInfo getDataUsingDCMethod = proxyType.GetMethod("GetDataUsingDataContract");
            Type dcType = getDataUsingDCMethod.GetParameters()[0].ParameterType;
            DynamicObject obj = new DynamicObject(dcType);
            obj.CallConstructor();
            obj.SetProperty("BoolValue", true);
            obj.SetProperty("StringValue", "Hello world");

            DynamicObject result = new DynamicObject(
                dynamicProxy.CallMethod(
                    "GetDataUsingDataContract",
                    obj.ObjectInstance));

            Console.WriteLine(result.GetProperty("StringValue"));

            Console.Write("Press ENTER to close the host");
            Console.ReadLine();
            host.Close();
        }
コード例 #15
0
 private DynamicProxy GetSoapProxy(string serviceUri, string contract)
 {
     DynamicProxyFactory factory = null;
     DynamicProxy proxy = null;
     try
     {
         factory = new DynamicProxyFactory(serviceUri);
         proxy = factory.CreateProxy(contract);
     }
     catch (Exception ex)
     {
         string errMsg = "Error creating Soap Proxy: " + ex.Message + "\n";
         if (ex.InnerException != null)
             errMsg += "Inner Exception = " + ex.InnerException.Message + "\n";
         errMsg += "\nserviceUri: " + serviceUri;
         errMsg += "\ncontract: " + contract;
         m_log.WriteEntry(errMsg, EventLogEntryType.Error);
     }
     return proxy;
 }
コード例 #16
0
        /// <summary>
        /// Se encarga de invocar un metodo de un webservice
        /// </summary>
        /// <param name="strMetodo"></param>
        /// <param name="objParametros"></param>
        /// <returns></returns>
        private object InvocarWebService(string strMetodo, object[] objParametros)
        {
            var objRetorno = new object();

            try
            {
                //Crear Factory
                DynamicProxyFactory factory = new DynamicProxyFactory(this.strUrl, this.strUsuario, this.strPassword);

                //Crear Bindings
                switch (factory.Bindings.ElementAt(0).GetType().Name)
                {
                case "WSHttpBinding":
                    WSHttpBinding bdWS = (WSHttpBinding)factory.Bindings.ElementAt(0);
                    if (bdWS.Scheme.ToLower().Equals("http"))
                    {
                        bdWS.Security.Mode = SecurityMode.None;
                        bdWS.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
                    }
                    else
                    {
                        bdWS.Security.Mode = SecurityMode.Transport;
                        bdWS.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
                    }
                    break;

                case "BasicHttpBinding":
                    BasicHttpBinding bdBasic = (BasicHttpBinding)factory.Bindings.ElementAt(0);
                    if (bdBasic.Scheme.ToLower().Equals("http"))
                    {
                        bdBasic.Security.Mode = BasicHttpSecurityMode.None;
                        bdBasic.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
                    }
                    else
                    {
                        bdBasic.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
                        bdBasic.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
                    }
                    break;
                }

                string strContratoWebService = string.Empty;
                foreach (ContractDescription contract in factory.Contracts)
                {
                    strContratoWebService = contract.Name;
                    break;
                }

                //Crear Proxy
                DynamicProxy proxyAutenticacion = factory.CreateProxy(strContratoWebService);

                //Asignar credenciales de acceso al servicio web
                ClientCredentials credentials = proxyAutenticacion.GetProperty("ClientCredentials") as ClientCredentials;
                credentials.UserName.UserName = this.strUsuario;
                credentials.UserName.Password = this.strPassword;

                //Retornar dato por parte del servicio web
                objRetorno = proxyAutenticacion.CallMethod <object>(strMetodo, objParametros);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex.InnerException);
            }
            return(objRetorno);
        }
コード例 #17
0
        /// <summary>
        /// This method is a run-time method executed dtsexec.exe
        /// </summary>
        /// <param name="connections"></param>
        /// <param name="variableDispenser"></param>
        /// <param name="componentEvents"></param>
        /// <param name="log"></param>
        /// <param name="transaction"></param>
        /// <returns></returns>
        public override DTSExecResult Execute(Connections connections, VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, IDTSLogging log, object transaction)
        {
            bool refire = false;

            componentEvents.FireInformation(0,
                                            "SSISWCFTask",
                                            "Prepare variables",
                                            string.Empty,
                                            0,
                                            ref refire);

            GetNeededVariables(variableDispenser, componentEvents);

            try
            {
                componentEvents.FireInformation(0,
                                                "SSISWCFTask",
                                                string.Format("Initialize the WCF Service: {0}", EvaluateExpression(ServiceUrl, variableDispenser)),
                                                string.Empty,
                                                0,
                                                ref refire);

                var dynamicProxyFactory = new DynamicProxyFactory(EvaluateExpression(ServiceUrl, variableDispenser).ToString());

                int count = 0;
                foreach (ServiceEndpoint endpoint in dynamicProxyFactory.Endpoints.Where(endPoint => endPoint.Contract.Name == EvaluateExpression(ServiceContract, variableDispenser).ToString()))
                {
                    componentEvents.FireInformation(0, "SSISWCFTask", string.Format("Service Endpoint[{0}]", count++), string.Empty, 0, ref refire);
                    componentEvents.FireInformation(0, "SSISWCFTask", string.Format("Address: {0}", endpoint.Address), string.Empty, 0, ref refire);
                    componentEvents.FireInformation(0, "SSISWCFTask", string.Format("Contract: {0}", endpoint.Contract.Name), string.Empty, 0, ref refire);
                    componentEvents.FireInformation(0, "SSISWCFTask", string.Format("Binding: {0}", endpoint.Binding.Name), string.Empty, 0, ref refire);
                }

                componentEvents.FireInformation(0,
                                                "SSISWCFTask",
                                                string.Format("InvokeRemoteMethod: {0} => {1}",
                                                              EvaluateExpression(ServiceContract, variableDispenser),
                                                              EvaluateExpression(OperationContract, variableDispenser)),
                                                string.Empty,
                                                0,
                                                ref refire);

                componentEvents.FireInformation(0, "SSISWCFTask", string.Format("Creating DynamicProxy to {0} ServiceContract", EvaluateExpression(ServiceContract, variableDispenser)), string.Empty, 0, ref refire);

                DynamicProxy dynamicProxy = dynamicProxyFactory.CreateProxy(EvaluateExpression(ServiceContract, variableDispenser).ToString());

                if (dynamicProxy == null)
                {
                    throw new Exception("Cannot create the proxy");
                }

                object result = null;

                componentEvents.FireInformation(0, "SSISWCFTask", "Creating the Client Channel", string.Empty, 0, ref refire);

                using (IClientChannel innerChannel = dynamicProxy.GetProperty("InnerChannel") as IClientChannel)
                {
                    if (innerChannel != null)
                    {
                        using (new OperationContextScope(innerChannel))
                        {
                            componentEvents.FireInformation(0, "SSISWCFTask", "Creating the Message Header", string.Empty, 0, ref refire);
                            OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("SSISDynamicWCF", "", Guid.NewGuid().ToString()));

                            componentEvents.FireInformation(0, "SSISWCFTask", "The used headers:", string.Empty, 0, ref refire);
                            foreach (var header in ((MappingHeaders)MappingHeaders))
                            {
                                var headerValue = Convert.ChangeType(EvaluateExpression(header.Value, variableDispenser).ToString(), Type.GetType(header.Type));
                                componentEvents.FireInformation(0, "SSISWCFTask",
                                                                string.Format("Name: {0} | Type: {1} | Value: {2}",
                                                                              header.Name,
                                                                              header.Type,
                                                                              headerValue),
                                                                string.Empty, 0, ref refire);
                                OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader(header.Name, "", headerValue));
                            }

                            componentEvents.FireInformation(0, "SSISWCFTask", "The used params:", string.Empty, 0, ref refire);
                            foreach (var param in ((MappingParams)MappingParams))
                            {
                                componentEvents.FireInformation(0, "SSISWCFTask",
                                                                string.Format("Name: {0} | Type: {1} | Value: {2}",
                                                                              param.Name,
                                                                              param.Type,
                                                                              Convert.ChangeType(EvaluateExpression(param.Value, variableDispenser).ToString(), Type.GetType(param.Type))),
                                                                string.Empty, 0, ref refire);
                            }

                            componentEvents.FireInformation(0, "SSISWCFTask", string.Format("Call [{0}] OperationContract with parameters:", EvaluateExpression(OperationContract, variableDispenser)), string.Empty, 0, ref refire);

                            int countParam = ((MappingParams)MappingParams).Count;

                            var objParams = new object[countParam];

                            for (int i = 0; i < countParam; i++)
                            {
                                objParams[i] = Convert.ChangeType(EvaluateExpression(((MappingParams)MappingParams)[i].Value, variableDispenser).ToString(), Type.GetType(((MappingParams)MappingParams)[i].Type));
                            }

                            result = dynamicProxy.CallMethod(EvaluateExpression(OperationContract, variableDispenser).ToString(), objParams);

                            //new object[]
                            //               {
                            //                   (from parameters in ((MappingParams)MappingParams)
                            //                   select Convert.ChangeType(EvaluateExpression(parameters.Value, variableDispenser).ToString(), Type.GetType(parameters.Type))).ToArray()
                            //               });
                        }
                    }
                    else
                    {
                        componentEvents.FireInformation(0, "SSISWCFTask", "Cannot create the Inner Channel", string.Empty, 0, ref refire);
                        throw new Exception("Cannot Create the Inner Channel");
                    }
                }

                if (result != null)
                {
                    if (IsValueReturned == Keys.TRUE)
                    {
                        componentEvents.FireInformation(0,
                                                        "SSISWCFTask",
                                                        string.Format("Get the Returned Value to: {0}", ReturnedValue),
                                                        string.Empty,
                                                        0,
                                                        ref refire);

                        string val = ReturnedValue.Split(new[] { "::" }, StringSplitOptions.RemoveEmptyEntries)[1].Trim();

                        componentEvents.FireInformation(0,
                                                        "SSISWCFTask",
                                                        string.Format("Get the Returned Value to {0} and convert to {1}",
                                                                      val.Substring(0, val.Length - 1),
                                                                      _vars[val.Substring(0, val.Length - 1)].DataType),
                                                        string.Empty,
                                                        0,
                                                        ref refire);

                        _vars[val.Substring(0, val.Length - 1)].Value = Convert.ChangeType(result, _vars[val.Substring(0, val.Length - 1)].DataType);

                        componentEvents.FireInformation(0,
                                                        "SSISWCFTask",
                                                        string.Format("The String Result is {0} ",
                                                                      _vars[val.Substring(0, val.Length - 1)].Value),
                                                        string.Empty,
                                                        0,
                                                        ref refire);
                    }
                    else
                    {
                        componentEvents.FireInformation(0,
                                                        "SSISWCFTask",
                                                        "Execution without return or no associated return variable",
                                                        string.Empty,
                                                        0,
                                                        ref refire);
                    }
                }
            }
            catch (Exception ex)
            {
                componentEvents.FireError(0,
                                          "SSISWCFTask",
                                          string.Format("Problem: {0}",
                                                        ex.Message + "\n" + ex.StackTrace),
                                          "",
                                          0);
            }
            finally
            {
                if (_vars.Locked)
                {
                    _vars.Unlock();
                }
            }

            return(base.Execute(connections, variableDispenser, componentEvents, log, transaction));
        }