像winform一样做web开发

向来不太喜欢asp.net的服务端控件,因为它曾经混乱了我对web开发理解。说实在的我也不会用,自己搞了一个小解决方案:

webservice+soapclient+jquery(easyui)

基本上把BLL层的某些需要暴露出来的方法形成外观层,把外观层发布为webservice,然后再用一个工具生成soapclient代理方法,

比如服务如下:

        /// <summary>
        /// 生成菜单
     /// </summary>
        /// <param name="userId">用户ID</param>
        /// <returns>html</returns>
        [WebMethod]
        public string GetMenu(string userId)
        {
            return InitialTree(userId);
        }
javascript 如下


//
/ <summary> /// 生成菜单 /// </summary> /// <param name="userId">用户ID</param> /// <returns>html</returns> function GetMenu(userid,callback) { var pl = new SOAPClientParameters(); pl.add('userId', userid); return SOAPClient.invoke('../Service/Approve.asmx', "GetMenu", pl, true,callback); }

从外观层方法暴露一直到js代理生成都可以用自己编写的小工具实现。

 

了解下soapclient。

http://www.codeproject.com/Articles/12816/JavaScript-SOAP-Client

再加easyui

几个问题:

1、webservice安全问题,通过soapheader等方式来解决。

2、UI偏慢,这个比较麻烦,easyui好像不是很快,也许是用的人水平太低了:(

 

写个小代码:由xxx.asmx.cs 生成js代理方法

 string GetDelegate(string filepath)
        {
            string AllTemplate = "";
            string AddTemplate = "";

            StringBuilder _str = new StringBuilder();
            _str.Append("function GetMissionApply(@args,callback)" + Environment.NewLine);
            _str.Append("{" + Environment.NewLine);
            _str.Append("    var pl = new SOAPClientParameters();" + Environment.NewLine);
            _str.Append("@add" + Environment.NewLine);
            _str.Append("    SOAPClient.invoke(serviceurl, \"GetMissionApply\", pl, true,callback);" + Environment.NewLine);
            _str.Append("}" + Environment.NewLine);

            AllTemplate = _str.ToString();

            _str = new StringBuilder();
            _str.Append("    pl.add(\"applyid\", applyid);" + Environment.NewLine);
            AddTemplate = _str.ToString();




            string returnStr = "";
            string methodName = "";
            string args = "";
            string all = "";
            string addStr = "";
            string arg = "";
            string str = File.ReadAllText(textBox1.Text);
            string argtemp = "";
            foreach (Match m in Regex.Matches(str, @"\[WebMethod\]\s*public\s*(void)?[^\s]*\s*([^\s]*)\s*\(([^\)]*)\)"))
            {
                
                argtemp = "";
                methodName = m.Groups[2].ToString().Trim();
                args = m.Groups[3].ToString().Trim();

                all = AllTemplate.Replace("GetMissionApply", methodName);
                addStr = "";

                foreach (var item in args.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    arg = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                    addStr += AddTemplate.Replace("applyid", arg);
                    argtemp += arg + ",";
                }
                argtemp = argtemp.TrimEnd(',').Trim();

                all = all.Replace("@add", addStr).Replace("@args", argtemp);
                returnStr += all;
            }
            return returnStr;
        }

 

 

 

 

 

 

posted @ 2013-07-04 16:27  wulala  阅读(347)  评论(0编辑  收藏  举报