C# 网络客户端重试

C# 网络客户端重试,c#,wpf,silverlight,xaml,windows-phone-7,C#,Wpf,Silverlight,Xaml,Windows Phone 7,是否可以重试webclient请求?偶尔,我的应用程序在尝试连接到XMLWeb服务时会抛出错误,但如果我重试,它会正常工作。我希望在抛出错误之前重试2次,除非有人有更好的解决方案:) WebClient没有任何内置的重试功能 您应该在通知用户问题之前自己构建重试逻辑。如果失败,您可以重新发出请求。通过记录重新发出请求的次数,可以确定何时向用户显示错误。下面是对代码的快速修改,以演示我的意思 private void ApplicationBarLogin_Click(object sender,

是否可以重试webclient请求?偶尔,我的应用程序在尝试连接到XMLWeb服务时会抛出错误,但如果我重试,它会正常工作。我希望在抛出错误之前重试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/"));
}

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.");
    }
}
private void ApplicationBarLogin\u单击(对象发送者,事件参数e)
{
settings.usernameseting=Username.Text;
if(RememberPassword.IsChecked==true)
{
settings.PasswordSetting=Password.Password;
settings.RememberPasswordSetting=true;
}
其他的
{
settings.RememberPasswordSetting=false;
}
WebClient internode=新的WebClient();
internode.Credentials=newnetworkcredential(settings.usernameseting,settings.PasswordSetting);
internode.DownloadStringCompleted+=新的DownloadStringCompletedEventHandler(internode_DownloadStringCompleted);
internode.DownloadStringAsync(新Uri(“https://customer-webtools-api.internode.on.net/api/v1.5/"));
}
私有整数_retryCount=0;
public void internode_DownloadStringCompleted已完成(对象发送方,DownloadStringCompletedEventArgs e)
{
如果(例如错误!=null)
{
_retryCount++;
如果(_retryCount<3)
{
WebClient internode=(WebClient)发送方;
internode.DownloadStringAsync(新Uri(“https://customer-webtools-api.internode.on.net/api/v1.5/"));
}
其他的
{
_retryCount=0;
MessageBox.Show(例如Error.Message);
}
}
其他的
{
_retryCount=0;
Show(“身份验证成功”);
}
}

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/"));
}

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.");
    }
}