2011-09-23 42 views
1

是否可以重試Web客戶端請求?奇怪的是,我的應用程序在嘗試連接到xml Web服務時會發出錯誤,但如果我重試,它會正常工作。我想它拋出一個錯誤之前重試2次,除非有人有更好的解決辦法:)WebClient重試

private void ApplicationBarLogin_Click(object sender, EventArgs e) 
     { 
      settings.UsernameSetting = Username.Text; 
      if (RememberPassword.IsChecked == true) 
      { 
       settings.PasswordSetting = Password.Password; 
       settings.RememberPasswordSetting = true; 
      } 
      else 
      { 
       settings.RememberPasswordSetting = false; 
      } 

      WebClient internode = new WebClient(); 

      internode.Credentials = new NetworkCredential(settings.UsernameSetting, settings.PasswordSetting); 
      internode.DownloadStringCompleted += new DownloadStringCompletedEventHandler(internode_DownloadStringCompleted); 
      internode.DownloadStringAsync(new Uri("https://customer-webtools-api.internode.on.net/api/v1.5/")); 
     } 

     public void internode_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
     { 
      if (e.Error != null) 
      { 
       MessageBox.Show(e.Error.Message); 
      } 
      else 
      { 
       MessageBox.Show("Authentication successfull."); 
      } 
     } 

回答

1

如果出現故障,您可以重新發出請求。通過記錄重新發出請求的次數,您可以確定何時向用戶顯示錯誤。這裏是對你的代碼的一個快速修改來展示我的意思。

private void ApplicationBarLogin_Click(object sender, EventArgs e) 
{ 
    settings.UsernameSetting = Username.Text; 
    if (RememberPassword.IsChecked == true) 
    { 
     settings.PasswordSetting = Password.Password; 
     settings.RememberPasswordSetting = true; 
    } 
    else 
    { 
     settings.RememberPasswordSetting = false; 
    } 

    WebClient internode = new WebClient(); 

    internode.Credentials = new NetworkCredential(settings.UsernameSetting, settings.PasswordSetting); 
    internode.DownloadStringCompleted += new DownloadStringCompletedEventHandler(internode_DownloadStringCompleted); 
    internode.DownloadStringAsync(new Uri("https://customer-webtools-api.internode.on.net/api/v1.5/")); 
} 

private int _retryCount = 0; 

public void internode_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     _retryCount++; 
     if (_retryCount < 3) 
     { 
      WebClient internode = (WebClient)sender; 
      internode.DownloadStringAsync(new Uri("https://customer-webtools-api.internode.on.net/api/v1.5/")); 
     } 
     else 
     { 
      _retryCount = 0; 
      MessageBox.Show(e.Error.Message); 
     } 
    } 
    else 
    { 
     _retryCount = 0; 
     MessageBox.Show("Authentication successfull."); 
    } 
} 
1

Web客戶端沒有任何內置的重試功能。

你應該看看自己之前建立重試邏輯,可能會告訴用戶這個問題。

+0

我不一定是在WebClient內重試功能後。我如何完成重試邏輯以適應我上面的代碼? – cvandal