silverlight 获取服务器上图片出现异常 “AG_E_NETWORK_ERROR”

时间:2021-11-29 16:30:24

前言

之前项目一直是发布在IIS上面使用HTTP访问,现在要求改为HTTPS,通过在IIS生成自签名后,打开HTTPS通道,可以将原来的程序已HTTPS的方式发布出来。 可参见

http://blogs.msdn.com/b/webapps/archive/2013/01/24/configure-a-wcf-service-with-ssl-and-consume-from-silverlight-via-https-including-cross-domain-scenario.aspx

-----

回到正题,在部署完毕之后,通过在服务器打开浏览器访问本地图片(图片已imageserive形式发布,例如:http://192.168.1.100\shareimage\img1.png), 可以正常访问。但是如果在另一台机器上(同网段的不同机器)上使用浏览器访问,在打开页面后出现无法读取图片的现象。。。

首先,我通过debug发现在注册的Image.ImageFailed(object sender, ExceptionRoutedEventArgs e)事件中可以发现“AG_E_NETWORK_ERROR”异常,按照这个关键字

在网上搜索了一下,真的是众说纷纭。。 我起初感觉是夸URI访问权限问题,所以先尝试了添加跨域访问文件“ClientAccessPolicy.xml”, 重启IIS,未见任何效果。 但是如果我直接把Image uri 放到浏览器中的话,是显示正常的,并且在Browser中用HTTP地址方式打开网页也能显示图片。。。这个问题令我百思不得其解。。。

第二天,继续努力,终于在微软论坛上找到了答案,个人猜测是之前用的 BitmapImage 加载图片是的方式可能不适合跨URI访问资源(Browser的地址是HTTS, 但是访问资源实在HTTP)这里还是没有完全明白其中缘由,但是问题总算解决了。

原先加载图片的代码:

var img = new Image() ;
var bi = new BitmapImage(); bi.UriSource = new Uri("http://169.15.16.83/img/13540001507152531.png", UriKind.Absolute);
bi.ImageFailed += (object sender, ExceptionRoutedEventArgs ea) =>
{
 // error!
// ea.ErrorException
}; img.Source = bi;

修改后的代码(通过WebClient下载图片后绑定数据):

var img = new Image();
WebClient downloadImage = new WebClient();
Uri imgUri = new Uri("http://169.15.16.83/img/13540001507152531.png");

downloadImage.OpenReadCompleted += (sender, e) =>
{
  if (e.Result.Length > 0)
  {
    BitmapImage image = new BitmapImage();
    image.SetSource(e.Result);
    img.ImageSource = image;
  }
};
downloadImage.OpenReadAsync(imgUri);

到此为止,虽然问题解决,但是还是不太明白之中的区别,还请各位不吝赐教。。。

另附上微软社区帖子地址,方便大家查看:https://social.msdn.microsoft.com/Forums/zh-CN/95b21533-bc82-4b6a-8f1e-4b2d0a3d890c/bitmapimageagenetworkerror?forum=windowsphonezhchs