IIS或ASP.NET是否进行任何类型的连接限制?

时间:2009-04-07 02:20:43

标签: asp.net iis asynchronous ocracoke

我正在尝试创建一个ASP.NET Web服务,我可以用它来显示异步实现Web方法与同步实现Web方法之间的区别。这是一种概念验证,我可以用它来展示如何异步编写文件可以使应用程序更具可扩展性。为了进行比较,我实现了两个方法,RunSqlSync和RunSqlAsync。像这样:

[WebMethod]
public int RunSqlSync(string sql)
{
    // call SQL synchronously
}

[WebMethod]
public IAsyncResult BeginRunSqlAsync(string sql, AsyncCallback callback, object state)
{
    // call SQL asynchronously
}

[WebMethod]
public int EndRunSqlAsync(IAsyncResult result)
{

}

我希望通过使用方法的异步版本来处理更多并发请求,尤其是在SQL调用需要一段时间才能完成的情况下。不幸的是,对于这两种方法,似乎我达到了请求/秒限制(限制取决于SQL调用的延迟),我甚至没有接近最大化我的CPU。当我增加发送到Web服务的请求数量时(通过增加在Ocracoke负载测试中使用的用户数量),平均响应时间会增加而不会改变实际的TPS吞吐量。我在内部检测Web服务以测量请求完成所需的时间,并且在我的代码中,每个单独的请求都在同一时间处理,而不管负载如何。这让我觉得ASP.NET在某种程度上会受到限制。有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:2)

您可以在.net sql连接字符串调用中设置最大池大小。我相信默认值是最多20个连接,所以如果你点击那么它只会允许那些使用,基本上你会得到相同的结果。这是一篇关于连接池的文章。

http://www.15seconds.com/Issue/040830.htm

答案 1 :(得分:1)

就像schwig所说,你可能没有遇到带宽限制,你可能在你的进程中耗尽了工作线程。这是你应该从MS中读到的章节,我发现它具有启发性:

http://msdn.microsoft.com/en-us/library/ms998549.aspx