Я начал разрабатывать приложение в Silverlight, которое занималось загрузкой HTML-кода веб-сайта и последующим его анализом. С Silverlight 4 этого можно легко добиться, просто запросив повышенные разрешения. Однако в Silverlight 3 единственным способом получить HTML-код веб-сайта является вызов WebService. Моей первоначальной идеей было сделать следующее:
public class Service1
{
[OperationContract]
public void GetHtml()
{
Uri targetUri = new Uri("http://www.google.com", UriKind.RelativeOrAbsolute);
WebClient webClient = new WebClient();
webClient.DownloadStringCompleted += this.WebClient_DownloadStringCompleted;
webClient.DownloadStringAsync(targetUri);
}
private void WebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
}
}
Однако я понял, что как только я выполняю вызов, который также является асинхронным, из моего приложения Silverlight, я не могу получить HTML-код веб-сайта. Вот почему я изменил на следующее:
public class Service1
{
[OperationContract]
public string GetHtml()
{
Uri targetUri = new Uri("http://www.google.com", UriKind.RelativeOrAbsolute);
WebClient webClient = new WebClient();
return webClient.DownloadString(targetUri);
}
}
Я считаю, что последний подход не так хорош, так как он заморозит поток. Итак, мой вопрос, есть ли способ достичь первого подхода a.k.a. сделать асинхронный вызов из асинхронного вызова :). Любая помощь будет принята с благодарностью.
С наилучшими пожеланиями,
Кирил