protected object[] Invoke(string name,  params object[] parameters)
 {
     var type = (DTypeDesc) Context.Items["SoapServerType"];
     var method = type.GetMethod(new Name(name));
     var clrMethod = WsdlHelper.GetMethodBySoapName(name, GetType());
     var p = ResultBinder.BindServerParameters(parameters, clrMethod);
     var context = ScriptContext.CurrentContext;
     context.Stack.AddFrame(p);
     var result = Convert.ObjectToPhpArray(method.Invoke(null, context.Stack));
     var binder = new ParameterBinder();
     var results = binder.BindServerResult(clrMethod, result, true);
     return results;
 }
        /// <summary>
        /// Invokes the call.
        /// </summary>
        /// <returns></returns>
        public object InvokeCall(string methodName, PhpArray parameters)
        {
            var        soapProxy = (SoapHttpClientProtocolExtended)proxyInstance;
            MethodInfo mi        = soapProxy.GetType().GetMethod(methodName);

            bool wrappedArgs = true;

            object[] attr = mi.GetCustomAttributes(typeof(System.Web.Services.Protocols.SoapDocumentMethodAttribute), false);
            if (attr.Length > 0 && attr[0].GetType() == typeof(System.Web.Services.Protocols.SoapDocumentMethodAttribute))
            {
                var soapMethodAttr = (System.Web.Services.Protocols.SoapDocumentMethodAttribute)attr[0];
                if (soapMethodAttr.ParameterStyle == System.Web.Services.Protocols.SoapParameterStyle.Bare)
                {
                    wrappedArgs = false;
                }
            }


            var paramBinder = new ParameterBinder();

            object[] transformedParameters = paramBinder.BindParams(mi, parameters, wrappedArgs);


            object[] resArray = soapProxy.Invoke(methodName, transformedParameters);

            if (resArray[0] != null)
            {
                resArray[0] = ResultBinder.BindResult(
                    resArray[0],
                    mi.Name,
                    wrappedArgs);
            }

            //object result = mi.Invoke(proxyInstance, (object[])methodParams.ToArray(typeof(object)));

            //foreach (ParameterInfo pi in mi.GetParameters())
            //{
            //    if (pi.IsOut) outParams.Add(methodParams[i]);

            //    i++;
            //}

            return(resArray[0]);
        }
        /// <summary>
        /// Invokes the call.
        /// </summary>
        /// <returns></returns>
        public object InvokeCall(string methodName ,PhpArray parameters)
        {
            var soapProxy = (SoapHttpClientProtocolExtended)proxyInstance;
            MethodInfo mi = soapProxy.GetType().GetMethod(methodName);

            bool wrappedArgs = true;

            object[] attr = mi.GetCustomAttributes(typeof(System.Web.Services.Protocols.SoapDocumentMethodAttribute), false);
            if (attr.Length > 0 && attr[0].GetType() == typeof(System.Web.Services.Protocols.SoapDocumentMethodAttribute))
            {
                var soapMethodAttr = (System.Web.Services.Protocols.SoapDocumentMethodAttribute)attr[0];
                if (soapMethodAttr.ParameterStyle == System.Web.Services.Protocols.SoapParameterStyle.Bare)
                {
                    wrappedArgs = false;
                }
            }


            var paramBinder = new ParameterBinder();
            object[] transformedParameters = paramBinder.BindParams(mi, parameters, wrappedArgs);


            object[] resArray = soapProxy.Invoke(methodName, transformedParameters);

            if (resArray[0] != null)
            {
                resArray[0] = ResultBinder.BindResult( 
                    resArray[0],
                    mi.Name,
                    wrappedArgs);
            }

            //object result = mi.Invoke(proxyInstance, (object[])methodParams.ToArray(typeof(object)));

            //foreach (ParameterInfo pi in mi.GetParameters())
            //{
            //    if (pi.IsOut) outParams.Add(methodParams[i]);

            //    i++;
            //}
                
            return resArray[0];
        }