Flex调用不同参数类型的.Net WebMethod

       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  阅读(3190)  评论(8编辑  收藏  举报

导航