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引用……",

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fengyun14/archive/2009/03/13/3987085.aspx

你可能感兴趣的:(webservice)