web service 连接池问题

fletcher 2004-08-28 03:48:10
在我的项目里有多个web service 都有数据库连接我想让他们共享同一个连接怎么实现?
...全文
615 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddggggdd 2004-09-01
  • 打赏
  • 举报
回复
连接池应该可以满足,只要连接串相同,都会放在同一池中,如果非要别的办法,考虑一下连接工厂.
jamzh 2004-08-31
  • 打赏
  • 举报
回复
帮你顶!
fletcher 2004-08-31
  • 打赏
  • 举报
回复
还有更好的办法吗
pgwron 2004-08-30
  • 打赏
  • 举报
回复
心情不好,没分也回
Tomgus 2004-08-29
  • 打赏
  • 举报
回复
连接池允许应用程序从连接池中获得一个连接并使用这个连接,而不需要为每一个连接请求重新建立一个连接。一旦一个新的连接被创建并且放置在连接池中,应用程序就可以重复使用这个连接而不必实施整个数据库连接创建过程。


当应用程序请求一个连接时,连接池为该应用程序分配一个连接而不是重新建立一个连接;当应用程序使用完连接后,该连接被归还给连接池而不是直接释放。


如何实现连接池


确保你每一次的连接使用相同的连接字符串(和连接池相同);只有连接字符串相同时连接池才会工作。如果连接字符串不相同,应用程序就不会使用连接池而是创建一个新的连接。


优点


使用连接池的最主要的优点是性能。创建一个新的数据库连接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,而且这个过程通常是一个很耗时的过程。而采用数据库连接池后,数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接、认证到数据库服务器,这样就节省了时间。


缺点


数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库(这意味着资源的浪费)。


技巧和提示


1. 当你需要数据库连接时才去创建连接池,而不是提前建立。一旦你使用完连接立即关闭它,不要等到垃圾收集器来处理它。

2. 在关闭数据库连接前确保关闭了所有用户定义的事务。

3. 不要关闭数据库中所有的连接,至少保证连接池中有一个连接可用。如果内存和其他资源是你必须首先考虑的问题,可以关闭所有的连接,然后在下一个请求到来时创建连接池。


连接池FAQ


1. 何时创建连接池?

当第一个连接请求到来时创建连接池;连接池的建立由数据库连接的连接字符创来决定。每一个连接池都与一个不同的连接字符串相关。当一个新的连接请求到来时如果连接字符串和连接池使用的字符串相同,就从连接池取出一个连接;如果不相同,就新建一个连接池。


2. 何时关闭连接池?

当连接池中的所有连接都已经关闭时关闭连接池。


3. 当连接池中的连接都已经用完,而有新的连接请求到来时会发生什么?

当连接池已经达到它的最大连接数目时,有新的连接请求到来时,新的连接请求将放置到连接队列中。当有连接释放给连接池时,连接池将新释放的连接分配给在队列中排队的连接请求。你可以调用close和dispose将连接归还给连接池。


4. 我应该如何允许连接池?

对于.NET应用程序而言,默认为允许连接池。(这意味着你可以不必为这件事情做任何的事情)当然,如果你可以在SQLConnection对象的连接字符串中加进Pooling=true;确保你的应用程序允许连接池的使用。


5. 我应该如何禁止连接池?

ADO.NET默认为允许数据库连接池,如果你希望禁止连接池,可以使用如下的方式:

1) 使用SQLConnection对象时,往连接字符串加入如下内容:Pooling=False;

2) 使用OLEDBConnection对象时,往连接字符串加入如下内容:OLE DB Services=-4;
zhpsam109 2004-08-29
  • 打赏
  • 举报
回复
http://www.microsoft.com/china/msdn/events/featureevents/2004/MSDevTrainingCourse.mspx#XSLTsection124121120120
zhpsam109 2004-08-29
  • 打赏
  • 举报
回复
顶!
The123 2004-08-29
  • 打赏
  • 举报
回复
最好还是不要共享同一个连接,否则就会同楼上所说的

如果硬要使用,那就必须要用一个独立的线程监视这个连接了,一旦该连接被一个对象调用了,那其他需要调用这个连接的对象就排队等候吧,直到这个对象结束对连接的调用,下一个对象再上吧。呵呵,不知描述的是否清楚。
serf 2004-08-28
  • 打赏
  • 举报
回复
不要用静态连接对象,这样不管你的池有多大,只要不关闭,总是使用其中一个连接而已,容易产生访问冲突。
serf 2004-08-28
  • 打赏
  • 举报
回复
.net数据库连接池还没有特别明确的规格,目前是oleConnection和sqlConnection实现不一样。ole的是靠驱动程序的管理器去配置,程序内不用控制。sqlConnection是根据连接字符串确定连接池的,只要连接串同,就是使用的一个连接池。连接串内增加"Min Pool Size=x;Max Pool Size=y",x,y是池容纳连接的最小最大数限定。池是基于应用域,而不是进程管理的。
1979xt 2004-08-28
  • 打赏
  • 举报
回复
设一个静态的连接对象就行,不过共享连接容易造成使用时的冲突问题,而且.net中的连接对象并不是长连接的,对资源的消耗也不是很大,共享有什么好外吗?

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧