void BuildNeon(byte[] dll, byte[] pdb, NeonResult result)
        {
            NeonResult nr = result;

            Neo.Compiler.MSIL.ModuleConverter convert = new Neo.Compiler.MSIL.ModuleConverter(nr);
            Neo.Compiler.MSIL.ILModule        module  = new Neo.Compiler.MSIL.ILModule();
            System.IO.MemoryStream            ms      = new System.IO.MemoryStream(dll);
            System.IO.MemoryStream            mspdb   = new System.IO.MemoryStream(pdb);
            module.LoadModule(ms, mspdb);
            var mod = convert.Convert(module);
            var avm = mod.Build();

            nr.avm = avm;
            var abijson = vmtool.FuncExport.Export(mod, avm);

            nr.hash = abijson["hash"].AsString();
            nr.abi  = abijson.ToString();
            {//gen debug info
                Neo.Compiler.MyJson.JsonNode_Array arr = new Neo.Compiler.MyJson.JsonNode_Array();
                foreach (var m in convert.outModule.mapMethods)
                {
                    Neo.Compiler.MyJson.JsonNode_Object item = new Neo.Compiler.MyJson.JsonNode_Object();
                    arr.Add(item);
                    item.SetDictValue("name", m.Value.displayName);
                    item.SetDictValue("addr", m.Value.funcaddr.ToString("X04"));
                    Neo.Compiler.MyJson.JsonNode_Array infos = new Neo.Compiler.MyJson.JsonNode_Array();
                    item.SetDictValue("map", infos);
                    foreach (var c in m.Value.body_Codes)
                    {
                        if (c.Value.debugcode != null)
                        {
                            var debugcode = c.Value.debugcode.ToLower();
                            if (debugcode.Contains(".cs"))
                            {
                                infos.AddArrayValue(c.Value.addr.ToString("X04") + "-" + c.Value.debugline.ToString());
                            }
                        }
                    }
                }
                nr.map = arr.ToString();
            }
        }
        //public async Task<MyJson.IJsonNode> onJsonRPC(FormData input)
        //{
        //    string method = null;
        //    double jsonrpc = 0;
        //    MyJson.JsonNode_Array _params = null;
        //    int id = 0;
        //    try
        //    {
        //        method = input.mapParams["method"];
        //        jsonrpc = double.Parse(input.mapParams["jsonrpc"]);
        //        _params = MyJson.Parse(input.mapParams["params"]).AsList() as MyJson.JsonNode_Array;
        //        id = int.Parse(input.mapParams["id"]);
        //    }
        //    catch (Exception err)
        //    {
        //        MyJson.JsonNode_Object item = new MyJson.JsonNode_Object();
        //        item["jsonrpc"] = new MyJson.JsonNode_ValueNumber(2.0);
        //        item["error"] = new MyJson.JsonNode_ValueString("rpc input format error.");
        //        return item;
        //    }
        //    if (method == "compile")
        //    {
        //        MyJson.JsonNode_Object item = new MyJson.JsonNode_Object();
        //        item["jsonrpc"] = new MyJson.JsonNode_ValueNumber(2.0);
        //        item["id"] = new MyJson.JsonNode_ValueNumber(id);
        //        string srccode = null;
        //        MyJson.IJsonNode result = null;
        //        string error = null;
        //        try
        //        {
        //            srccode = _params[0].AsString();
        //        }
        //        catch (Exception err)
        //        {
        //            error = err.Message;
        //        }
        //        if (srccode != null)
        //        {
        //            try
        //            {
        //                result = await compile(srccode);
        //            }
        //            catch (Exception err)
        //            {
        //                error = err.Message;
        //            }
        //        }
        //        if (result != null)
        //        {
        //            item["result"] = result;
        //        }
        //        else
        //        {
        //            item["error"] = new MyJson.JsonNode_ValueString("err in compile." + error);
        //        }
        //        return item;
        //    }
        //    else if (method == "getfile")
        //    {
        //        MyJson.JsonNode_Object item = new MyJson.JsonNode_Object();
        //        item["jsonrpc"] = new MyJson.JsonNode_ValueNumber(2.0);
        //        item["id"] = new MyJson.JsonNode_ValueNumber(id);
        //        string hashid = null;
        //        MyJson.IJsonNode result = null;
        //        string error = null;
        //        try
        //        {
        //            hashid = _params[0].AsString();
        //        }
        //        catch (Exception err)
        //        {
        //            error = err.Message;
        //        }
        //        if (hashid != null)
        //        {
        //            try
        //            {
        //                result = await getfile(hashid);
        //            }
        //            catch (Exception err)
        //            {
        //                error = err.Message;
        //            }
        //        }
        //        if (result != null)
        //        {
        //            item["result"] = result;
        //        }
        //        else
        //        {
        //            item["error"] = new MyJson.JsonNode_ValueString("err in getfile." + error);
        //        }
        //        return item;
        //    }
        //    else
        //    {
        //        MyJson.JsonNode_Object item = new MyJson.JsonNode_Object();
        //        item["jsonrpc"] = new MyJson.JsonNode_ValueNumber(2.0);
        //        item["id"] = new MyJson.JsonNode_ValueNumber(id);
        //        item["error"] = new MyJson.JsonNode_ValueString("rpc method not exist.");
        //        return item;
        //    }
        //}
        public async Task <string> onCompile(FormData input)
        {
            Console.WriteLine("docomplile:" + DateTime.Now.ToLongTimeString());
            MyJson.JsonNode_Object item = new MyJson.JsonNode_Object();

            var src = System.Text.Encoding.UTF8.GetString(input.mapFiles["file"]);

            CodeDomBuilder.buildResult result = null;
            try
            {
                result = builder.buildSrc(src, "temp");
            }
            catch (Exception err)
            {
                item.SetDictValue("tag", -3);
                item.SetDictValue("msg", "compile unknown error.");
                MyJson.JsonNode_Array errors = new MyJson.JsonNode_Array();
                item.SetDictValue("errors", errors);
                var jsonitem = new MyJson.JsonNode_Object();
                jsonitem.SetDictValue("tag", "error");
                jsonitem.SetDictValue("msg", err.Message);
                jsonitem.SetDictValue("id", err.HResult.ToString("X02"));
                errors.Add(jsonitem);
                Console.WriteLine("docomplile -3:");
                return(item.ToString());
            }
            //编译成功
            if (result.dll != null && result.dll.Length > 0)
            {
                NeonResult neonr = new NeonResult();
                try
                {
                    BuildNeon(result.dll, result.pdb, neonr);
                }
                catch (Exception err)
                {
                    item.SetDictValue("tag", -2);
                    item.SetDictValue("msg", "neon compile error.");
                    MyJson.JsonNode_Array errors = new MyJson.JsonNode_Array();
                    item.SetDictValue("errors", errors);
                    var _jsonitem = new MyJson.JsonNode_Object();
                    _jsonitem.SetDictValue("tag", "error");
                    _jsonitem.SetDictValue("msg", err.Message);
                    _jsonitem.SetDictValue("id", err.HResult.ToString("X02"));
                    errors.Add(_jsonitem);
                    foreach (var log in neonr.logs)
                    {
                        var jsonitem = new MyJson.JsonNode_Object();
                        jsonitem.SetDictValue("tag", "log");
                        jsonitem.SetDictValue("msg", log);
                        jsonitem.SetDictValue("id", "0");
                        errors.Add(jsonitem);
                    }
                    Console.WriteLine("docomplile -2:");
                    return(item.ToString());
                }
                try
                {
                    neonr.Save(outputpath, src);
                    item.SetDictValue("tag", 0);
                    item.SetDictValue("hash", neonr.hash);
                    item.SetDictValue("hex", ToHexString(neonr.avm));
                    item.SetDictValue("funcsigns", neonr.abi);
                }
                catch (Exception err)
                {
                    item.SetDictValue("tag", -1);
                    item.SetDictValue("msg", "save error.");
                    MyJson.JsonNode_Array errors = new MyJson.JsonNode_Array();
                    item.SetDictValue("errors", errors);
                    var jsonitem = new MyJson.JsonNode_Object();
                    jsonitem.SetDictValue("tag", "error");
                    jsonitem.SetDictValue("msg", err.Message);
                    jsonitem.SetDictValue("id", err.HResult.ToString("X02"));
                    errors.Add(jsonitem);
                    Console.WriteLine("docomplile -1:");
                    return(item.ToString());
                }
            }
            else
            {
                item.SetDictValue("tag", -3);
                item.SetDictValue("msg", "compile fail.");
                MyJson.JsonNode_Array errors = new MyJson.JsonNode_Array();
                item.SetDictValue("errors", errors);
                foreach (var err in result.errors)
                {
                    var jsonitem = new MyJson.JsonNode_Object();
                    jsonitem.SetDictValue("tag", "error");
                    jsonitem.SetDictValue("msg", err.msg);
                    jsonitem.SetDictValue("id", err.id);
                    jsonitem.SetDictValue("line", err.line);
                    jsonitem.SetDictValue("col", err.col);
                    errors.Add(jsonitem);
                }
                foreach (var err in result.warnings)
                {
                    var jsonitem = new MyJson.JsonNode_Object();
                    jsonitem.SetDictValue("tag", "warn");
                    jsonitem.SetDictValue("msg", err.msg);
                    jsonitem.SetDictValue("id", err.id);
                    jsonitem.SetDictValue("line", err.line);
                    jsonitem.SetDictValue("col", err.col);
                    errors.Add(jsonitem);
                }
                Console.WriteLine("docomplile -3:");

                return(item.ToString());
            }
            Console.WriteLine("docomplile succ:");

            try
            {
                //编译结果入库mongo
                mongoHelper mh   = new mongoHelper();
                string      hash = item["hash"].ToString();
                JObject     J    = JObject.Parse(getFile2Json(hash));
                J.Add("hash", hash);
                J.Add("requestIP", input.remoteIP);
                J["cs"]  = (string)J["cs"];
                J["map"] = JArray.Parse(HttpUtility.UrlDecode((string)J["map"]));
                J["abi"] = JObject.Parse(HttpUtility.UrlDecode((string)J["abi"]));
                mh.insertObjectByCheckKey("contractWarehouse", JsonConvert.SerializeObject(J), "hash", hash);
            }
            catch (Exception e)
            {
                var a = e;
            }

            return(item.ToString());
        }