posts - 165,  comments - 876,  trackbacks - 41

       在写Flex Applicaton时都习惯通过MXML来描述WebService然后调用,这样有个缺点就是WebService描述过于分散不利于维护(如后期需要给所有WebService加上SOAPHeader即使不算是什么恶梦也是一件很让人头痛的事情)。为了便于代码维护,于是想把程序所有Web Interface封装到Class中;当需要使用时实例相应Web Interface即可,在修改维护的时候统一修改相关Class,这样大大提高了Web Interface的维护性。

       但在实现过程中发现通过AS创建WebService后根本不能有效地调用。经过N的尝试和查找相关资料都还没有结果,这时对FLEX的文档发起牢骚(因为文档中相关WebService创建都是通过MXML来描述)。相信努力总会有结果,无意找到一个关于FlexBlog发现博主对Flex有比较深入的研究,于是就留言请教相关问题。虽然没有得到明确的解答,但他告诉我修改编译参数可以看到相关Applicaton生成的AS代码;通过这种方式就可以看到Flex是如果把MXML描述标记生成对应的AS代码。

       本以为这一次很快就能解问题,但实事又是一次打击;即使把Flex自动生成操作WebService的代码拷贝到我的Application中还是调用无效。本来想放弃不过想回来很不值,毕竟花了差不多一天的时间进去,那能没收获就出来!于是埋头分析Flex编译生成的代码和自己的代码有什么区别。经过几次尝试意外的调用成功了,但是代码的调用方式实在是非常让人费解!为了证实这样难以费解的调用方式,修改代码调试几次最终还是只能通过这种方式才能正常调用。

1)      必须在相应控件容器的initialize事件实例化WebService对象;在其他地方实例化或使用前实例化就产生调用无效!

2)实例化WebService对象后还必须调用对象的initialized方法。

       虽然问题已经解决,但处理的方式还是让我摸不着头脑;毕竟这样的处理方式实在是很难让人所理解。如果相关朋友通过AS创建调用WebService有别的方式请告诉一下,在弟在此不胜感激。

自定义规则代码:
public class EmployeeLogic extends WebService
 {
  var mAdd:mx.rpc.soap.Operation;
  public function EmployeeLogic()
  {
   super();
   super.wsdl="http://localhost/WebService3/Service1.asmx?WSDL";
   mAdd = new Operation(this,"Add");
   mAdd.resultFormat = "object";
   mAdd.request = {items:{}};
   mAdd.targetNamespace="http://tempuri.org/";
   
           
   
   
  }
  

 }

posted on 2006-09-07 10:31 henry 阅读(1222) 评论(7)  编辑 收藏 所属分类: Flex

FeedBack:
2006-12-07 17:54 | 小苗儿 [未注册用户]
extends WebService
我继承的是mx.services.WebService,可是继承后的文件没有被调用阿!
请问 WebService 是在那个包下面吗?还需要其他的设置吗?谢谢

  回复  引用    
#2楼 [楼主]
2006-12-08 15:47 | henry      
@小苗儿
你的类路径有点不对,很久没用忘了。你可以通过Flex添加类然后选择父类就可以了(这是在Flex2.0下)
  回复  引用  查看    
2007-07-13 12:58 | 蜀山雪狼      
最近正在学习AS3.
这篇文章非常不错. 多谢。
  回复  引用  查看    
2008-04-09 14:15 | luowen [未注册用户]
lz.我想知道你是改变了什么参数,怎么看到mxml编译的as代码的,可不可以公布一下。我的公司现在也在做flex的项目,偶正在学习中,望多多交流。
  回复  引用    
#5楼 [楼主]
2008-04-09 15:32 | henry      
在flex里有个编译参数添加可以得到相关编译后的AS,不过我也忘。你到网上找下
  回复  引用  查看    
2008-06-12 11:14 | tomking [未注册用户]
可以使用SWFDecompiler软件,把swf文件反编译成相应的as文件
对于楼主的提出的第一点,使用mx:WebService标签时,生成的实例化WebService对象方法是在相应控件容器的构造方法里,可能是由于这个原因,
通过AS创建WebService时,一定要写在initialize事件中,如果写在其他地方,可能就不能识别创建的WebService了,说的不对的地方,欢迎提出异议
  回复  引用    
2008-08-06 11:45 | 柒天柒柒 [未注册用户]
发现了更好的方法。

var ws1:mx.rpc.soap.WebService; //注意是mx.rpc.soap.WebService不是mxml那个

private function init()
{
ws1 = new mx.rpc.soap.WebService();
ws1.useProxy=false;
ws1.addEventListener(FaultEvent.FAULT,onFault);
ws1.addEventListener(ResultEvent.RESULT,onResult);
ws1.addEventListener(LoadEvent.LOAD,onLoad);
ws1.wsdl = "http://localhost:11542/WebServices/Users/Service.asmx?WSDL";
ws1.loadWSDL(ws1.wsdl);
}

private function onResult(event:ResultEvent):void
{
this.txa1.text += event.message.body.toString()+"\n";
}

private function onFault(event:FaultEvent):void
{
this.txa1.text += event.fault + "\n";
}

private function onLoad(event:LoadEvent):void
{

ws1.CreateUserBySeek("系统管理员");
}


  回复  引用    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-09-07 10:37 编辑过
 
 


<2008年6月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

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


与我联系

搜索

 

常用链接

留言簿(20)

我参加的小组

我的标签

随笔分类

最新评论

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

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

60天内阅读排行