我开发了一个WPF的应用程序,它是通过调用wcf来和服务端通信的,我这WPF用到很多的线程,这程序经常会发生一个问题,就是运行一段时间后,请求wcf会超时,不稳定。我每次用wcf的时候,仅仅是new一个client对象来调用接口,这是不是和Channel的使用有关系,小弟初用wcf技术,还请高手指点一下。

解决方案 »

  1.   

    描述不够具体,无法分析啊。可能出现的原因:WCF Service 的InstanceMode 可能是 single 的,而服务实例的 activityTimeout 设置的太短了。PS:WCF服务的实例,是在服务端ServiceBehavior里控制的。
      

  2.   

    超时的原因很多,比如网络不稳定。如果真的存在网络不稳定的情况,就把保持连接给去掉,使用PerCall的模式,每次请求就重新建立连接,类似访问网页那样,不要保持连接了。
      

  3.   

    我在一台pc上开了2个项目,一个是wpf,一个是wcf,wpf的服务地址是wcf的调试地址,我一次服务的调用不需要很长时间的,没多大的业务复杂度,所以和超时时间的设置应该是没有关系的。每次发生这问题的时候,我只好把wcf服务关了重开一下就又好了。
      

  4.   

    我认为可能是wcf服务产生阻塞之类的问题,导致wcf服务无法被请求到。
      

  5.   

    多线程和双工没有关系,双工是指服务端回调客户端。WCF本来就是面向多个客户端的,服务端本身就存在多线程。
      

  6.   

    我代码不太好贴,太多了,比较散,贴了也不能说明问题。我只能说,我用thread开辟一个持续运行的服务来调用service接口,再在thread中用dispatcher来调用UI部分的绑定触发。
    WPF里生成的WCF与silverlight的WCF有些不同,它不是一步调用的,以前我在silverlight里就从没发生过这问题。
    还有我想知道,new ServiceClient来调用接口和用里面的GenerateChannel来生成一个service对象来调用接口在使用上区别大吗?
      

  7.   

    请把错误的详细信息。服务端的配置贴出来看看。还有你的ServiceBehavior的定义
      

  8.   

    就是请求wcf超时,我像问,wcf在什么情况下,会导致程序请求接口没反应?