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有兴趣的朋友可以一起探讨和学习。
以下具体描述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有兴趣的朋友可以一起探讨和学习。
相关文章推荐
- .NET调用Oracle存储过程,使用数组类型的参数(如ArrayList)
- Jquery 调用asp.net ajax (web service/static page method)的示例(二)---复杂参数
- 返回多个不同类型参数的值(out)可变参数一维数组( params )把值从方法中带出(ref) 方法递归(方法自己调用自己与循坏类似注意return每次只能跳出一个方法))
- .net调用java webService返回类型是空
- 函数参数二:不同种类型函数参数及其调用
- .net反射调用值类型引用参数时的处理办法(转)
- 关于oracle存储过程调用问题。execute method error : DataAccessException,或者时参数个数或类型错误,等等
- C#调用Java端Web服务(CXF)时发生Integer参数类型无法传递的问题
- 问题(怎样在dephi中引用.net中定义的类.方法参数,参数类型为XMLdocument?我要调用此方法并把实例花的xmldocument类型的变量作为参数给它。)
- Jquery 调用asp.net ajax (web service/static page method)的示例(一)---简单参数
- .net 访问不同数据库之配置参数和参数数据类型
- .NET调用Oracle存储过程,使用数组类型的参数(如ArrayList)
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- .net的控件调用后台与前台方法不同的地方
- Oracle集合类型输出参数的PL/SQL存储过程及其Java调用
- 复习4次课(12月1日) 1.1 函数定义 1.2 函数的参数 1.3 函数的默认参数 1.4 函数的变量 1.5 函数的返回值 1.6 多类型传值和冗余参数 1.7 函数的递归调用
- MVC3.0 不同view层,调用相同Controller方法,但参数不同
- 简化函数调用之八 :Replace Parameter with Method(以函数取代参数)
- *函数参数传递类的类型,在函数内部动态创建不同类型的实例
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)