posts - 165,  comments - 876,  trackbacks - 42

       Flex在调用WebService方面封装的非常好,在调用.Net WebMethod过程中参数对象或返回对象都可以和Flex本地对象容合,并不需要作特定的转换(不过.Net有些对象还是不能被Flex所识别,如果DataSet)。以下是描述Flex调用具备不同参数类型或返回值类型的.Net WebMethod,从而让不了解Flex朋友认识到Flex在调用WebService的方便灵活性。大家都知道.Net WebMethod提供参数或返回值的类型是非常多样的,可以是值类型(最简单的类型)、普通实体模型(只有值类型属性)或比较复杂的对象模型(内嵌其他对象)。Flex有调用这些WebMethod的方式都是一样,只是在构造参数有些差别。

以下具体描述Flex调用不同.Net WebMethod的过程。

相关WebMethod方法

            [WebMethod]

         public User LoadUser(int i)

         {

              User item= new User();

              item.Name = i.ToString();

              return item;

 

         }

         [WebMethod]

         public void AddUser(User[] items)

         {

              int count = items.Length;

         }

         [WebMethod]

         [System.Xml.Serialization.XmlInclude(typeof(User))]

         public Company LoadCompany(int i)

         {

              Company item  = new Company();

              item.Name = i.ToString();

              item.Items = new User[]{new User(),new User()};

              return item;

         }

         [WebMethod]

         public void AddCompany(Company[] items)

         {

              int count = items.Length;

         }

       WebMethod用到的数据模型定义:

       [Serializable]

     public class User

     {

         public string Name;

         public string Remark;

        

     }

     [Serializable]

     public class Company

     {

         public string Name;

         public User[] Items;

        

     }

Flex实现调用过程

Flex制定相应的WebService调用对象,可以通过AS(Action Script)MXML来描述,因为通过AS可以集中描述所以我比较喜欢采用这种方式。

相关WebService调用对象描述:

       public class Test extends BaseLogic

     {

         override protected function get wsdlString():String

         {

              return "http://localhost/WebService3/Service1.asmx?WSDL";

         }

          override protected  function OnCreateMethod():void

         {

              var mAdd:Operation = new Operation(this,"LoadUser");

              mAdd.resultFormat = "object";

              mAdd.request = {i:{}};

             

              mAdd = new Operation(this,"AddUser");

              mAdd.resultFormat = "object";

              mAdd.request = {items:{}};

             

              mAdd = new Operation(this,"LoadCompany");

              mAdd.resultFormat = "object";

              mAdd.request = {i:{}};

             

              mAdd = new Operation(this,"AddCompany");

              mAdd.resultFormat = "object";

              mAdd.request = {items:{}};

             

         }

         public function LoadUserResult(call:Function):void{

              getOperation("LoadUser").addEventListener("result",call)

         }

         public function AddUserResult(call:Function):void{

              getOperation("AddUser ").addEventListener("result",call)

         }

         public function LoadCompanyResult(call:Function):void{

              getOperation("LoadCompany ").addEventListener("result",call)

         }

         public function AddCompanyResult(call:Function):void{

              getOperation("AddCompany ").addEventListener("result",call)

         }

     }

 

创建Test实例

public var test:WebService = new Test();

还要在相应控件容器的initialize事件中调用以下方法:

test.initialized(this,"test");


调用
LoadUser方法

       test.LoadUser(1);

       可以通过以下方式访问返值成员。

       test.LoadUser.lastResult.Name来获取返回的用户名。


调用
AddUser方法

       var items:Array = new Array();

       items.push({Name:"a",Remark:"a"});

       items.push({Name:"b",Remark:"b"});

       test.AddUser(items);


调用
LoadCompany方法

       items.LoadCompany(2);


调用
AddCompany方法

       var users:Array = new Array();

       users.push({Name:"a",Remark:"a"});

       users.push({Name:"b",Remark:"b"});

       var items:Array = new Array();

       items.push({Name:"gentle",Items:users});

       test.AddCompany(items);

 

Flex在调用WebService上的确很方便,但有些.Net的对象类型Flex并不能很好的支持,除了DataSet外还有ArrayList,由于Flex序列化时没有为item明确类型,因此.Net WebMethod接收数据类型是ArrayList时就不能有效的进行内部对象转换。由于我也是刚接触Flex没多久因此可能还存在比较多的问题没有发现,对Flex有兴趣的朋友可以一起探讨和学习。

posted on 2006-09-08 12:43 henry 阅读(1771) 评论(8)  编辑 收藏 所属分类: Flex

FeedBack:
2006-09-10 10:59 | 含笑[匿名] [未注册用户]
你的flex和.net结合写的挺好的,这方面的中文资料很好,您能不能也写一个系列课程!
  回复  引用    
#2楼 [楼主]
2006-09-10 11:14 | henry      
@含笑[匿名]
说实话写课程实在没这个能力,不过我会把在学习Flex过程中所解决的问题写出来.
  回复  引用  查看    
2006-09-23 16:54 | 學徒 [未注册用户]
請問可以在actionscript直接操作sql嗎
  回复  引用    
#4楼 [楼主]
2006-09-24 16:13 | henry      
@學徒
这个我也不清楚,Flex Builder好象没有提供支持数据库操作对象.
  回复  引用  查看    
2006-09-30 09:22 | 學徒 [未注册用户]
那請問下,若不支持.net 的DATASET對象,那我可以去使用.NET的方法,去查詢SQL資料.並將結果保存在XML或者其他物件裡面返回到ACTIONSCRIPT裡面嗎?請指教!非常感謝!

  回复  引用    
#6楼 [楼主]
2006-10-08 09:40 | henry      
@學徒
DATASET只是个别不被Flex所解释的对象,其实大部可序列化的对象都可以被Flex有效转变成本地对象。
数据集你可以用ArrayList或数组。


  回复  引用  查看    
2006-10-10 14:12 | 學徒 [未注册用户]
請問有沒有關於flex的這方面得比較好得書,請幫忙推介一下.因為我能在書店買到的都是像FLASH MX2004等有ACTIONSCRIPT的內容..好像跟FLEX BUILD2不一樣.非常感謝!
  回复  引用    
2006-10-10 14:13 | 學徒 [未注册用户]
能否請你加我MSN forgot1210@hotmail.com謝謝!
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-09-08 12:48 编辑过
成果网帮您增加网站收入


相关链接:
 


<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

寻求伯乐,限广州地区有意联系


与我联系

搜索

 

常用链接

留言簿(20)

我参加的小组

我的标签

随笔分类

最新评论

  • 1. re: JQuery实现自定义对话框
  • 你好 我是出版社的编辑,我看到你博客中的内容,感觉写的非常好,如果想把这些内容和更多的人分享,可以和我联系,把这些东西写成书。 我的邮箱:books_522008@yahoo.com.cn ...
  • --庞永庆
  • 2. re: 如何设计业务逻辑?
  • 我赞成定义,这需要丰富的应用经验。 --引用-------------------------------------------------- Ivony...: --引用------------...
  • --Kai.Ma
  • 3. re: 如何设计业务逻辑?
  • 针对LZ提出的,我们如何知道做出来的东西能满足以后的需要呢? 我自己的感觉,在满足自己目前的前提下,留一些适当的余地。 当有新的需求提出,重新检查下有无类似的代码? 如果有,而且发现重写一个新的方...
  • --思考-总结
  • 4. re: 如何设计业务逻辑?
  • 学习了

    第一种,要调整参数,感觉改起来麻烦
    第二种,感觉好很多
  • --未公布
  • 5. re: 如何设计业务逻辑?
  • 看文章,看评论,颇多收获!
  • --水言木

60天内阅读排行