`
can4you
  • 浏览: 101803 次
  • 性别: Icon_minigender_1
  • 来自: 天朝
社区版块
存档分类
最新评论

Flash访问webservice服务的跨域解决方案

阅读更多

 

上次系统平台嵌套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

分享到:
评论

相关推荐

    tomcat跨域解决方案

    ### Tomcat跨域解决方案 #### 一、背景与问题描述 在现代Web开发中,由于浏览器的安全策略限制,不同源之间的资源访问会受到限制,这种现象被称为“同源策略”(Same-Origin Policy)。同源策略是为了保护用户数据...

    webservice调用终极解决方案_webservice_源码

    "webservice调用终极解决方案.docx"很可能包含了详细的步骤、示例代码和常见问题解答,它可以帮助开发者快速理解和应用这些解决方案。文档中可能涵盖了如何创建WSDL文件、如何生成客户端代理类、如何调试和测试Web ...

    java cxf webservice接口解决跨域问题

    Java CXF Webservice接口在处理Web服务时,可能会遇到跨域问题,这通常是由于浏览器的安全策略限制了不同源之间的通信。解决这个问题的关键在于理解和应用CORS(Cross-Origin Resource Sharing)机制。CORS允许...

    完美解决api、WebService跨域的问题

    为了有效解决API和WebService的跨域问题,文档提供了两种有效的方法。 第一个方案是通过IIS配置来实现。IIS(Internet Information Services)是微软提供的一个用于Windows平台上的互联网服务器应用平台。通过IIS...

    Ajax请求WebService跨域问题的解决方案

    标题中的“Ajax请求WebService跨域问题的解决方案”指的是在Web开发中,当使用Ajax技术尝试从一个域名(源)向另一个域名(目标)的WebService发送请求时,由于浏览器的同源策略限制,会遇到跨域问题。同源策略是...

    解决Silverlight跨域访问问题

    本篇文章将深入探讨如何解决Silverlight通过TCP协议访问自托管的WCF(Windows Communication Foundation)服务时遇到的跨域访问限制。 首先,我们需要理解什么是跨域问题。在Web应用中,浏览器实施同源策略,禁止一...

    ajax跨域请求WebService.asmx

    在服务端,你需要确保Web服务配置允许跨域访问,这通常需要在Web.config文件中配置或者在Web服务类中添加特定的HTTP响应头。 5. **调用方法**:在客户端,使用jQuery或者其他JavaScript库(如axios或fetch)的Ajax...

    jquery跨域调用webservice

    JSONP 是一种解决跨域请求的有效手段,它通过动态创建`&lt;script&gt;`标签来请求跨域的数据,并通过回调函数处理返回的数据。JSONP 的关键在于服务器返回的数据会被包裹在一个客户端提供的回调函数中,从而绕过浏览器的...

    webservice服务

    webservice服务,网站异步访问webservice服务,网站异步访问webservice服务,网站异步访问webservice服务,网站异步访问webservice服务,网站异步访问webservice服务,网站异步访问

    ajax+webservice跨域实现文件上传

    【Ajax+WebService跨域实现文件上传】是一种在Web应用程序中常用的技术组合,它允许前端页面通过Ajax异步地与远程Web服务进行通信,同时解决跨域限制,实现文件的上传功能。这一技术主要涉及到以下几个核心知识点: ...

    webservice例子及跨域访问配置

    这个例子和跨域访问配置的主题将引导我们深入理解如何创建和调用Web服务,以及如何解决在JavaScript中跨域访问的问题。 首先,让我们探讨Web服务的核心概念。Web服务通常基于SOAP(Simple Object Access Protocol)...

    Flash2WebService.rar_flash_flash webservice

    描述进一步证实了这一点,提到"FLASH连接JAVA WEBSERVICE",这通常涉及利用ActionScript(Flash的编程语言)与服务器端的Web服务进行数据交换。 在Web开发中,Flash曾被广泛用于创建动态、交互式的用户界面,而Java...

    跨域WebService请求-Nginx_SOAP服务_Ajax客户端.docx

    因为JavaScript的同源策略不允许跨域POST请求,所以直接从Ajax客户端调用跨域的SOAP服务是不可能的。 【Nginx反向代理】为了解决这个问题,Nginx作为一个反向代理服务器可以被用来作为中间层,将客户端的请求转发到...

    访问WebService处理拦截开始访问的消息

    本文将详细探讨"访问WebService处理拦截开始访问的消息"这一主题,包括Web服务的工作原理、消息拦截的概念以及如何实现拦截开始访问的消息。 1. **Web服务的工作原理** Web服务基于SOAP(Simple Object Access ...

    InvokeWebService 动态访问WebService帮助类

    而InvokeWebService帮助类则是一个专门为动态调用WebService设计的工具,它使得开发者无需预先知道服务的具体接口或者方法,只需要提供WebService的URL地址,就可以方便地访问并执行相应的服务操作。 在Java开发...

    flex跨域访问问题

    CORS是一种现代的跨域访问解决方案,服务器可以通过设置特定的HTTP响应头`Access-Control-Allow-Origin`来允许特定的源进行跨域访问。在Flex中,你可以通过HTTPService或WebService组件配置`crossDomainPolicy`来...

    js跨域调用WebService的简单实例

    为了绕过浏览器安全策略限制,允许JavaScript访问跨域的WebService接口,文章中提供了一种解决方案。 描述:文章中作者详细介绍了实现跨域调用WebService的步骤,包括配置服务器、编写WebService代码和编写HTML页面...

    springmvc配置webservice服务的例子

    5. **部署和测试**:将项目打包成WAR文件并部署到应用服务器(如Tomcat),然后可以通过指定的URL访问和测试WebService服务。例如,如果你的服务地址配置为`/myWebService`,那么测试URL可能是`...

    单个可执行的WebService服务

    单个可执行的WebService服务是一种将Web服务功能封装在单一可执行文件中的技术。这种设计模式使得部署和运行Web服务更为便捷,因为它不需要依赖于IIS(Internet Information Services)或其他服务器环境。本项目使用...

Global site tag (gtag.js) - Google Analytics