连接断开时超时.请帮帮我



我想在代码中设置一个超时。当文件被下载时,我没有上网,它计数为60秒,如果连接没有恢复,就会发出一条消息。

这是代码:

string novoNome;
novoNome = strlocal + "\" + zipNome;
using (WebClient wcDownload = new WebClient())
{ 
      try
        {
            if (!Directory.Exists(strlocal))
            {
                Directory.CreateDirectory(strlocal);
            }
            #region comunicação para download
            //string saida;
            // cria uma requisição do arquivo para download
            webRequest = (HttpWebRequest)WebRequest.Create(url);
            webRequest.ReadWriteTimeout = 60000;
            webResponse = (HttpWebResponse)webRequest.GetResponse();                    
            //Perguntar o tamanho do arquivo
            Int64 fileSize = webResponse.ContentLength;
            Uri uri = new Uri(url);
            // Abrindo arquivo para Download
            strResponse = wcDownload.OpenRead(uri);
            // Criando novo arquivo para salvar no HDD
            strLocal = new FileStream(novoNome, FileMode.Create, FileAccess.Write, FileShare.None);
            #endregion
            #region transferencia
            int bytesSize = 0;
            byte[] downBuffer = new byte[2048];                   
            try
            {
                while ((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0)
                {                           
                    strLocal.Write(downBuffer, 0, bytesSize);
                    //if(this.IsAccessible)
                    this.Invoke(new UpdateProgessCallback(this.UpdateProgress), new object[] { strLocal.Length, fileSize });
                    //wcDownload.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wcDownload_DownloadProgressChanged);                              
                }                        
            }
            catch (WebException ex)
            {                        
                MessageBox.Show("WEB ERROO:" + ex.Message);
            }
            catch (Exception e)
            {
                MessageBox.Show("Erro:" + e.Message);
            }
            #endregion
            }
        catch (WebException ex)
        {
            MessageBox.Show("WEB ERROO:" + ex.Message);
        }
        catch (Exception e)
        {
            MessageBox.Show("Erro:" + e.Message);
        }                            
        finally
        {
            strResponse.Close();
            strLocal.Close();
        }
    }

抱歉英语不好,我是巴西人。

请帮忙!!

谢谢。

我相信您不需要自定义的超时处理实现。尝试将webRequest.Timeout属性设置为60000。

若要指定读或写操作超时前的等待时间,请使用ReadWriteTimeout属性。

重要

Timeout属性必须设置在GetRequestStream或调用了GetResponse方法。更改之后的Timeout属性调用GetRequestStream或GetResponse方法对无效

编辑:

如果您正在寻找自定义超时处理,那么您仍然可以利用内置的Timeout。因此,只需处理一个WebException,然后分析exeption Status属性,该属性可以指示导致超时的原因。可能有不同的状态代码,所以只需在本地机器上通过断开网络来模拟它(模拟网络连接丢失),看看状态是什么,然后你可以添加一些代码来处理这种情况,并启动自定义计时器60秒)。

我认为您需要处理以下状态:

  • 连接失败:无法在传输级别联系远程服务点
  • 超时:在请求的超时期间未收到任何响应

查看所有可用状态:WebExceptionStatus枚举

如果您需要更多详细信息或有什么不清楚的地方,请告诉我。

相关内容

  • 没有找到相关文章

最新更新