因为无论是FLEX,还是Silverlight、AJAX,他们都无法直接操作数据库(据最新消息,微软有了Microsoft .NET RIA Services,它可以直接操作数据库,我期待着她能在VS2010中出现),通常用WEBSERVICE等中间人的方式来进行SOAP协议的的文本传输,效率很低(大家试一下就会知道简直无法忍受),FLEX为了加快传输速度,于是制定了AMF。定义如下:
AMF是Action Message Format协议的简称,AMF协议是Adobe公司自己的协议,主要用于数据交互和远程过程调用,在功能上相当于WebService,但是AMF与 WebService中的XML不同的是AMF是二进制数据,而XML是文本数据,AMF的传输效率比XML高。AMF使用HTTP方式传输,目前主要是用于ActionScript中,即实现Flex和Server之间的通信。(引自:http://fykyx521.javaeye.com/blog/455837)
据说,AMF是WEBSERVICE速度的10倍。
跨域问题:
AMF在FLEX和.NET中间的解决方案是使用开源的FluorineFx,但其缺点是不能跨域,即,你生成的SWF文件必须和.NET程序放在一个服务器下。今天看到了用 crossdomain.xml 来实现跨域的方法(引自:http://www.mzwu.com/article.asp?id=975)。该XMl文件需放在.NET WEB程序的根目录下,XML内容形式如下:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="www.friendOfFoo.com" />
<allow-access-from domain="*.foo.com" />
<allow-access-from domain="105.216.0.40" />
</cross-domain-policy>
下面是二者在FLEX中的具体区别。
Fluorine:
FLEX调用Fluorine,是写:
<mx:RemoteObject id="sss" destination="fluorine" source="命名空间.类" >
<!-- 下面的name是在.NET中写的方法或函数名 -->
<mx:method name="getL" result="showN(event)" />
</mx:RemoteObject>
而调用WebService是写:
1、在 <mx:Application xmlns:mx="http://adobe.com" creationComplete="WS.GetData.send();">
这其中的GetData就是默认的方法,调用参数在其下可以继续写。
2、下面写:
<mx:WebService id="WS" wsdl="http://localhost/ser/service.asmx?WSDL" >
<mx:operation name="GetData" resultFormat="Object" />
</mx:WebService>
但在通常的WebService,是这样用的:
为webservice.sln的解决方案中建立了一个名为math.asmx的webservice,在这个webservice中我们编写了一个方法:
[WebMethod] public float add(float x,float y) { return x+y; } |
在地址栏中输入要调用webservice的位置,如
http://localhost:8088/webservice/math.asmx
此时,在myTest.sln下增加了一个"web引用"文件夹,在此文件夹下有一个"localhost1"项目,web引用文件夹下的localhost1(不固定),便是对另一个解决方案中的webservice引用。下面我们来看如何按这种引用方式在testForm.aspx表单中调用该webservice方法:
首先,我们在testForm.aspx表单中增加一个新按钮,命名为abc。
在abc按钮的abc_click()事件中编码如下:
private void abc_Click(object sender, System.EventArgs e) { float x,y; localhost1.math math1=new localhost1.math(); /*在此定义了webservice对象math1*/ x=16.1f; y=17.89f; msg.InnerHtml=math1.add(x,y).ToString(); /*在此调用了math1对象的add()方法,并将结果显示在名为msg的<span>上*/ } |
当我们单击abc按钮时,这段代码同样完成了相应的方法调用。
然后,我们只需在"引用"上右击,选择"添加web引用……",