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