AS就跟JS差不多,也是Web开放的一种规范吧,相信大家都知道JS与C#交互。这两天项目做集成开放,都是都flex builder4做的flash,然后把数据传出来,保存在数据库中,这过程中需要与C#交互。在此在网上进一步查找了些资料,手头项目完成了,我也把这个实现整理整理。
其实AS与C#交换我个人理解有两种方式,一种是直接调用基于C#语言实现的web service,另一种就是与JS交互,然后再让JS与C#交换,其实我这次用到的是第二种。下面分享中AS调用web service,直接描述在flex builder中新建项目了,高手的忽略。
第一步、构建界面。用于接受用户输入及结果输出。包括:1个Text输入组件,1个按钮组件,10个标签组件
第二步、添加Webservice组件。根据Web服务提供者的说明,构建Webservice组件。代码如下:
1 <mx:WebService id="ws" wsdl="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl" 2 useProxy="false" showBusyCursor="true"> 3 <mx:operation name="getWeatherbyCityName" result="resultOK()"> 4 <mx:request> 5 <theCityName> 6 {city.text.toString()} 7 </theCityName> 8 </mx:request> 9 </mx:operation> 10 </mx:WebService>
注意:operation组件中的name属性需要和待使用的方法的名字相同。result的属性是在调用方法成功后执行的Action Script 方法。operation还有其他属性,鉴于例子很简单,就不一一使用了。
第三步、编写Action Script方法。本例中使用了三个方法: resultOK()用于显示结果的,showMessage()用于显示说明,getfocus()用于当输入栏得到焦点时清空输入栏内容的。下面是resultOK()的分析:
1 public function resultOK():void{ //显示接受的结果 2 arrayResult=new ArrayCollection(); 3 arrayResult=ws.getWeatherbyCityName.lastResult; 4 5 //显示今天的情况 6 jin1.text=arrayResult[6].toString().substring(0,arrayResult[6].toString().indexOf(" ")); 7 jin2.text=arrayResult[6].toString().substring((arrayResult[6].toString().indexOf(" "))+1); 8 jin3.text=arrayResult[5]; 9 jin4.text=arrayResult[7]; 10 11 //显示明天的情况 12 ming1.text=arrayResult[13].toString().substring(0,arrayResult[13].toString().indexOf(" ")); 13 ming2.text=arrayResult[13].toString().substring((arrayResult[13].toString().indexOf(" "))+1); 14 ming3.text=arrayResult[12]; 15 ming4.text=arrayResult[14]; 16 17 //显示后天的情况 18 hou1.text=arrayResult[18].toString().substring(0,arrayResult[18].toString().indexOf(" ")); 19 hou2.text=arrayResult[18].toString().substring((arrayResult[18].toString().indexOf(" "))+1); 20 hou3.text=arrayResult[17]; 21 hou4.text=arrayResult[19]; 22 }
在使用Web服务返回的结果时,发现其结果保存在字符数组中的,在WSDL中是ArrayOfString,而Flex没有这种格式,在试过String,Array类型后,发现ArrayCollection类可以使用。然后就是显示结果,可根据WSDL说明来挑选信息。
第四步、使用按钮调用Webservice组件,发送Web服务信息。即调用ws.getWeatherbyCityName.send()方法。编译发布swf文件。
好了,代码都贴出来,直接复制下,就可以直接使用了。如果错误之处还请见笑哈。