在SIlverlight中加载远程图像时AG_E_NETWORK_ERROR

时间:2009-11-24 22:48:21

标签: silverlight image cross-domain

我有一个ListBox,其中填充了从JSON响应中读取的项目。每个项目都有一个Image控件,用于显示Thumbnail属性给出的远程URL的缩略图。我创建了一个自定义IValueConverter来将网址转换为BitmapImage,但图片仍未显示。所以我终于意识到我可以使用ImageFailed事件捕获加载错误。

我得到的是 AG_E_NETWORK_ERROR 。我查看了Silverlight的URL Access Restrictions,该表说明在没有 crossdomain.xml 文件的情况下允许从其他域加载Image

我很肯定网址有效且指向图片,因为我可以直接从JSON复制并粘贴它并在浏览器中查看。然而,Silverlight拒绝加载它。

为什么会这样?

编辑:我安装了Fiddler,它确实显示加载Silverlight页面时发出的请求。但是,这些请求都不适用于图像。似乎Silverlight甚至没有尝试发出请求并自动抛出异常。

3 个答案:

答案 0 :(得分:5)

有人在Silverlight论坛上回答了这个问题。结果问题是我使用的是自动生成的调试页面,而不是IIS网站。 Silverlight不允许跨协议调用(在本例中,从file://到http://)。

答案 1 :(得分:1)

您是否真的尝试使用WebClient或Silverlight中的其他HTTP堆栈下载映像(二进制内容)?除非您可以编写该跨域文件,否则这是不可能的。

我相信你必须设置Image.Source的URL,然后让Silverlight解析图像。你也会看到Fiddler当时提出请求。

答案 2 :(得分:0)

另一种方式:

  1. 添加de Web项目以拥有自己的开发服务器。
  2. 将其设置为启动项目。
  3. 打开其属性。 Web选项卡:标记特定页面。
  4. Web选项卡/调试器(位于底部):标记Silverlight。
  5. 现在你可以运行&调试您的Silverlight应用程序而不安装ISS服务器。