FLEX中的Fluorine网关与WebService的区别

因为无论是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引用……",

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值