получите содержимое HTML страницы с Silverlight

Я пытаюсь получить содержимое HTML страницы с помощью Silverlight. Webresponse и классы запроса не работают в Silverlight.

Я сделал некоторый поиск с помощью Google, и я нашел что-то. Это - то, что я попробовал:

public partial class MainPage : UserControl
 {
  string result;
  WebClient client;

  public MainPage()
  {
   InitializeComponent();
   this.result = string.Empty;
   this.client = new WebClient();
   this.client.DownloadStringCompleted += ClientDownloadStringCompleted;
  }

  private void btn1_Click(object sender, RoutedEventArgs e)
  {
   string url = "http://www.nu.nl/feeds/rss/algemeen.rss";

   this.client.DownloadStringAsync(new Uri(url, UriKind.Absolute));

   if (this.result != string.Empty && this.result != null)
   {
    this.txbSummery.Text = this.result;
   }
  }

  private void ClientDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
  {
   this.result = e.Result;
   //handle the response.
  }
 }

Это дает мне ошибку периода выполнения после нажатия кнопки:

Ошибка периода выполнения Microsoft JScript: необработанная Ошибка в Приложении Silverlight исключение произошла во время операции, делая результат недопустимым. Проверьте InnerException на детали исключения. в System. ComponentModel. AsyncCompletedEventArgs. RaiseExceptionIfNecessary () в Системе. Сеть. DownloadStringCompletedEventArgs.get_Result () в JWTG.MainPage. ClientDownloadStringCompleted (Объектный отправитель, DownloadStringCompletedEventArgs e) в System. Сеть. WebClient. OnDownloadStringCompleted (DownloadStringCompletedEventArgs e) в Системе. Сеть. WebClient. DownloadStringOperationCompleted (Объектный аргумент)

Я попробовал многочисленные вещи, но все отказавшие.

Что я пропускаю? Или кто-либо знает, как я мог достигнуть этого по-другому?

Заранее спасибо!

5
задан Yustme 3 May 2010 в 10:44
поделиться

3 ответа

Это связано с clientaccesspolicy.xml. Подробнее читайте здесь: http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx

"Если запрос на подключение был от WebClient или класса HTTP к междоменному сайту, среда выполнения Silverlight пытается загрузить файл политики безопасности, используя протокол HTTP. Среда выполнения Silverlight сначала пытается загрузить файл политики Silverlight с именем "clientaccesspolicy.xml" в корне запрошенного целевого домена с помощью протокола HTTP.

Если файл "clientaccesspolicy.xml" не найден (веб-запрос возвращает код состояния 404), возвращается с неожиданным mime-типом, не является действительным XML или имеет недопустимый корневой узел, то среда выполнения Silverlight выдает запрос на файл политики Flash с именем "crossdomain.xml" в корне запрашиваемого целевого домена, используя протокол HTTP.

HTTP-перенаправления для файла политики не допускаются. Перенаправление для файла политики приведет к возникновению SecurityException "Доступ запрещен."

1
ответ дан 15 December 2019 в 06:19
поделиться

Попробуйте этот вместо методов btn1_Click и ClientDownloadStringCompleted . Он вызывает поток графического интерфейса после загрузки канала для обновления текстового поля. Если он не работает из-за ошибки в сети, он распаковывает исключение (содержащееся как внутреннее исключение в TargetInvocationException ) и повторно генерирует внутреннее исключение.

private void btn1_Click(object sender, RoutedEventArgs e)
{
    string url = "http://www.nu.nl/feeds/rss/algemeen.rss";

    this.client.DownloadStringAsync(new Uri(url));
}

private void ClientDownloadStringCompleted(object sender, 
                      DownloadStringCompletedEventArgs e)
{
    try
    {
        Dispatcher.BeginInvoke(() => this.txbSummery.Text = e.Result ?? "");
    }
    catch (TargetInvocationException tiex)
    {
        throw tiex.InnerException;
    }
}

Если ошибка повторится снова (я предполагаю, что это произойдет), опубликуйте трассировку стека и сообщение об ошибке здесь.

1
ответ дан 15 December 2019 в 06:19
поделиться

В этой строке

this.client.DownloadStringAsync(new Uri(url, UriKind.Absolute)); 

вы указываете асинхронную загрузку в фоновом потоке. А в следующей строке вы каким-то образом ожидаете, что она полностью завершена?

Если вы ничего не знаете о Threading, просто попробуйте сначала с помощью DownloadString. Тогда ваш код будет работать.

0
ответ дан 15 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: