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


    前言

    之前项目一直是发布在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.100shareimageimg1.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
      

  • 相关阅读:
    Python自动化开发课堂笔记【Day02】
    Python自动化开发课堂笔记【Day01】
    Python自动化开发课堂笔记【Day01】
    Python自动化开发课堂笔记【Day01】
    SOCKET.IO 前后端使用
    socket.io的emit使用清单
    nodejs 教程
    斗地主滑动选牌&&出牌
    Cocos Creator大厅+子游戏模式
    cocoscreator热更新
  • 原文地址:https://www.cnblogs.com/atuotuo/p/4208168.html
Copyright © 2020-2023  润新知