您的位置:首页 > 其它

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

2006-09-08 12:43 302 查看
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有兴趣的朋友可以一起探讨和学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐