后台是wcf写的。
wcf 后面是AD0.Net. 用sqldatareader的时候,确定已经dr.close()了。
Silverlight 端,采用Task 将 Silverlight+wcf的异步编程 搞成 同步编程了。
var list = await SessionManager.systemServiceClient.GetAllAssetByConditionTaskAsync(queryString);
dg.ItemsSource = new PagedCollectionView(list);
SessionManager.systemServiceClient.CloseAsync();
最后也关闭了 serviceclient了。但是好像没啥用,数据连接好像并没有关闭
到sqlserver 里面查看连接数,
SELECT * FROM
[Master].[dbo].[SYSPROCESSES] WHERE [DBID]
IN
(
SELECT
[DBID]
FROM
[Master].[dbo].[SYSDATABASES]
WHERE
NAME='xxxx'
)
连接数,依旧很高。 上述 Silverlight代码 比如在一个button下,我点多少次button,sqlserver里面就有多少条记录,。 到了 连接池默认的100个的时候,就查询不出来了。
请问:Silverlight+wcf。 怎么关闭wcf的连接!!!
using is your best friend.
注意wcf的关闭动作可能需要特殊处理,请参考:http://www.cnblogs.com/artech/archive/2009/07/05/1517257.html
Silverlight 里面 添加添加服务引用,生成的代理类。 里面 只有CloseAsync 方法,这个方法是异步的,
调用了abort 方法也不管用。以下是服务端 wcf的配置,都是自动生成的
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="1000"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="NetFixAsset.Web.Service.customBinding0">
<binaryMessageEncoding />
<httpTransport />
</binding>
</customBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="NetFixAsset.Web.Service">
<endpoint address="" binding="customBinding" bindingConfiguration="NetFixAsset.Web.Service.customBinding0"
contract="NetFixAsset.Web.Service" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
@kotl: wcf后台,数据访问的地方IDbConnection、IDataReader全部通过using方式写试一下,数据库连接由连接池管理,不是有几次数据访问就开几个数据库连接。
@JeffWong: 谢谢你的回复。 您说的对,数据库连接是由连接池管理,但是由于数据库连接并没有返回,所以,你有几次访问就有几个数据库连接,知道数据库连接达到最大为止,
wcf 端 通过ado.net 访问, 确定已经dr.close 而且加上了GC.collcet().
@kotl: 越改越离谱。
@kotl: GC.collcet()尽量不要显式调用,除非特殊场景需要手动内存回收。
@Launcher: 请大神帮忙~
@JeffWong: 请大神帮忙~ 你用Silverlight+wcf的时候没有遇到这样的情况么
@kotl: 你的服务的实现应该这样:
class systemService : IsystemService
{
void GetAllAssetByCondition()
{
using(SqlConnection conn = new SqlConnection(""))
{
SqlDataRead rdr = cmd.Execute...
}
}
}
@Launcher: ok。