代码之家  ›  专栏  ›  技术社区  ›  veljkoz Danko Valkov

WCF客户端-客户端应在何时关闭通道

  •  2
  • veljkoz Danko Valkov  · 技术社区  · 14 年前

    在典型的客户机服务应用程序中,服务在哪里是WCF,如何使用服务引用?

    例如,您是单独为每个调用实例化服务,还是打开一个服务并在客户端应用程序的整个生命周期中保持它?(当我引用“Instatiating Service”时,我的意思是实例化由svcUtil创建的服务对象)

    目前,我们在客户机上使用了一个服务实例,因为这似乎比总是为每个调用创建、打开和关闭服务都要快,但是现在,如果可以的话,我会漫游吗?这种方法的主要问题是出现超时(或者我们必须让会话打开10小时)、连接中断等,我们总是必须通过通道执行“isalive”以确保一切正常…

    如果它有任何相关性,应用程序是单线程的,并且身份验证是定制的(通过在头中插入auth令牌)。绑定是basichtp(或ws,在这种情况下并不重要)。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Faris Zacina    14 年前

    我个人更喜欢在方法调用返回之前保持通道打开,然后关闭它以释放资源。这是最干净的方法。每次初始化代理实例都需要几毫秒的时间,并且不会影响我的性能目标。

    拥有某种类型的ServiceClient Singleton是一个有趣的想法,但是正如您所说,它会带来很多副作用,所以我不确定这是一个聪明的方法,但是由于您的应用程序是单线程的,所以它不应该是一个大问题,您可能会有一些轻微的性能优势。

    如果保存毫秒数是任务关键的,那么您还可以拥有一个可以从中获取实例的服务客户端池。

    然而,第一种方法是最干净的。复杂性很差。

    推荐文章