SOAP Web服务(.net)中数据库连接的适当位置

时间:2009-08-11 14:23:33

标签: .net asp.net database web-services entity-framework

我有一个asp.net网站和一个数据库。

该网站有一个网络服务,用于存储我软件的反馈。

据我所知,IIS会将创建的对象重用于顺序请求。 这给出了在Web服务的构造函数中连接到DB的原因,正确实现Dispose()方法,并使用连接为每个[WebMethod] Request()提供服务。当前版本遵循这些模式。

另一方面,我担心对Web服务的顺序请求之间的时间间隔将大于数据库连接超时。因此,我需要捕获一些异常并重新创建连接(对吗?)

另一种方法是在每个[WebMethod] Foo()中连接和关闭。但我担心这可能会影响性能。

总结一下, 我应该在构造函数中连接到DB并在Dispose()中关闭连接,还是为每个请求连接并关闭数据库?

3 个答案:

答案 0 :(得分:5)

您应该为每个请求进行连接。

页面实例仅用于单个请求,因此您无法在其中存储连接以重复使用它。你必须将它存储在其他地方,这是如此复杂(有线程安全等),这绝对不值得。

关闭连接时,实际的数据库连接将返回到连接池。当连接池重新用于您创建的下一个连接对象时,连接池会正确地重置连接,这样您就可以获得以前使用的活动且不受影响的连接。

连接池工作正常,您应该使用它而不是尝试自己创建一个。

您无需执行任何特殊操作即可使用连接池,它内置于数据库驱动程序中。像往常一样打开和关闭连接对象。

答案 1 :(得分:1)

ADO.NET 2.0以后,数据库连接是合并的,因此连接的实际打开和关闭由数据库连接池管理,您可以在各个方法中自由打开和关闭它们,因为池将保持打开状态直到超时。您还可以配置池设置。

答案 2 :(得分:0)

您是否有任何连接池设施可供您使用?您的WS对象将从池中获取连接,并在完成时将它们返回。游泳池处理超时和真正的开放和关闭。

我的处理顺序是:

1)。如果你有连接池使用它。

2)。否则,请保持简单,打开和关闭每个请求。编写线程安全的连接池并非易事。

3)。如果性能证明是一个问题,那么调查每次连接开销是否是原因。如果是这样,找到一个游泳池implmentaiotn或(最后的手段)代码汇集自己。