0

为了测试可以同时处理多少个异步请求,我创建了一个示例控制台应用程序,它向我的 Web 应用程序发送请求:

    static void Main(string[] args)
    {
        const string url = "http://localhost/cip/AsyncPage.aspx";

        ThreadStart del = delegate
        {
            Console.WriteLine("Starting request");
            WebRequest request = WebRequest.Create(url);
            request.GetResponse();
            Console.WriteLine("Response ready");
        };

        for (int i = 0; i < 50; i++)
        {
            new Thread(del).Start();
        }

        Console.ReadLine();
    }

AsyncPage.aspx 是一个 Async="true" 页面,包含一个从 1 到 10 循环的任务,每次迭代休眠 1 秒并写入响应虚拟数据(因此单个请求需要 10 秒)。

我注意到响应以 10 个批次返回。因此,10 秒后我收到 10 个响应,接下来的 10 秒后,我收到下 10 个响应。我用 Fiddler 做了类似的测试,结果是一样的 - 10 个请求似乎使用了所有 .... ASP.NET 资源?

我想知道哪个 ASP.NET 设置是造成这种行为的原因。

4

2 回答 2

2

在这种情况下,消费者平台上的本地负载测试不是一个选项。

有请求限制的不是 ASP.NET,而是 IIS 本身,它取决于您运行的 Windows 版本。本质上,除非您在服务器平台上,否则您最多只能使用 10 个。

如果您真的想对此进行负载测试,最好的想法是在真实服务器上运行它,您可能可以虚拟化以获得您需要的东西,尽管您显然不会从虚拟化服务器获得真实世界的结果。

参考:http ://technet.microsoft.com/en-us/library/cc268241.aspx

于 2012-12-22T19:41:41.783 回答
0

对于 Microsoft 软件的工作站版本的 Windows 上的十个连接的硬限制可追溯到 1993/4。

从一个人的角度来看,这就是明显推动限制的原因。直到那时 (93/94),Windows NT 在企业中的采用是由 Microsoft SQL Server 和 Microsoft SNA Server 这两个项目推动的。即使在非 Microsoft 环境(Banyan | Novell | Generic IP)中,这两种解决方案都可以在 Windows 的工作站版本上运行良好。从 SQL Svr 4.21 和类似日期的 SNA Server 版本开始,Microsoft 更改了服务器代码库,以便在 Windows 工作站版本上运行时只允许 10 个连接。毫不奇怪,由于组织必须购买服务器版本来支持现有服务器以实现与更新之前相同级别的功能,因此 NT Server 的采用率达到了顶峰。

此限制仅适用于在 Microsoft 平台上运行的 Microsoft 软件。因此,如果您将 Apache for Windows 或 ORACLE for Windows 放置在同一工作站版本的 Windows 上,那么您将不再局限于只有十个连接。您可以感谢 Redmond 的决定,这些决定对您的技术生活产生了积极影响。

于 2012-12-24T16:33:05.673 回答