Silverlight跨域,Silverlight在IIS中部署等问题解决之道
2012-11-07 15:40
423 查看
一:Silverlight跨域
Silverlight在设计的时候对网络安全方面做了很多考虑,具体可以看Silverlight SDK。
跨域通信是通过在其他域的根部署使用正确跨域策略文件的 Web服务,可以在该域中启用基于
Silverlight的应用程序要调用的 Web服务。Silverlight支持两种类型的跨域策略文件。
·
Silverlight 跨域策略 (clientaccesspolicy.xml)
·
Flash 跨域策略 (crossdomain.xml) 的子集
使用跨域策略文件的跨域通信
通常,如果基于 Silverlight的应用程序检测到其请求是一个跨域请求,将首先在
Web服务的应用程序根处查找 Silverlight跨域策略文件 (clientaccesspolicy.xml)。如果这个请求导致"404未找到"或其他错误,应用程序将在应用程序根处查找
Flash跨域策略文件 (crossdomain.xml)。不允许重定向跨域策略文件。此外,跨域策略文件保持对应用程序会话有效。
现在知道了只要在网站中部署一个跨域策略文件,就可以解决Silverlight跨域请求问题。跨域策略文件要放在哪里?
注意:跨域策略文件必须也只能放在网站的放置在根目录下。
clientaccesspolicy.xml配置:
<?xmlversion="1.0"encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from>
<domainuri="*"/>
</allow-from>
<grant-to>
<resourcepath="/"include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
crossdomain.xml配置:
<?xmlversion="1.0"?>
<cross-domain-policy>
<allow-access-fromdomain="*"
/>
</cross-domain-policy>
二:Silverlight在IIS部署
用silverlight开发的程序,部署到IIS上,会经常弹出“Sys.InvalidOperationException:
InitializeError error #2104 in control 'Xaml1':无法下载 Silverlight应用程序。请查看
Web服务器设置”异常。
出现该异常的原因:silverlight
程序ClientBin目录下的xap
和xaml 为后缀名的文件不被IIS请求识别。
解决方法:
在IIS中,添加MIME类型。
MIME 类型
.xaml application/xaml+xml
.xap application/x-silverlight-app
如仍有问题,请检查IE的配置,放开安全里面的Xaml
Active 下载等选项。
在IIS添加MIME类型,如图所示:
三:Silverlight动态绑定图片
用Image标签动态绑定异步请求数据时,在每次页面重新加载时,都会出现“Sys.InvalidOperationException: ImageError
error #4001 in control 'Xaml1': AG_E_NETWORK_ERROR” 异常。
Image标签绑定形式如下:
<Image
x:Name="rect"
Stretch="Fill" Canvas.Left="150" Canvas.Top="130"
Source="{Binding ProductImage}" </Image>
该异常原因:绑定发生在设置DataContext之前,所以Image路径还没有设置成你期望的值,就进行绑定,所以此时Image标签的source路径是不可用的。
修改方法码如下:
在xaml中去掉
Source="{Binding ProductImage}",DataContext绑定数据后,再对Image标签设置绑定值。例如:
<Image x:Name="rect"
Stretch="Fill" Canvas.Left="150" Canvas.Top="130"</Image>
private void ResponseReady(IAsyncResult asyncResult)
2
{
3
WebRequest request = asyncResult.AsyncState as WebRequest;
4
WebResponse response = request.EndGetResponse(asyncResult);
5
using (Stream responseStream = response.GetResponseStream())
6
{
7
DataContractJsonSerializer jsonSerializer =
8
new DataContractJsonSerializer(typeof(ProductList));
9
10
ProductList productList = jsonSerializer.ReadObject(responseStream) as ProductList;
11
new Thread(() =>
12
{
13
mygrid.Dispatcher.BeginInvoke(
14
() =>
15
{
16
mygrid.DataContext = productList.Products[0];
17
Binding binding = new Binding("ProductImage");
18
rect.SetBinding(Image.SourceProperty, binding);
19
}
20
); }).Start();
21
}
22
}
相关文章推荐
- Silverlight跨域,Silverlight在IIS中部署等问题解决之道
- Silverlight跨域,Silverlight在IIS中部署等问题解决之道
- Silverlight跨域,Silverlight在IIS中部署等问题解决之道
- Silverlight跨域,Silverlight在IIS中部署等问题解决之道
- Silverlight跨域,Silverlight在IIS中部署等问题解决之道
- Silverlight - IIS 7.5 部署SilverLight4网站以及问题解决
- 在IIS 中部署Silverlight及Web Service的问题与解决方法
- Silverlight之1:Silverlight 跨域及Silverlight 在 IIS 中部署等问题
- [ Silverlight]crossdomain.xml 解决 Silverlight 跨域访问的问题
- tomcat7部署文件服务器,解决跨域问题
- 解决VS调试Web应用无问题而部署在IIS上报500和403的问题
- Silverlight跨域问题的解决方法
- 解决IIS服务和用户上传的文件分别部署在不同的电脑上时,解决权限的问题
- silverlight下解决跨域问题,目前看到的正确阐述
- 2012服务器在IIS部署的SLL(https)网址谷歌浏览器无法访问的问题解决
- Silverlight网站IIS部署问题
- 解决IIS中部署WCF时,访问.svc文件的404错误问题
- 如何解决Silverlight集成到IIS无法显示页面问题
- Silverlight网站IIS部署问题
- IIS部署日志站点时出现的UTF8文件乱码问题及解决