none
有关WCF服务每过一段时间后客户端调用就超时,重起服务端后正常的问题 RRS feed

  • 问题

  • 有个问题想请教各位,我在一边修改同事代码的同事一边学WCF,目前发现先这样一个问题,服务端这边应该是没啥问题,关键是过一段时间客户端就连接不上了,报超时(timeout)的错误,客户端和服务端配置文件中的的binding相关max属性都改的比较大如1000,重起后就一切正常,binding等均已用配置文件形式配置好了,相关访问代码如下: ---------------相关类---------------- public class BaseClientProxy : ClientBase, IBaseClientContract { public BaseClientProxy() : base() { } public BaseClientProxy(string endpointConfigurationName) : base(endpointConfigurationName) { } public BaseClientProxy(Binding binding, EndpointAddress address) : base(binding, address) { } #region IBaseClientContract 成员 public object Do(object para) { return this.Channel.Do(para); } #endregion } ---------------------访问代码在下----------------------- BaseServiceProxy loginServiceProxy = new BaseServiceProxy("LoginService"); LoginDTO loginDTO = new LoginDTO();//login contract loginDTO.UserCode = userCode; loginDTO.UserPassword = userPassWord; loginDTO.ClientIP = clientIP; loginDTO.ClientPort = clientPort; Object result = loginServiceProxy.Do(loginDTO, 0L); //loginServiceProxy.Close(); return (OperatorInfoDTO)result; 问题1: 我浏览以前的技术剖析8推荐其proxy缓存机制,难道这意味着不需要马上关闭,但在9的时候又建议关闭,请问我应该如何理解? 问题2: 请问产生超时错误是否是因为利用proxy访问后就没有close掉导致了?不过实际当中,平常也没怎么用,只是时间久了就会产生这样的问题 问题3:如果不是没有及时close的缘故,能否给出些建议,比如通过在哪些地方加上日志(服务器或客户端)来捕获查到这个原因了?
    nothing is impossible
    2011年5月28日 12:11

全部回复

  • 是不是你的客户端每隔一段时间就会调用一次  loginServiceProxy.Do 方法?

    你的 “访问代码” 有没有被并发调用的可能?


    你用的什么Binding?
    2011年5月30日 1:27
  • using(BaseServiceProxy loginServiceProxy = new BaseServiceProxy("LoginService"))
    {
    LoginDTO loginDTO = new LoginDTO();
    
    //login contract loginDTO.UserCode = userCode; 
    loginDTO.UserPassword = userPassWord; 
    loginDTO.ClientIP = clientIP; 
    loginDTO.ClientPort = clientPort; 
    
    Object result = loginServiceProxy.Do(loginDTO, 0L); 
    
    //loginServiceProxy.Close();
    
    return (OperatorInfoDTO)result;
    }
    
    
    用using吧,using会控制释放的时机。
    

    QQ: 79965521 Email: WolfLai@126.com
    2011年6月7日 13:54