我正在尝试从我的Windows Phone 8应用程序的在线RESTful源下载数据。总共大约有700个调用,每个调用都下载了一个可变长度的json字符串。 我一直在运行TargetInvocationExceptions,告诉我在大约65-80次调用之后发生http错误404(每次后续调用都会抛出此异常),但只有当我在循环中调用DownloadStringAsync方法时才会这样。每个下载json数据本身都可以完美地运行,因此可以使用在线源,并且内容也不会太大而无法处理。 我想我的执行时间有问题,但是到目前为止我找不到任何解决办法,但这仍然只是猜测。在这里打开任何建议。
这是我的代码(MainPage.xaml.cs):
namespace MyApp
{
static MyViewModel ViewModel;
public MainPage()
{
InitializeComponent();
ViewModel = new MyViewModel();
this.DataContext = ViewModel;
GetData();
}
void GetData()
{
int id = 1;
while (id <= 717)
{
GetJson(id++);
}
}
void GetJson(int id)
{
string url = Connector.BaseURL + id + "/";
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(AddModelToViewModel);
client.DownloadStringAsync(new Uri(url));
}
void AddModelToViewModel(object sender, DownloadStringCompletedEventArgs e)
{
try
{
string json = e.Result;
MyModel Model = JsonConvert.DeserializeObject<MyModel>(json);
ViewModel.Models.Add(Model);
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
我的ViewModel只包含
ObservableCollection<MyModel> Models
绑定到MainPage-View
中的ListView我还是Windows Phone编程的新手,所以请原谅不好的风格:)
编辑:这肯定是一次请求太多的事情。将GetData()方法一次分成50个请求的块,从按钮开始按下工作没有问题。如下面的评论中所述,我认为服务器不会阻止我的请求。 Windowsphone方面有限制吗?
适用的控制台代码:
static int count = 0;
static void Main(string[] args)
{
for (int i = 1; i <= 717; i++)
{
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DL);
client.DownloadStringAsync(new Uri(BaseURL + i + "/"));
}
Console.ReadKey();
}
static void DL(object sender, DownloadStringCompletedEventArgs e)
{
Console.WriteLine("#" + ++count + ": " + (e.Error == null ? "No error." : "Error!"));
}