twobin’blog

努力学习前端技术 | 其实技术也可以是通俗易懂的!

ArcGIS for Silverlight:关于尝试连接到REST端点时发生安全异常的解决方案

Silverlight跨域策略

要从远程服务器访问数据,远程服务器需要在 web 服务器的根目录下放置一个 clientaccesspolicy.xml 文件(例如 c:\inetpub\wwwroot)。ArcGIS for Silverlight 以 Microsoft Silverlight 平台为基础进行构建。出于安全方面的原因,不允许 Web 浏览器访问位于 Silverlight 应用程序所属 Web 域之外的数据。但是,如果已从服务器授予了权限,则 Silverlight 应用程序可以跨域加载数据。如果远程服务器上放置了一个 clientaccesspolicy.xml 文件,且此文件允许 Silverlight 连接此远程服务器上的服务,则可以实现跨域加载。

有关详细信息,请阅读主题使服务跨域边界可用

有关 clientaccesspolicy.xml 文件结构和功能的详细信息,请参阅主题 Silverlight 中的网络安全访问限制

例如,可以查看 ArcGIS Online 所使用的策略文件:http://services.arcgisonline.com/clientaccesspolicy.xml

clientaccesspolicy.xml 

复制代码
 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <access-policy>
 3   <cross-domain-access>
 4     <policy>
 5       <allow-from http-request-headers="*">
 6         <domain uri="*"/>
 7         <domain uri="http://*"/>
 8       </allow-from>
 9       <grant-to>
10         <resource path="/" include-subpaths="true"/>
11       </grant-to>
12     </policy>
13   </cross-domain-access>
14 </access-policy>
复制代码

crossdomain.xml 

1 <?xml version="1.0"?>
2 <cross-domain-policy>
3   <allow-access-from domain="*" header=”*” />
4 </cross-domain-policy>

此外,在Silverlight中访问本地发布的地图服务时,需要访问动态图层类型:ArcGISDynamicMapServiceLayer,并且要在Url中添加/rest/才可以正确访问,
如:Url="http://localhost/arcgis/rest/services/asdff/MapServer"。并添加事件:InitializationFailed="ArcGISDynamicMapServiceLayer_InitializationFailed",事件中代码如下:(当访问地图服务出错时,可以及时报错,了解出错的原因,便于改错。)

1 private void ArcGISDynamicMapServiceLayer_InitializationFailed(object sender, EventArgs e)
2  {
3     Layer layer = sender as Layer;
4     MessageBox.Show("加载图层失败:" + layer.InitializationFailure.Message);
5  }

则,本异常处理成功!

posted @   twobin  阅读(862)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
点击右上角即可分享
微信分享提示