前几天配置好了Flex,接着就要开始用一用了,我参考flex的samples里的范例打算做一个连接天气预报服务的Flex程序,我一开始在Flex1.5里做,结果总是提示无法连接WebService,问了网友dannyr,他说我要修改下网站目录中Flex的配置文件flex-config.xml,在<web-service-proxy>的<whitelist>属性中添加WebService的URL,我看了下文件中的说明:
For security, the whitelist is locked down by default.
Uncomment the first two urls below to enable access to all URLs,
or the last two urls to enable access to the local server,
or add above the individual URLs you wish to access.
<url>http://*</url>
<url>https://*</url>
<url>http://{localserver}/*</url>
<url>https://{localserver}/*</url>
于是我就将http://*添加到了<url></url>中。
结果再次运行还是说连接不到WebService。我又重新把代码复制到Flex2.0里,改了几个语法变化的地方,结果Flex2.0就可以连接到WebService。搞不懂为什么。
星期六回到家里我仔细的找了下原因,原来Flex的WebService组件里有一个userProxy属性,在1.5里我把这个属性设置为false就能连接到WebService了。这个属性在FlexBuilder的智能感知里是没有的,真是害死我们这些初学者啊。
我连接上了天气预报的WebService可是它返回来的数据不是XML格式的,我还没搞清楚怎么用,所以这里我做了一个连接RSS阅读服务的程序,这个WebService通过所给的RSS连接返回解析出来的HTML代码。
这个Flex程序的代码如下:
< mx:Application xmlns:mx ="http://www.macromedia.com/2003/mxml" >
< mx:WebService id ="RSSService" useProxy ="false"
wsdl ="http://www.webservicex.net/RssToHTML.asmx?WSDL"
fault ="alert(event.fault.faultstring)" showBusyCursor ="true" >
< mx:operation name ="GetHTML" >
< mx:request >
< RSSURL > {tiRSS.text} </ RSSURL >
</ mx:request >
</ mx:operation >
</ mx:WebService >
< mx:Panel width ="500" height ="500" cornerRadius ="8" panelBorderStyle ="roundCorners" >
< mx:VBox horizontalAlign ="center" width ="100%" >
< mx:HBox >
< mx:Label text ="RSS Url:" width ="50" />
< mx:TextInput id ="tiRSS" width ="300" toolTip ="在此输入RSS连接地址" text ="http://bg5sbk.cnblogs.com/Rss.aspx" />
< mx:Button click ="RSSService.GetHTML.send()" label ="Get" width ="50" />
</ mx:HBox >
< mx:TextArea text ="{RSSService.GetHTML.result}" width ="400" height ="400" cornerRadius ="10" />
</ mx:VBox >
</ mx:Panel >
</ mx:Application >
生成的Flash: