首页 > AIR/RIA > Flex 构建 WebService 应用—-天气预报为例

Flex 构建 WebService 应用—-天气预报为例

最近做公司的一个项目,需要与公司别的部门进行资料串联。商量之后,选择的方式非侵入式的资料串联方式(何谓侵入式资料串联?比如说直接连接别人的 DB 读取资料,众所周知,这是不可取的。)。具体的,就是对方生成 WebService,然后我这边通过WebService抓取所需资讯。

今天对方把WebService生成好了,然后请我们测试抓取资料是否OK,测试的例子因为涉及公司的机密,在这里该成天气预报的例子写下来:

如果你是一个学习Flex的新人,那么请先安装Flex Builder3或者给Eclipse安装Flex的插件。这个例子中我们采用国家气象局提供的WebService来查询天气预报,WebService地址如下:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl。你可以在浏览器中打开这个地址,从中可以看到这么一段xml:

  • - <s:element name=”getWeatherbyCityName”>
  • - <s:complexType>
  • - <s:sequence>
  • <s:element minOccurs=”0″ maxOccurs=”1″ name=”theCityName” type=”s:string” />
  • </s:sequence>
  • </s:complexType>
  • </s:element>
  • - <s:element name=”getWeatherbyCityNameResponse”>
  • - <s:complexType>
  • - <s:sequence>
  • <s:element minOccurs=”0″ maxOccurs=”1″ name=”getWeatherbyCityNameResult” type=”tns:ArrayOfString” />
  • </s:sequence>
  • </s:complexType>
  • </s:element>

其中getWeatherbyCityName就是请求WS返回特定城市天气预报的函数名称,而theCityName就是城市名的参数(其实这个参数你只 要将合法的城市名以String格式传给getWeatherbyCityName就可以了。getWeatherbyCityNameResponse表述的是它的返回值,并且返回值类型为:ArrayOfString.因此在Flex程序用ArrayColection来接收返回值.

编写程序如下:

  •   <?xml version=”1.0″ encoding=”utf-8″?>
    <mx:Application xmlns:mx=”
    http://www.adobe.com/2006/mxml” fontSize=”13″
         layout=”absolute” horizontalAlign=”center”>
        <mx:Style source=”/style/style.css”/>
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.rpc.events.FaultEvent;
            import mx.collections.ArrayCollection;
            import mx.rpc.events.ResultEvent;
            function onload(event:ResultEvent):void{
                resetWeather();
                var weatherInfo:ArrayCollection = (event.result) as ArrayCollection;
                for(var i:int=0; i<weatherInfo.length; i++){
                    myWeatherReport.text += weatherInfo[i]+”\n”;
                }
            }
            function faultHandler(event:FaultEvent):void{
                Alert.show(event.fault.toString(),”WebService Error!”);
            }
            function resetWeather():void{
                myWeatherReport.text =”";
            }
        ]]>
    </mx:Script>
        <mx:WebService id=”ws” wsdl=”
    http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl”
             showBusyCursor=”true” result=”onload(event)” fault=”faultHandler(event)”/>
        <mx:VBox horizontalCenter=”center” horizontalAlign=”center”>
        <mx:TextInput id=”city” text=”上海”></mx:TextInput>
        <mx:Button label=”查询天气” click=”ws.getWeatherbyCityName(city.text)”/>
        <mx:TextArea id=”myWeatherReport” height=”500″ width=”600″ editable=”false”/>

    •  
      •     </mx:VBox>
        </mx:Application>

 

2009-08-11_152802

程式运行结果(实例):

欢迎转载,转载请注明来源和作者,谢谢!

4 条评论

  • (Required)
  • (Required, will not be published)

Verify Code   If you cannot see the CheckCode image,please refresh the page again!