Flex2.0中有三种机制与服务器交互数据:RPC(Remote precedure call), Data Service, publish-subscribe messaging
后面两种需要Flex Enterprise Service的支持.
RPC: 发送异步请求到远程服务,并将结果直接返回给Flex应用.
RPC服务可以是HTTP URL, SOAP兼容的Web service, Java Web应用的Java对象. 客户端的RPC服务组件是HTTPService, WebService和Remoting Object.
HTTPService和WebService的使用不需要Flex Enterprise service的支持. Remoting Object必须有Flex Enterprise service的支持.
缺省情况下,Flash Player不允许跨域访问.因此,RPC服务必须在同一个域中,或者在crossdomain.xml文件中定义.
RemoteObject组件使得可以使用服务端对象的方法, 而不需要将其配置成WebService. 你需要将服务端对象配置成远程服务目标.
WebService组件使得可以与Web Services交互. Web Services需要在WSDL文件中配置
HTTPService组件可以接收和发送HTTP GET, POST请求. HTTPServie在不能将接口定义为WebSerice和RemotingObject的时候,是一个非常好的选择.
比如: JSP, Servlet, Asp等等.
Flex应用将会被编译成二进制的SWF文件,送到客户端. 当Flex应用与外部服务交互时, SWF不需要重新编译,也不需要再次刷新.
可以直接使用Web Services或者HTTP Services, 而不需要在服务器的文件中进行配置. 方法如下:
在HTTPService组件中在url属性中直接引用wsdl值, 而不使用destination属性, 并且将useProxy属性设置为false
<mx:HTTPService
id="yahoo_web_search"
url="http://api.search.yahoo.com/WebSearchService/V1/webSearch"
useProxy="false"/>
<mx:WebService
id="macr_news"
wsdl="http://weblogs.macromedia.com/mxna/webservices/mxna2.cfc?wsdl"
useProxy="false"/>
或者在Action Script中这样使用:
// Import required packages.
import mx.rpc.http.HTTPService;
import mx.rpc.soap.WebService;
// Declare an HTTPService component.
private var yahoo_web_search:mx.rpc.http.HTTPService = new HTTPService();
yahoo_web_search.url =
"http://api.search.yahoo.com/WebSearchService/V1/webSearch";
empoyeeHTTP.useProxy = false;
// Declare a WebService component.
private var macr_news:mx.rpc.soap.WebService = new WebService();
macr_news.wsdl = "http://weblogs.macromedia.com/mxna/webservices/mxna2.cfc?wsdl";
macr_news.useProxy = false;
RPC Service组件的destination属性引用一个Flex Enterprise Services定义的一个目标.