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.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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现