首页  ·  知识 ·  云计算
ExtJS中使用Asp.net编写后台服务器程序的几种方式
俯首甘为孺子牛  http://www.cnblogs.com/Guzenyin/  综合  编辑:dezai  图片来源:网络
使用Asp.net编写Extjs的后台服务器程序大概有下面几种方式: 1.使用 .net Framework 3.5中的WCF来实现,因为.net 3.5 中的WCF 中新增加了一个Attribut

使用Asp.net编写Extjs的后台服务器程序大概有下面几种方式:

1.使用 .net Framework 3.5中的WCF来实现,因为.net 3.5 中的WCF 中新增加了一个Attributes来支持这种方式,但是具体没有使用过,有兴趣的朋友可以关注一下.

2.在Asp.net中定义一个.aspx页面,然后在aspx.cs中文件中添加一个方法来相应Extjs的web 请求,具体方式如下:

     2.1:

public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ExtJsRequest();
            }
        }

        public string ExtJsRequest()
        {
           
            string sRtn = string.Empty;
            string sReq = Request["req"].ToString();

            sRtn = "{'success':true,'Message':" + sReq + "}";
           
            return sRtn;           
        }
    }

     这种方法使用起来比较简单,但是会在Server 端生成很多不需要的aspx页面,基本上每定义一个方法就需要在服务端定义一个页面,不利于代码的维护.

 3:借鉴Java 中的Servlet原理,将Extjs的请求分流到Server端具体的类中去,避免了不需要的aspx页面的生成,具体的实现如下:

     3.1:在Server端实现一个继承IHttpHandler接口的类,在其中实现对Extjs请求的分流.

     public class Servlet : System.Web.IHttpHandler
    {
        public DataSet ds;
        public Servlet()
        {
            ds = new DataSet();
            string path = HttpContext.Current.Server.MapPath("../Config.xml");          
            ds.ReadXml(path);
        }

        public void ProcessRequest(HttpContext ctx)
        {
            try
            {                
                string name = ctx.Request.Url.AbsolutePath;
                name = name.Substring(0, name.IndexOf('.'));

                DataRow[] dc = ds.Tables[0].Select("url ='" + name + "'");
                if (dc.Length > 0)
                {
                    Type ht = Type.GetType(dc[0]["Class"].ToString());
                    object obj = Activator.CreateInstance(ht);
                    MethodInfo mi = ht.GetMethod(dc[0]["function"].ToString());
                    object objRtn = mi.Invoke(obj, new object[] { ctx.Request });
                    ctx.Response.Write(objRtn as string);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }

     代码中标记为黄色的部分是一个自定义的配置文件格式.

     3.2 :自定义配置文件

     
     

          

     
     配置文件中相关属性介绍:

     URL:请求ExtJs的请求地址;

     Class:该请求分流到的Server端具体的类;

     Function:Server具体类中的对应Extjs请求的方法;

     标记为红色的代码是使用反射来定位到Server端具体类的具体方法;

     3.3:定义相关实体类

     WebUI.Bll.User 定义如下:

     namespace WebUI.Bll
     {
         public class User
         {

             public string List(HttpRequest request)
             {

                    ...具体逻辑
             }

          }

     }

     需要注意的是:

     1.WebUI.Bll.User 的方法必须定义为public;

     2.List 方法必须带一个HttpRequest的参数,因为要获取相应的Extjs的请求参数;

     3.4:在WebConfig 进行配置

     
             
              ---不拦截
                ---使用自定义的Httphander 来进行处理
             
             
             
       

      因为Asp.net会对.aspx页面使用默认的HttpHandler来进行拦截:System.Web.UI.PageHandlerFactory,所以如果在你的程序中你有的页面不想拦截比如:login.aspx,logout.aspx,Index.aspx ,那你可以在配置节中进行配置。

     通过第3种方法,在Server 端可以很好的组织代码,并且无需增加不必要的.aspx页面,可以将实体类定义到 Bussiness Layer 中,符合三层架构.

本文作者:俯首甘为孺子牛 来源:http://www.cnblogs.com/Guzenyin/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读