示例#1
0
        /// <summary>
        /// 得到唯一的ID
        /// </summary>
        /// <returns></returns>
        public static Int64 GetGuid()
        {
            Model.RequestModel <object> model = new Model.RequestModel <object>();
            model.Header.RequestType = "Esmart.Guid.NewGuid";


            Model.ResponseModel <Int64> reponse = SOAClient.Request <object, Int64>(model);

            if (reponse.Header.ReturnCode == 0)
            {
                return(reponse.Body);
            }

            return(DateTime.Now.Ticks);
        }
示例#2
0
        /// <summary>
        /// 使用Expression动态编译程序
        /// </summary>
        /// <typeparam name="Tinterface">soa定义的接口类型</typeparam>
        /// <typeparam name="Treturn">返回类型</typeparam>
        /// <param name="express">lab表达式</param>
        /// <param name="processId">流程Id</param>
        /// <returns></returns>
        public static Esmart.Framework.Model.ResponseModel <Treturn> Invoke <Tinterface, Treturn>(System.Linq.Expressions.Expression <Func <Tinterface, Treturn> > express, string processId = null)
        {
            var body = express.Body as System.Linq.Expressions.MethodCallExpression;

            if (body == null)
            {
                throw new Esmart.Framework.Model.TpoBaseException("Tinterface类型为接口,必须是调用Tinterface的方法");
            }
            string requestType = string.Format("{0}.{1}", typeof(Tinterface).Name, body.Method.Name);

            object[] jsons = new object[body.Arguments.Count];

            for (int i = 0; i < body.Arguments.Count; i++)
            {
                var arg = body.Arguments[i];

                var constant = arg as System.Linq.Expressions.ConstantExpression;

                if (constant != null)
                {
                    jsons[i] = ConstantExpressionValue(constant, null);
                    continue;
                }
                var member = arg as System.Linq.Expressions.MemberExpression;

                if (member != null)
                {
                    jsons[i] = ConstantExpressionValue(member, member.Member.Name);
                    continue;
                }

                var listInitExpression = arg as System.Linq.Expressions.ListInitExpression;

                if (listInitExpression != null)
                {
                    jsons[i] = ConstantExpressionValue(listInitExpression);

                    continue;
                }

                var newArrayExpression = arg as System.Linq.Expressions.NewArrayExpression;

                if (newArrayExpression != null)
                {
                    jsons[i] = ConstantExpressionValue(newArrayExpression);
                    continue;
                }
            }
            var objs = typeof(Tinterface).GetCustomAttributes(typeof(ServerActionAttribute), false);

            if (objs.Length > 0)
            {
                var data = GetConfiguration(requestType);
                if (data != null)
                {
                    return(InvokeServer <Treturn>(jsons, data));
                }
            }


            Model.RequestModel <object> requestModel = new Model.RequestModel <object>();

            requestModel.Header.RequestType = requestType;

            if (body.Arguments.Count == 1)
            {
                requestModel.Body = jsons[0];
            }
            if (body.Arguments.Count > 1)
            {
                requestModel.Body = jsons;
            }
            requestModel.Header.GUID = processId;

            return(SOAClient.Request <object, Treturn>(requestModel));
        }