Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无状态WCF服务能否从内置数据库连接池中获益?_Sql Server_Wcf_Ado.net_Connection Pooling - Fatal编程技术网

Sql server 无状态WCF服务能否从内置数据库连接池中获益?

Sql server 无状态WCF服务能否从内置数据库连接池中获益?,sql-server,wcf,ado.net,connection-pooling,Sql Server,Wcf,Ado.net,Connection Pooling,我知道,访问(n SQL Server)数据库的典型.NET应用程序不必为了从连接池中获益而做任何特别的事情。即使应用程序重复地打开和关闭数据库连接,它们也会被框架合并(假设凭证之类的东西不会随着调用而改变) 我的使用场景似乎有点不同。当我的服务被实例化时,它会打开一次数据库连接,做一些工作,关闭连接并返回结果。然后它被WCF拆下,下一个传入呼叫将创建该服务的新实例 换句话说,每次客户端调用都会实例化我的服务,如[ServiceBehavior(InstanceContextMode=Insta

我知道,访问(n SQL Server)数据库的典型.NET应用程序不必为了从连接池中获益而做任何特别的事情。即使应用程序重复地打开和关闭数据库连接,它们也会被框架合并(假设凭证之类的东西不会随着调用而改变)

我的使用场景似乎有点不同。当我的服务被实例化时,它会打开一次数据库连接,做一些工作,关闭连接并返回结果。然后它被WCF拆下,下一个传入呼叫将创建该服务的新实例

换句话说,每次客户端调用都会实例化我的服务,如[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]。该服务访问SQL Server 2008数据库。我使用的是.NETFramework3.5SP1


连接池在这种情况下仍然有效吗?或者我需要以单例的形式或通过其他方式(IInstanceContextProvider?)滚动我自己的连接池。如果可能的话,我宁愿避免重蹈覆辙。

访问(n SQL Server)数据库的典型WCF应用程序不必为了从连接池中获益而做任何特别的事情。即使应用程序重复地打开和关闭数据库连接,它们也会被框架合并(假设凭证之类的东西不会随着调用而改变)


服务实例模型创建并分解类的一个实例,而不是整个appdomain。SqlClient连接池是per,因此您将获得免费午餐。

尽管这是一篇老文章,但我觉得添加到其中很重要

如果遵循典型场景(在服务对象中实例化ADO.NET对象),则ADO.NET数据库连接池在每次调用WCF服务中不起作用

虽然我确实理解上述理论和论点,但它们只是:理论

一个简单的Windows窗体应用程序将多次执行打开、查询、关闭步骤,它将向您显示第一个open()调用需要相当长的时间,例如2秒或3秒,并且后续的调用和查询速度很快,这就是连接池的效果

如果在每次呼叫的WCF服务中输入相同的代码,则每次呼叫、第一次呼叫和所有后续呼叫都会获得2-3秒的延迟。 结论-如果在服务中执行典型的ADO实例化,则ADO.NET数据库连接池在每次调用WCF服务中不起作用


您必须在自定义服务主机中实例化ADO对象,并在需要时添加适当的同步代码,或者在没有数据库连接池的情况下生活。

这与正常情况有什么不同?我认为拆除WCF服务意味着拆除它所在的appdomain,而不仅仅是调用它(可选)Dispose()关于它。很好的问题,我几乎问了同样的问题。我面临着同样的问题。我使用了所有良好的默认做法,比如使用连接,并在连接仍然打开时关闭连接。但我认为默认的WCF服务是每会话一次的,并且每次都会从不同的客户端创建新的实例,连接池有效吗?我都看到了答案。那么最后的结论是什么?