private ServiceInfo GetServiceInfoFromMethodInfo(MethodInfo method, List <XElement> elementList, bool isHiddenDiscovery)
        {
            ServiceInvoker attribute = method.GetCustomAttribute <ServiceInvoker>(true);

            string key = ServicePool.Instance.GetIntefaceName(method.DeclaringType.FullName, method.Name);;

            string module = "";

            if (attribute != null)
            {
                //如果方法上设置了不可用,那么该方法就不进入服务池
                if (!attribute.Enabled)
                {
                    return(null);
                }
                //获得设置的接口名称
                if (!string.IsNullOrEmpty(attribute.InterfaceName))
                {
                    key = attribute.InterfaceName;
                }
                //获得模块名称
                if (!string.IsNullOrEmpty(attribute.Module))
                {
                    module = attribute.Module;
                }
            }

            //如果方法或者类上设置了隐藏发现,就不能通过这个方法显示出来
            if (!isHiddenDiscovery && attribute != null && attribute.IsHiddenDiscovery)
            {
                isHiddenDiscovery = true;
            }
            string description = "";
            string returnDesc  = "";
            List <ServiceParameter> parameters = null;
            XElement methodElement             = null;

            if (elementList != null)
            {
                methodElement = elementList.Find(t => t.Attribute("name").Value.StartsWith("M:" + key));
            }

            #region 获得回参和注释
            if (methodElement != null)
            {
                description = methodElement.Element("summary") != null?methodElement.Element("summary").Value.Trim('\n', ' ') : "";

                returnDesc = methodElement.Element("returns") != null?methodElement.Element("returns").Value.Trim('\n', ' ') : "";
            }
            #endregion

            #region 处理参数信息
            ParameterInfo[] param = method.GetParameters();
            if (param.Length > 0)
            {
                parameters = new List <ServiceParameter>();
                foreach (ParameterInfo p in param)
                {
                    ServiceParameter sp = new ServiceParameter
                    {
                        Index    = p.Position,
                        Name     = p.Name,
                        TypeInfo = new SOAFramework.Service.Core.Model.TypeInfo
                        {
                            FullTypeName = p.ParameterType.FullName,
                            TypeName     = GetTypeName(p.ParameterType),
                            IsClass      = IsCustomClassType(p.ParameterType),
                            NameSpace    = p.ParameterType.Namespace,
                        },
                    };
                    XElement paramElement = null;
                    if (methodElement != null)
                    {
                        paramElement = methodElement.Descendants("param").FirstOrDefault(t => t.Attribute("name").Value.Equals(p.Name));
                    }
                    if (paramElement != null && !string.IsNullOrEmpty(paramElement.Value))
                    {
                        sp.Description = paramElement.Value;
                    }
                    parameters.Add(sp);
                }
            }
            #endregion

            #region 设置serviceinfo
            ServiceInfo info = new ServiceInfo
            {
                InterfaceName  = key,
                Parameters     = parameters,
                Module         = module,
                ReturnTypeInfo = new SOAFramework.Service.Core.Model.TypeInfo
                {
                    FullTypeName = method.ReturnType.FullName,
                    TypeName     = GetTypeName(method.ReturnType),
                    IsClass      = IsCustomClassType(method.ReturnType),
                    NameSpace    = method.ReturnType.Namespace,
                },
                IsHidden    = isHiddenDiscovery,
                Description = description.Trim(),
                ReturnDesc  = returnDesc.Trim(),
                Assembly    = method.DeclaringType.Assembly,
            };
            #endregion
            return(info);
        }
 Task <ServiceResponse <Brewery> > IBreweryServiceProxy.GetBreweries(ServiceParameter parameter)
 {
     return(service.GetBreweries(parameter));
 }
Exemple #3
0
        //---------------------------------------------------------------------------------------------------------------------

        public void LoadFromXml(XmlDocument definitionDocument)
        {
            XmlElement paramsElement = null, element;

            foreach (XmlNode node in definitionDocument.DocumentElement.ChildNodes)
            {
                if ((element = node as XmlElement) != null && element.Name == "params")
                {
                    paramsElement = element;
                    break;
                }
            }

            if (paramsElement == null)
            {
                return;
            }

            if (String.Compare(Service.DefinitionVersion, "2.0") >= 0)   // new service.xml format

            {
                foreach (XmlNode node in paramsElement.ChildNodes)
                {
                    element = node as XmlElement;
                    if (element == null)
                    {
                        continue;
                    }

                    switch (element.Name)
                    {
                    case "input":
                        //ProcessingInputSet input = new ProcessingInputSet(this, element);
                        break;

                    case "processing":
                        GetDefinedProcessingParameters(element);
                        break;

                    case "output":
                        //ProcessingOutputSet output = new ProcessingOutputSet(this, element);
                        break;
                    }
                }
            }
            else     // old service.xml format
            {
                Inputs.Add(new ProcessingInputSet(this));
                Outputs.Add(new ProcessingOutputSet(this));

                foreach (XmlNode node in paramsElement.ChildNodes)
                {
                    XmlElement subElement = node as XmlElement;
                    if (subElement == null)
                    {
                        continue;
                    }

                    string source = (subElement.HasAttribute("source") ? subElement.Attributes["source"].Value : null);
                    string type   = (subElement.HasAttribute("type") ? subElement.Attributes["type"].Value : null);

                    switch (source)
                    {
                    case "series":
                    case "Task.Series":
                        Inputs[0].CollectionParameter = new ServiceInputCollectionParameter(Inputs[0], subElement);
                        Add(Inputs[0].CollectionParameter);
                        break;

                    case "dataset":
                    case "Task.InputFiles":
                        Inputs[0].ProductParameter = new ServiceInputProductParameter(Inputs[0], subElement);
                        Add(Inputs[0].ProductParameter);
                        break;

                    case "computingResource":
                    case "Task.ComputingResource":
                    case "computingElement":
                    case "Task.ComputingElement":
                        ComputingResourceParameter = new ServiceComputingResourceParameter(this, subElement);
                        Add(ComputingResourceParameter);
                        break;

                    case "priority":
                    case "Task.Priority":
                        PriorityParameter = new ServicePriorityParameter(this, subElement);
                        Add(PriorityParameter);
                        break;

                    case "publishServer":
                    case "Task.PublishServer":
                        Outputs[0].LocationParameter = new ServiceOutputLocationParameter(Outputs[0], subElement);
                        Add(Outputs[0].LocationParameter);
                        break;

                    case "compress":
                    case "Task.Compression":
                        Outputs[0].CompressionParameter = new ServiceOutputCompressionParameter(Outputs[0], subElement);
                        Add(Outputs[0].CompressionParameter);
                        break;

                    /*case "register" :
                     * case "Task.RegisterOutput" :
                     *  CheckAutoRegister(param);
                     *  break;*/
                    default:
                        if (type == "caption")
                        {
                            NameParameter = new ServiceProcessNameParameter(this, subElement);
                            Add(NameParameter);
                        }
                        else
                        {
                            ServiceParameter param = new ServiceParameter(this, subElement);
                            Add(param);
                            if (param.SearchExtension != null)
                            {
                                Inputs[0].SearchParameters.Add(param);
                            }
                        }
                        break;
                    }
                }
            }
        }
 public Task <ServiceResponse <Brewery> > GetBreweries(ServiceParameter parameter)
 {
     throw new NotImplementedException();
 }
        internal static void GXToDynamoQueryParameter(string prefix, Dictionary <string, AttributeValue> dynParm, ServiceParameter parm)
        {
            AttributeValue v = ToAttributeValue(parm.DbType, parm.Value, true);

            if (v != null)
            {
                dynParm[$"{prefix}{parm.ParameterName}"] = v;
            }
        }