/// <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); }
/// <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)); }