コード例 #1
0
        static void Main(string[] args)
        {
            string queue = $"MQ{DateTime.Now.ToString("yyyyMMdd")}.TaskQueue";

            Receiver = new PushNotificationService(queue, 60, 10, false, null, 2, 10);
            Receiver.Connect();
            Receiver.Start();
            Receiver.Shutdown();//跑Job有個問題是,他不會斷連線。需要而外處理或是讓他打keyword跳出,目前只是demo用,所以先不管。好像又可以。奇怪
        }
コード例 #2
0
        private string ExecSqlJmsLayui(InterfaceModel response, IMicroService service, JmsCommand dbCommand, List <FilterCondition> filters)
        {
            XmlHelper   xmlHelp    = new XmlHelper();
            string      json       = "";
            LayuiResult dataResult = new LayuiResult();

            dataResult.code  = 0;
            dataResult.count = 0;
            dataResult.msg   = "";
            dataResult.data  = "{0}";

            object result = new object();

            switch (response.ExecuteType)
            {
            case "Scalar":
                result = service.Invoke <object>("ExecuteScalar", dbCommand);
                break;

            case "Int":
                result = service.Invoke <int>("ExecuteNonQuery", dbCommand);
                break;

            case "DataSet":
                DataSet   ds    = service.Invoke <DataSet>("Fill", dbCommand);
                DataTable table = new DataTable();
                if (filters != null)
                {
                    //复杂查询需要再过滤一下最后一个表
                    string msg;
                    string filter = this.CreateFileterString(filters, out msg);
                    if (msg != "")
                    {
                        throw new Exception(msg);
                    }
                    DataTable table0 = ds.Tables[0];
                    table0.DefaultView.RowFilter = filter;
                    DataTable dtNew = table0.DefaultView.ToTable();
                    table = dtNew;
                }
                else
                {
                    table = ds.Tables[0];
                }

                dataResult.count = table.Rows.Count;
                result           = table;
                break;
            }

            dataResult.data = result;
            if (response.SerializeType == "Xml")
            {
            }
            else if (response.SerializeType == "Json")
            {
                json = JsonConvert.SerializeObject(dataResult);
            }
            else
            {
                json = result.ToString();
            }

            return(json);
        }
コード例 #3
0
        //执行最后的sql
        private string ExecSqlJms(InterfaceModel response, IMicroService service, JmsCommand dbCommand, List <FilterCondition> filters)
        {
            XmlHelper xmlHelp    = new XmlHelper();
            string    json       = "";
            object    dataResult = new object();
            object    result     = new object();

            switch (response.ExecuteType)
            {
            case "Scalar":
                DataResult dataResult1 = new DataResult();
                dataResult1.DataType = 200;
                dataResult1.Result   = service.Invoke <object>("ExecuteScalar", dbCommand);
                dataResult           = dataResult1;
                result = dataResult1.Result;
                break;

            case "Int":
                IntDataResult intDataResult = new IntDataResult();
                intDataResult.Result   = service.Invoke <int>("ExecuteNonQuery", dbCommand);
                intDataResult.DataType = 200;
                dataResult             = intDataResult;
                result = intDataResult.Result;
                break;

            case "DataSet":
                DataSet      ds           = new DataSet();
                DSDataResult dSDataResult = new DSDataResult();
                if (filters != null)
                {
                    //复杂查询需要再过滤一下最后一个表
                    int    lastIndex = ds.Tables.Count - 1;
                    string msg;
                    string filter = this.CreateFileterString(filters, out msg);
                    if (msg != "")
                    {
                        throw new Exception(msg);
                    }

                    ds = service.Invoke <DataSet>("Fill", dbCommand);
                    if (ds.Tables.Count > 0 && ds.Tables[lastIndex].Rows.Count > 0)
                    {
                        DataTable table = ds.Tables[ds.Tables.Count - 1];
                        table.DefaultView.RowFilter = filter;
                        DataTable dtNew = table.DefaultView.ToTable();
                        ds.Tables.RemoveAt(lastIndex);
                        ds.Tables.Add(dtNew);
                        dSDataResult.Result = ds;
                    }
                    else
                    {
                        dSDataResult.Result = ds;
                    }
                }
                else
                {
                    ds = service.Invoke <DataSet>("Fill", dbCommand);
                    dSDataResult.Result = ds;
                }
                dataResult            = dSDataResult;
                dSDataResult.DataType = 200;
                break;
            }

            if (response.SerializeType == "Xml")
            {
                switch (response.ExecuteType)
                {
                case "Scalar":
                    json = xmlHelp.SerializeXML <DataResult>(dataResult);
                    break;

                case "Int":
                    json = xmlHelp.SerializeXML <IntDataResult>(dataResult);
                    break;

                case "DataSet":
                    json = xmlHelp.SerializeXML <DSDataResult>(dataResult);
                    break;
                }
            }
            else if (response.SerializeType == "Json")
            {
                json = JsonConvert.SerializeObject(dataResult);
            }
            else
            {
                json = result.ToString();
            }

            return(json);
        }
コード例 #4
0
        private async Task InvokeJms(HttpContext context, Dictionary <string, object> paramList)
        {
            string version = "";

            //检测返回结构: DataResult(默认), layui:
            bool bOK = context.Request.Headers.TryGetValue("Version", out StringValues strLayui);

            if (bOK)
            {
                version = strLayui.ToString().ToLower();
            }

            string         path     = context.Request.Path.ToString();
            InterfaceModel response = this.routeDict[path];
            string         exceMsg  = ""; //存储异常的存储过程名

            string Address = this.myConfig.GatewayAddress.Address;
            int    port    = this.myConfig.GatewayAddress.Port;

            JMSClient tran = new JMSClient(Address, port);

            try
            {
                DataRow dataPre  = null;
                string  result   = "";
                int     rowIndex = 0;
                int     count    = response.Steps.Count;
                foreach (FlowStepModel step in response.Steps)
                {
                    if (step.CommandText == "")
                    {
                        exceMsg = step.StepName + " 没有数据库语句,请维护";
                        tran.Rollback();
                        await this.InvokeException(exceMsg);

                        return;
                    }

                    //初始化参数
                    string CommandType = "Text";
                    switch (step.CommandType)
                    {
                    case "Fun":
                    case "Text":
                        CommandType = "Text";
                        break;

                    case "StoredProcedure":
                        CommandType = "StoredProcedure";
                        break;
                    }

                    if (string.IsNullOrEmpty(step.ServiceName))
                    {
                        exceMsg = step.StepName + ">>没有选服务名称!";
                        tran.Rollback();
                        await this.InvokeException(exceMsg);

                        return;
                    }

                    IMicroService service = tran.GetMicroService(step.ServiceName);
                    if (service == null)
                    {
                        tran.Rollback();
                        await this.InvokeException($"无法从{Address}网关中获取服务>ErpService");

                        return;
                    }

                    JmsCommand dbCommand = new JmsCommand();
                    dbCommand.DataBase    = step.DataBase;
                    dbCommand.CommandType = CommandType;
                    dbCommand.CommandText = step.CommandText;

                    Dictionary <string, object> paralist = CreateParamJms(dataPre, step, paramList, out exceMsg);
                    if (exceMsg != "")
                    {
                        //创建参数出错
                        await this.InvokeException(exceMsg);

                        return;
                    }
                    dbCommand.Parameters = paralist;

                    try
                    {
                        //执行Sql
                        if (rowIndex == count - 1) //最后一步
                        {
                            List <FilterCondition> filters = null;
                            if (paramList.ContainsKey(_ReqFilter))
                            {
                                JArray ja = (JArray)paramList[_ReqFilter];
                                filters = ja.ToObject <List <FilterCondition> >();
                            }

                            if (version == "layui")
                            {
                                result = this.ExecSqlJmsLayui(response, service, dbCommand, filters);
                            }
                            else
                            {
                                result = this.ExecSqlJms(response, service, dbCommand, filters);
                            }
                        }
                        else
                        {
                            //如果不是最后一步,存储当前步结果
                            DataSet ds = service.Invoke <DataSet>("Fill", dbCommand);
                            if (ds.Tables.Count > 0 && ds.Tables[ds.Tables.Count - 1].Rows.Count > 0)
                            {
                                DataTable dt = ds.Tables[ds.Tables.Count - 1];
                                dataPre = dt.Rows[0];
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        exceMsg = response.Url + ">>" + step.StepName + ">>" + ex.Message;
                        this.logger.LogError(exceMsg);
                        throw new Exception(exceMsg);
                    }

                    rowIndex++;
                }

                tran.Commit();

                await this.WriteAsync(result);
            }
            catch (Exception ex)
            {
                tran.Rollback();
                await this.InvokeException(ex.Message);
            }
        }
コード例 #5
0
 public PollingImplementation() : base(blockActionIfInMaintenanceMode: false)
 {
     this.microService = Startup.ServiceProvider.GetService <IMicroService>();
 }