IHttpHandler处理异步请求问题

时间:2022-05-01 13:54:03
我想搭建一个200人左右的公司业务内部系统框架

像这样的异步处理方式能承载的住这样的业务系统吗? 

也就是说整个框架的增删改查都用这一个文件AjaxService.cs来异步处理,前端都用无刷新用异步处理的用html文件展现。

这样有什么瓶颈或者潜在的问题吗?



AjaxService.cs文件 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///AjaxService 的摘要说明
/// </summary>
public class AjaxService:IHttpHandler
{
public AjaxService()
{
}

    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        string methodName = context.Request["method"];

        Type type = this.GetType();
        System.Reflection.MethodInfo method = type.GetMethod(methodName);
        if (method == null) throw new Exception("method is null");
        try
        {
            //BeforeInvoke(methodName);//权限管理
            method.Invoke(this, new object[] { context });
        }
        catch (Exception ex)
        {
            context.Response.ContentType = "text/plain";
            context.Response.StatusCode = 500;
            context.Response.Write(ex.GetBaseException().Message);
            context.Response.End();
        }
        finally
        {
            //AfterInvoke(methodName);//日志管理
        }
    }

    public void SaveOrder(HttpContext context)
    {
        //保存客户端提交的信息 
        /*
         * string OrderName = context.Request["OrderName"];
         .....
         */
        context.Response.Write("保存成功!");
    }
}


web.config文件 配置AjaxService.cs文件

<httpHandlers>
      <add path="AjaxService.axd" verb="POST,GET" type="AjaxService" />
    </httpHandlers>


前端html界面

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="js/jquery-1.6.2.min.js" type="text/javascript"></script>
</head>
<body>
    <input type="text" id="txtOrderName" />
    <input type="button"  value="Save" onclick="Save()"/>
    <script type="text/javascript">
        function Save() {
            $.ajax({
                type: "POST",
                url: "AjaxService.axd?method=SaveOrder",
                data: { "OrderName": $("#txtOrderName").val() },
                async: true,
                success: function (resultData) {
                    alert(resultData);
                },
                error: function (xhr) {
                    alert(xhr.responseText);
                }
            });
        }
    </script>
</body>
</html>


我想搭建一个200人左右的公司业务内部系统框架

像这样的异步处理方式能承载的住这样的业务系统吗? 

也就是说整个框架的增删改查都用这一个文件AjaxService.cs来异步处理,前端都用无刷新用异步处理的用html文件展现。

这样有什么瓶颈或者潜在的问题吗?

13 个解决方案

#1


用一个类型还是100个类型来写代码,只会影响到将来程序开发是否清晰方便,对于你的所说的那种事情能有什么区别呢?

#2


引用 1 楼 sp1234 的回复:
用一个类型还是100个类型来写代码,只会影响到将来程序开发是否清晰方便,对于你的所说的那种事情能有什么区别呢?

这样可以统一管理权限和日志,而且前端的显示速度比传统的.aspx快,但是没用实际应用到项目上试过。

#3


除了不套用入门书的写法(而这一点本身是好的)以外,就你的问题而言,看不出有什么问题所以不知道你到底担心什么。

你自己设计了一个框架,那么等你做得深入了一些之后再讨论具体问题。而且一个框架只有到你写了20个测试用例、每天至少运行1000个测试之后,才知道有什么问题。

没有必要做一定点东西就开始到处“找问题”。

#4


关于统一管理日志和权限,并不是说按照入门书的写法就不能方便的管理。asp.net也是一个比较成熟的框架,有各种层次(例如global.asax)可以对请求注入各种管理功能。所以单独这样一句话,并不是来放弃aspx的根本性的理由。

最主要地是,你发这个帖子,提不出什么具体的经过测试的“bug或者问题”来。如果你担心“200人访问时的并发性”,那么你就先想出一个测试用例来,然后给出其运行结果的数据,来说明这样做会降低多少效率。

其实会写程序根本不是什么技术,真正的技术是会写出测试来说明你到底担心什么问题。如果碰到一个只会讲解理论、但是亲自动手写测试程序时反而写不出来的人,你就知道其理论是虚的了。

#5


使用人数不能代表并发数,如果你说200个人必定都在线,而且必须通过 ajax定时轮询向服务器请求数据,那你普通的PC机做服务器可能撑不住,如果只是普通的点击查看,绝对无压力的

#6


另外,你这个就是aspx/html+ajax+handler,你的AjaxService就相当于BaseHandler,对应Page的BasePage,这是一种很常见的项目开发方式

#7


引用 4 楼 sp1234 的回复:
关于统一管理日志和权限,并不是说按照入门书的写法就不能方便的管理。asp.net也是一个比较成熟的框架,有各种层次(例如global.asax)可以对请求注入各种管理功能。所以单独这样一句话,并不是来放弃aspx的根本性的理由。

最主要地是,你发这个帖子,提不出什么具体的经过测试的“bug或者问题”来。如果你担心“200人访问时的并发性”,那么你就先想出一个测试用例来,然后给出其运行结果的数据,来说明这样做会降低多少效率。

其实会写程序根本不是什么技术,真正的技术是会写出测试来说明你到底担心什么问题。如果碰到一个只会讲解理论、但是亲自动手写测试程序时反而写不出来的人,你就知道其理论是虚的了。

我还真不知道怎么写出模拟200人同时在线操作数据库数据的这个测试来测试这个aspx/html+ajax+handler框架

#8


引用 6 楼 starfd 的回复:
另外,你这个就是aspx/html+ajax+handler,你的AjaxService就相当于BaseHandler,对应Page的BasePage,这是一种很常见的项目开发方式

对啊,就是这样一个模式

#9


引用 7 楼 net_08 的回复:
我还真不知道怎么写出模拟200人同时在线操作数据库数据的这个测试来测试这个aspx/html+ajax+handler框架

自动测试脚本+压力测试
只知道有这东西,但因为这主要是测试的职责,所以没去详细了解过

#10


先实现使用起来再说吧,200人的并发量也不算多,除非你们的数据处理量超级大,如果你一个表有几千个字段,那真的是大,那可以使用ccache,集群负载,分步式等来优化速度.

#11


遇到问题就解决啊,LZ认为能做出多高端的系统 能遇到.net和和HTML的瓶颈。 IHttpHandler处理异步请求问题

#12


200人真的不算多,而且同时在线的就更少了。所以我觉得支持这些人不会有什么问题。但是你的硬件也得跟的上才行。

#13


不建议把所有东西都写在一个AjaxService中~~~

分而治之~ 

#1


用一个类型还是100个类型来写代码,只会影响到将来程序开发是否清晰方便,对于你的所说的那种事情能有什么区别呢?

#2


引用 1 楼 sp1234 的回复:
用一个类型还是100个类型来写代码,只会影响到将来程序开发是否清晰方便,对于你的所说的那种事情能有什么区别呢?

这样可以统一管理权限和日志,而且前端的显示速度比传统的.aspx快,但是没用实际应用到项目上试过。

#3


除了不套用入门书的写法(而这一点本身是好的)以外,就你的问题而言,看不出有什么问题所以不知道你到底担心什么。

你自己设计了一个框架,那么等你做得深入了一些之后再讨论具体问题。而且一个框架只有到你写了20个测试用例、每天至少运行1000个测试之后,才知道有什么问题。

没有必要做一定点东西就开始到处“找问题”。

#4


关于统一管理日志和权限,并不是说按照入门书的写法就不能方便的管理。asp.net也是一个比较成熟的框架,有各种层次(例如global.asax)可以对请求注入各种管理功能。所以单独这样一句话,并不是来放弃aspx的根本性的理由。

最主要地是,你发这个帖子,提不出什么具体的经过测试的“bug或者问题”来。如果你担心“200人访问时的并发性”,那么你就先想出一个测试用例来,然后给出其运行结果的数据,来说明这样做会降低多少效率。

其实会写程序根本不是什么技术,真正的技术是会写出测试来说明你到底担心什么问题。如果碰到一个只会讲解理论、但是亲自动手写测试程序时反而写不出来的人,你就知道其理论是虚的了。

#5


使用人数不能代表并发数,如果你说200个人必定都在线,而且必须通过 ajax定时轮询向服务器请求数据,那你普通的PC机做服务器可能撑不住,如果只是普通的点击查看,绝对无压力的

#6


另外,你这个就是aspx/html+ajax+handler,你的AjaxService就相当于BaseHandler,对应Page的BasePage,这是一种很常见的项目开发方式

#7


引用 4 楼 sp1234 的回复:
关于统一管理日志和权限,并不是说按照入门书的写法就不能方便的管理。asp.net也是一个比较成熟的框架,有各种层次(例如global.asax)可以对请求注入各种管理功能。所以单独这样一句话,并不是来放弃aspx的根本性的理由。

最主要地是,你发这个帖子,提不出什么具体的经过测试的“bug或者问题”来。如果你担心“200人访问时的并发性”,那么你就先想出一个测试用例来,然后给出其运行结果的数据,来说明这样做会降低多少效率。

其实会写程序根本不是什么技术,真正的技术是会写出测试来说明你到底担心什么问题。如果碰到一个只会讲解理论、但是亲自动手写测试程序时反而写不出来的人,你就知道其理论是虚的了。

我还真不知道怎么写出模拟200人同时在线操作数据库数据的这个测试来测试这个aspx/html+ajax+handler框架

#8


引用 6 楼 starfd 的回复:
另外,你这个就是aspx/html+ajax+handler,你的AjaxService就相当于BaseHandler,对应Page的BasePage,这是一种很常见的项目开发方式

对啊,就是这样一个模式

#9


引用 7 楼 net_08 的回复:
我还真不知道怎么写出模拟200人同时在线操作数据库数据的这个测试来测试这个aspx/html+ajax+handler框架

自动测试脚本+压力测试
只知道有这东西,但因为这主要是测试的职责,所以没去详细了解过

#10


先实现使用起来再说吧,200人的并发量也不算多,除非你们的数据处理量超级大,如果你一个表有几千个字段,那真的是大,那可以使用ccache,集群负载,分步式等来优化速度.

#11


遇到问题就解决啊,LZ认为能做出多高端的系统 能遇到.net和和HTML的瓶颈。 IHttpHandler处理异步请求问题

#12


200人真的不算多,而且同时在线的就更少了。所以我觉得支持这些人不会有什么问题。但是你的硬件也得跟的上才行。

#13


不建议把所有东西都写在一个AjaxService中~~~

分而治之~