如:有一个按键,里面有访问WCF服务的,我一不留神在按键上点击了二三次,这时客户端就会出现假死状态,要等很长时间才能运行,我猜原因是,我的代码是每次访问,我都会新建一个实例,用完立即就释放。所以同时点二三次就会同新建二个新实例访问WCF,所以一时无响应。我现在有种方法可以解决这个问题,就是在程序一开始就建立一个全局共享的实例,平时就是连接的,不释放,除非程序关闭,果然用了这种方法后,以后可以频繁乱点热键访问WCF,速度感觉 很快,也没有出现假死状态。可是新的问题来了,假如我网络断了,即使立即连接上去,我的程序也不能用了,必需退出再进才可以。好,我现在又想到在访问之前,我首先判断这个全局实例能不能用,如果不能,我再打开,可惜我在程序里跟踪几次,在网络断掉的情况下,共享实例的状态还是被打开,但是一访问WCF就出错,说这个连接也释放不能打开,唉,哪个仁兄明白的提醒一下我

解决方案 »

  1.   

    1,如果你的WCF服务是多线程或支持可重入的,那么即使有多个客户端访问,也不会产生假死现象!2,你想保持服务连接,不应该只是判断这个全局实例能不能用,而应该使用心跳检测的方式来维持连接的状态!
      

  2.   

    关于你第一个问题,肯定支持多线程,我测试过,用5台机子同时对同一个WCF服务频繁访问,也不会出现问题,即使一个机子程序假死,不影响其它机子的运行,也就说我后台服务是不受影响的。一般出现假死状态是,一个机子上的同一个程序里同时访问WCF服务【用新建方式,用后,立即销毁】会出问题。
    关于你第二个问题,现在都.net 3.5也,不会还只能用心跳方式吧,难道没有自己方便的检测