现在的位置: 首页 > 综合 > 正文

[Flex]通过AS(ActionScript)创建调用WebService

2012年10月23日 ⁄ 综合 ⁄ 共 1272字 ⁄ 字号 评论关闭

       在写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/";
   
           
   
   
  }
  

 }

【上篇】
【下篇】

抱歉!评论已关闭.