上次系统平台嵌套FlashGIS地图的时候,也出现过跨域访问不了的问题
http://can4you.iteye.com/blog/829419
不过那次问题是跨域访问不同服务器上的FlashGIS Framework文件资源(如js,swf等静态文件),因为资源文件时部署在TOMCAT下的,所以问题的解决方案是在TOMCAT目录:webapps/ROOT/下放置一个crossdomain.xml文件,其内容为:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
而这次客户端flash在actionscript脚本中通过调用系统提供的webservice服务来完成它们之间的交互,获取flash上的路径坐标,上传到后台处理,部分actionscript脚本如下:
function update(imageId:String, index:String) {
//构建WebService类,传入服务的自述地址
var ImagePathService:WebService = new WebService("http://localhost:8080/myproj/services/imagePathService?WSDL");
//接收服务的返回结果
ImagePathService.saveNewPoints(imageId, index);
ResultObj = ImagePathService.update(imageId, index);
//判断返回结果并执行操作,onResult监测返回成功事件
ResultObj.onResult = function(result:Boolean) {
//返回值(由web服务返回类型决定)
if (result == true) {
Alert.show("上传成功!");
} else {
Alert.show("上传失败!");
}
};
//判断返回结果并执行操作,onFault监测返回失败事件
ResultObj.onFault = function(result) {
Alert.show("上传失败");
};
}
虽然在Tomcat目录下的webapps/ROOT/下已经存在crossdomain.xml文件,但是还是出现跨域访问不了的问题,无法调用webservice,百思不得其解,在网上找了一下,发现在crossdomain.xml中修改内容可以很好的解决,最后修改如下:
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all" />
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
相比之前的文件,就增加了<site-control和<allow-http-request-headers-from这两个tag节点,其中前一个不是必须的,但是如果少了<allow-http-request-headers-from节点的话,调用webservice就不行,问题就出在这,参考一下文章找出的解决方案:
http://blog.csdn.net/lena_20081215/archive/2009/01/21/3849009.aspx
解析:
1. WEB服务器是TOMCAT,所以crossdomain.xml文件是放置在根目录即webapps/ROOT/下
2. crossdomain.xml的内容配置和FlashPlayer的版本有关,在9版本之前,通过第一种配置是可以的,但是在版本9和之后的版本对安全策略有着更严格的要求,尤其是对webservice的调用
3. 如果安全策略文件放在根目录,文件名字就必须为crossdomain.xml,这都有严格要求;如果不放置在根目录,需要通过System.security.loadPolicyFile(xml的路径)来加载这个文件
4. 这次主要问题是安全策略的问题,以后如果再涉及到跨越问题时,解决问题就省事多了
其他参考文章:
http://hi.baidu.com/wosinmaiken/blog/item/637a6e4b998a49fe82025c85.html
http://hi.baidu.com/lotusxyhf/blog/item/f1c08a58b5771e88810a1870.html/cmtid/1b4b1036c0ea62d3a3cc2bf2
分享到:
相关推荐
webservice终极调用,解决一切问题。
3、解决方案: (1) JSONP:只支持GET方式 (2) CROS:跨域资源共享 以下为CROS解决方案: a.在WebService接口加上响应头信息: b.在web.config文件中加上相关配置节信息: 运用a或者b的解决方案后,浏览器头...
一般的解决方案是使用服务器代理(由同域服务器跨域请求后返回),但导致过于复杂(参见:Java-webservice-CXF-SOAP服务.docx服务器代理)。 如果服务器能够操作,也可以使用JSONP允许跨域请求。
解决Silverlight以TCP方式访问自托管WCF服务时遇到的“跨域访问”问题。
java cxf webservice接口解决跨域问题,cors-filter-1.7.jar、java-property-utils-1.9.jar,以及web.xml文件配置
webservice服务,网站异步访问webservice服务,网站异步访问webservice服务,网站异步访问webservice服务,网站异步访问webservice服务,网站异步访问webservice服务,网站异步访问
FLASH连接JAVA WEBSERVICE
C++应用QT开发请求访问webService。内部Get和Post两种请求全有。
ajax跨域请求WebService.asmx,程序非常完美的跑起来了。辛苦了一下午整理出来的。怕的就是以后自己忘记了。
主要介绍了 ajax跨域调用webservice服务例子和理解,最近ajax访问webservice遇到跨域的问题,网上搜索资料,总结如下
Unity访问WebService个人用
访问WebService处理拦截开始访问的消息
ajax跨域调用webservice实现文件上传,项目使用vs2019创建,请示用vs2019以上版本工具进行打开。
springmvc配置webservice服务的例子,下载直接可以运行,可以参考java的webservice服务的配置
使用客户端访问webservice源码 还是文档
Android访问webservice
单个可执行的WebService服务,使用Delphi开发的,在一个exe里面提供webservice的方法,这里包含所有源代码。
详细的描述了远程访问WebService方法,操作步骤及代码
下面小编就为大家分享一篇快速解决api、WebService跨域的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧