首页 新闻 会员 周边 捐助

Silverlight +wcf,如何关闭wcf连接

0
悬赏园豆:5 [已关闭问题] 关闭于 2016-09-25 13:58

后台是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的连接!!!

kotl的主页 kotl | 初学一级 | 园豆:5
提问于:2015-02-06 00:28
< >
分享
所有回答(1)
0

using is your best friend.

注意wcf的关闭动作可能需要特殊处理,请参考:http://www.cnblogs.com/artech/archive/2009/07/05/1517257.html

JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 08:54

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>

支持(0) 反对(0) kotl | 园豆:5 (初学一级) | 2015-02-06 10:41

@kotl: wcf后台,数据访问的地方IDbConnection、IDataReader全部通过using方式写试一下,数据库连接由连接池管理,不是有几次数据访问就开几个数据库连接。

支持(0) 反对(0) JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 10:48

@JeffWong: 谢谢你的回复。 您说的对,数据库连接是由连接池管理,但是由于数据库连接并没有返回,所以,你有几次访问就有几个数据库连接,知道数据库连接达到最大为止,

wcf 端 通过ado.net 访问,  确定已经dr.close 而且加上了GC.collcet().  

支持(0) 反对(0) kotl | 园豆:5 (初学一级) | 2015-02-06 11:40

@kotl: 越改越离谱。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2015-02-06 11:44

@kotl: GC.collcet()尽量不要显式调用,除非特殊场景需要手动内存回收。

支持(0) 反对(0) JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 11:43

@Launcher: 请大神帮忙~

支持(0) 反对(0) kotl | 园豆:5 (初学一级) | 2015-02-06 12:06

@JeffWong: 请大神帮忙~  你用Silverlight+wcf的时候没有遇到这样的情况么

支持(0) 反对(0) kotl | 园豆:5 (初学一级) | 2015-02-06 12:06

@kotl: 你的服务的实现应该这样:

class systemService : IsystemService

{

  void GetAllAssetByCondition()

{

      using(SqlConnection conn = new SqlConnection(""))

{

          SqlDataRead rdr = cmd.Execute...

}
}
}

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2015-02-06 12:34

@Launcher: ok。 

支持(0) 反对(0) kotl | 园豆:5 (初学一级) | 2015-02-06 13:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册