繁体   English   中英

使用Silverlight获取页面的html内容

[英]get html content of a page with Silverlight

我正在尝试使用silverlight获取页面的html内容。 Web响应和请求类在Silverlight中不起作用。

我做了一些谷歌搜索,我发现了一些东西。 这是我试过的:

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.Net上System.Net.WebClient.OnDownloadStringCompleted(DownloadStringCompletedEventArgs e)的System.Net.DownloadStringCompletedEventArgs.get_Result()处的System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()处于JWTG.MainPage.ClientDownloadStringCompleted(Object sender,DownloadStringCompletedEventArgs e)。 WebClient.DownloadStringOperationCompleted(Object arg)

我尝试了很多东西,但都失败了。

我错过了什么? 或者有谁知道我怎么能以不同的方式实现这一目标?

提前致谢!

试试这个,而不是你的btn1_ClickClientDownloadStringCompleted方法。 它在下载订阅源后调用GUI线程以更新文本框。 如果由于网络上的错误而失败,它将解压缩异常(作为TargetInvocationException的内部异常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;
    }
}

如果错误再次发生(我想会发生这种情况),请在此处发布一个堆栈跟踪和错误消息。

这与clientaccesspolicy.xml有关。 在这里阅读更多: http//msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx

“如果连接请求是从WebClient或HTTP类到跨域站点,则Si​​lverlight运行时会尝试使用HTTP协议下载安全策略文件.Silverlight运行时首先尝试下载名称为的Silverlight策略文件使用HTTP协议在请求的目标域的根目录下的“clientaccesspolicy.xml”。

如果未找到“clientaccesspolicy.xml”(Web请求返回404状态代码),使用意外的mime类型返回,无效的XML或具有无效的根节点,则Si​​lverlight运行时将发出请求对于使用HTTP协议在请求的目标域的根目录下具有名称“crossdomain.xml”的Flash策略文件。

不允许对策略文件进行HTTP重定向。 策略文件的重定向将导致拒绝访问的SecurityException。“

你试一下

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));

    }

    private void ClientDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        Stream s = e.Result;
        StreamReader strReader = new StreamReader(s);
        string webContent = strReader.ReadToEnd();
        s.Close();
        this.txbSummery.Text =webContent;

    }

在这一行

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

您正在后台线程中声明异步下载。 在下一行,你不知何故预计它已经完成了吗?

如果您对线程不了解,请先尝试使用DownloadString。 然后你的代码将工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM