none
WCF会话服务中客户端关闭代理的时机 RRS feed

  • 问题

  • 由于服务主要用于对数据库进行各种操作,所以在每次实例化服务时都会连接数据库。因此在单调服务和会话服务中选择了会话服务对实例进行管理,以防每次调用方法都会实例化一个服务,影响性能。但是参考网上的很多示例,都建议客户端在调用服务后要及时关闭代理,这样一来,在下次调用时,还要再次实例化一个代理,相应的,也就实例化了一个服务。这样的话,与单调服务还有什么区别呢?我现在的想法是,假如客户端为完成某一个功能,要多次调用一个服务中的几个方法,那么在该功能完成后再关闭代理。这样是否可行呢?

    2011年7月22日 2:14

答案

  • 你的想法是对的。

    1.单调服务,每次客户端调用都会实例化服务

    2.会话服务,支持会话的绑定,客户端每次调用,服务针对来自同一个客户代理实例的调用都是一个服务实例处理。

     

    显然,如果使用会话服务模式,但是客户端代理只是调用了一次 就销毁了,这样就体现不出来会话服务的优势,

    确实可以同一个代理执行多次调用,单个客户端代理实例 可以反复使用多次,不需要的时候可以释放,或者出错的时候关闭实例。

    释放资源可以带来一些性能方面的好处。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年7月22日 8:45
    版主

全部回复

  • 你的想法是对的。

    1.单调服务,每次客户端调用都会实例化服务

    2.会话服务,支持会话的绑定,客户端每次调用,服务针对来自同一个客户代理实例的调用都是一个服务实例处理。

     

    显然,如果使用会话服务模式,但是客户端代理只是调用了一次 就销毁了,这样就体现不出来会话服务的优势,

    确实可以同一个代理执行多次调用,单个客户端代理实例 可以反复使用多次,不需要的时候可以释放,或者出错的时候关闭实例。

    释放资源可以带来一些性能方面的好处。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年7月22日 8:45
    版主
  • 另外一种思路: 因为数据库的连接数是有限的,我们可以定义多个线程实例,实现一个类似于队列缓冲的一个管理器,所有的数据库请求都要过这个管理器,那么,这个管理器只需要管理指定N个线程的数据库连接,而不需要每请求一次,关闭一次了。
    2011年7月25日 0:54