2010-12-17 109 views
1

我已经创建了一个老式的.ASMX Web服务,并想知道内置的ADO.NET连接池如何使用它。ADO.NET连接池如何与.ASMX Web服务一起使用?

Web服务没有使用单例模式,所以它在每次请求时都会重新实例化。我的问题是连接会在每次服务请求后从池中删除,还是会在请求中保存在池中?我的服务非常频繁地被调用,但我不想每次都进行连接的设置和拆卸,如果可以避免的话。

我读过该池是为AppDomain维护的,但我不确定每个请求是否生成新的AppDomain。

我也很好奇,如果在这种情况下设置最小池大小(对于0以外的小数)是有益的。

有人知道吗?

回答

3

没有每个请求都不会生成新的应用程序域。该网站/应用程序的所有请求都位于同一个应用程序域中,因此共享连接池。一旦asmx请求与连接完成,它将它返回到池中,并且线中的下一个请求抓取它(假设池中没有另一个连接可用)。

澄清的一点。您可以拥有两个指向相同代码并且位于不同应用程序域的不同Web应用程序。这两个应用程序不共享任何内容(考虑两次启动相同的应用程序)。

我也好奇,如果这将是有益的 在这种情况下, 设置闵池大小(以0以外的 少数)。

因此,根据应用可能会有所帮助。建立连接需要时间,所以准备好一些准备就可以放弃。如果您有请求说使用一个连接,那么可以让一个人等待(这一切都取决于您希望应用程序响应的速度)。当你需要为一个请求打开3或4个不同的(你明白的)时,这真的可以发挥作用。那么为什么你需要多个连接?关于访问数据和用于登录数据库的单独线程(记录到数据库与文件是完全不同的对话)呢?现在你需要两个。有多种情况可以发挥作用。取决于你的数据库服务器持有一个开放的连接可以很便宜,所以将它设置为一个小数字可以是一个巨大的压力。 (为了记录,我已经看到连接到数据库的情景需要几秒钟,比如3-5,所以在这种情况下为用户保持开放连接是有益的。)

这是用于最大池大小
不,这不是有益的,因为对该服务的所有请求都使用相同的池(假设连接使用相同的连接字符串,并且不会触及不同的服务器,而且这些服务器具有单独的连接池)。没有可用的连接,是一种非常快速且毫无疑问的破坏服务性能的方法。

+0

谢谢,这是我怀疑,但想要一些验证。 – 2010-12-17 22:26:40

+0

我认为设置最小池大小意味着总会有x个可用的连接数量,并且在一段空闲时间之后不会被销毁。 – 2010-12-19 05:15:11

+0

你是对的我把它和Max Pool Size混在一起。 – kemiller2002 2010-12-19 14:56:36