ASP.NET网页编程之在ASP.NET Atlas中挪用Web Service
觉得J2EE好像有很多工具,比如servlet,jboss,tomcat,ejb什么的,可是微软的.NET怎么什么也没有啊?asp.net|web 在前一篇文章(在ASP.NETAtlas中挪用WebService――创立Mashup挪用远端WebService(基本常识和复杂示例))中,我先容了一些Atlas中对远程WebService举行Mashup的基本常识,并给出了一个最基本的没有涓滴用途例子。明天再回到这个话题上,我将给出一个更庞大点的,但有一些用途的例子――Yahoo!Weather。空话到此为止,让我们先熟习一下Yahoo!Weather服务:Yahoo!在其网站上供应了天色预告服务(http://weather.yahoo.com/),而且它也供应了WebService的接口(http://developer.yahoo.com/weather/)
从下面两个网页下面,我们能够晓得Yahoo!供应的天色Service的URL为http://xml.weather.yahoo.com/forecastrss,该服务另有两个参数:
p:要查询天色的地址代码(能够在http://weather.yahoo.com/查询到分歧中央的这个代码)。
u:前往了局中温度的单元,f代表华氏度,c代表摄氏度。
看来这个Yahoo!Weather服务还挺复杂的,让我们测试下好欠好用。先到http://weather.yahoo.com/查出来上海的地址代码为CHXX0116。然后在扫瞄器中输出http://xml.weather.yahoo.com/forecastrss?p=CHXX0116&u=c,嗯,前往了以下的一段不是很庞大的XML:
YahooWeatherServiceXMLResult
<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?>
<rssversion="2.0"xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0"xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<channel>
<title>Yahoo!Weather-Shanghai,CH</title><link>http://us.rd.yahoo.com/dailynews/rss/weather/Shanghai__CH/*http://xml.weather.yahoo.com/forecast/CHXX0116_c.html</link>
<description>Yahoo!WeatherforShanghai,CH</description>
<language>en-us</language>
<lastBuildDate>Thu,25May200611:00amCST</lastBuildDate>
<ttl>60</ttl>
<yweather:locationcity="Shanghai"region=""country="CH"/>
<yweather:unitstemperature="C"distance="km"pressure="mb"speed="kph"/>
<yweather:windchill="21"direction="260"speed="14"/>
<yweather:atmospherehumidity="78"visibility="299"pressure="0"rising="0"/>
<yweather:astronomysunrise="4:52am"sunset="6:50pm"/>
<image>
<title>Yahoo!Weather</title>
<width>142</width>
<height>18</height>
<link>http://weather.yahoo.com/</link>
<url>/UploadPic/2007-7/200777192443790.gif</url>
</image>
<item>
<title>ConditionsforShanghai,CHat11:00amCST</title>
<geo:lat>31.17</geo:lat>
<geo:long>121.43</geo:long><link>http://us.rd.yahoo.com/dailynews/rss/weather/Shanghai__CH/*http://xml.weather.yahoo.com/forecast/CHXX0116_c.html</link>
<pubDate>Thu,25May200611:00amCST</pubDate>
<yweather:conditiontext="Fog"code="20"temp="21"date="Thu,25May200611:00amCST"/>
<description>
<![CDATA[
<imgsrc="/UploadPic/2007-7/200777192443883.gif"/><br/>
<b>CurrentConditions:</b><br/>
Fog,21C<BR/><BR/>
<b>Forecast:</b><BR/>
Thu-ScatteredThunderstorms.High:25Low:20<br/>
Fri-AMShowers.High:26Low:18<br/>
<br/>
<ahref="http://us.rd.yahoo.com/dailynews/rss/weather/Shanghai__CH/*http://xml.weather.yahoo.com/forecast/CHXX0116_c.html">FullForecastatYahoo!Weather</a><BR/>
(providedbyTheWeatherChannel)<br/>
]]>
</description>
<yweather:forecastday="Thu"date="25May2006"low="20"high="25"text="ScatteredThunderstorms"code="38"/>
<yweather:forecastday="Fri"date="26May2006"low="18"high="26"text="AMShowers"code="39"/>
<guidisPermaLink="false">CHXX0116_2006_05_25_11_0_CST</guid>
</item>
</channel>
</rss>
<!--p1.weather.scd.yahoo.comuncompressed/chunkedThuMay2520:49:07PDT2006-->
我们能够看到,它供应的信息十分周全(连日出日落工夫都有……),上面让我们誊写asbxBridge页面来对这个Service举行Mashup。
起首,参考在ASP.NETAtlas中挪用WebService――创立Mashup挪用远端WebService(基本常识和复杂示例)这篇文章中的谁人asbx的声明,我们能够写出以下一段:
<?xmlversion="1.0"encoding="utf-8"?>
<bridgenamespace="Dflying"className="YahooWeatherService">
<proxytype="Microsoft.Web.Services.BridgeRestProxy"
serviceUrl="http://xml.weather.yahoo.com/forecastrss"/>
<methodname="GetWeather">
<input>
<parametername="p"/>
<parametername="u"value="c"/>
</input>
</method>
</bridge>
个中:<bridge>的namespace和className属性和<method>的name属性让我们在客户端JavaScript中能够经由过程Dflying.YahooWeatherService.GetWeather()如许的办法署名来会见这个Mashup。<proxy>的serviceUrl属性指定了Yahoo!WeatherService的URL。
GetWeather办法中界说了下面列出来的p和u两个参数,个中u参数我们指定了它的默许值为c(代表摄氏度),p参数将由挪用者卖力传过去。
写到这一步实在也够了,客户端将收到下面扫瞄器中看到的那一段XMLString,而且能够在客户端举行处置并显现。但客户端对XML的处置并非那末简单,也不是那末高效,同时经由过程收集传输太多不用要的信息也是一种华侈。以是这里我们使用asbx中内建的Transformer对这段XML处置一下,提掏出我们感乐趣的内容并以JSON的情势发给客户端。在<method>段中到场上面一段:
<transforms>
<transformtype="Microsoft.Web.Services.XPathBridgeTransformer">
<data>
<attributename="selector"value="channel"/>
<dictionaryname="namespaceMapping">
<itemname="yweather"value="http://xml.weather.yahoo.com/ns/rss/1.0"/>
</dictionary>
<dictionaryname="selectedNodes">
<itemname="Title"value="title"/>
<itemname="Description"value="item/description"/>
<itemname="CurrentCondition"value="item/yweather:condition/@text"/>
</dictionary>
</data>
</transform>
</transforms>
个中<transforms>声明暗示这个Mashup办法的前往值将会被一些transformer改动一下,内里声了然一个范例为Microsoft.Web.Services.XPathBridgeTransformer的transformer,暗示将用XPath表达式来转换。在这个XPathBridgeTransformer中要声明以下部分:
name为selector的一个attribute段,个中指定的value属性为一个XPath表达式,将拔取全部XPathBridgeTransformer将用到的数据段。
name为namespaceMapping的一个dictionary段,个中指定了这个XML文件中的namespace映照。假如鄙人面的选择节点过程当中我们用到了某个namespace,那末这里就必需有它的声明。这里我们在个中增加一个对yweather的映照,由于上面要用到。
name为selectedNodes的一个dictionary段,个中每个item的value属性是一个XPathString,用来从XML当选择出响应的值,name属性用来指定响应的在JavaScript中的属性称号。这里作为示例,我只获得个中三段内容,您能够看到,个中CurrentCondition的XPath顶用到了下面指定的namespaceMapping。
关于XPath的常识,我就未几讲了,感乐趣或是不太熟习的伴侣能够自行Google,网上资本良多。关于其他范例的Transformer,我也不是很熟习,从此假如碰到了我再讲讲。完成后的YahooWeatherBridge.asbx文件以下:
<?xmlversion="1.0"encoding="utf-8"?>
<bridgenamespace="Dflying"className="YahooWeatherService">
<proxytype="Microsoft.Web.Services.BridgeRestProxy"
serviceUrl="http://xml.weather.yahoo.com/forecastrss"/>
<methodname="GetWeather">
<input>
<parametername="p"/>
<parametername="u"value="c"/>
</input>
<transforms>
<transformtype="Microsoft.Web.Services.XPathBridgeTransformer">
<data>
<attributename="selector"value="channel"/>
<dictionaryname="namespaceMapping">
<itemname="yweather"value="http://xml.weather.yahoo.com/ns/rss/1.0"/>
</dictionary>
<dictionaryname="selectedNodes">
<itemname="Title"value="title"/>
<itemname="Description"value="item/description"/>
<itemname="CurrentCondition"value="item/yweather:condition/@text"/>
</dictionary>
</data>
</transform>
</transforms>
</method>
</bridge>
如今创立一个ASP.NETPage测试一下,起首仍然是反复了一千遍的ScriptManager,另有对Bridge的援用:
<atlas:ScriptManagerID="sm"runat="server">
<Services>
<atlas:ServiceReferencePath="YahooWeatherBridge.asbx"/>
</Services>
</atlas:ScriptManager>
然后一个HTMLSelect元素,内里列进了几个乡村和响应的乡村代码:
<!--placeselector-->
<selectid="place">
<optionselected="selected"value="CHXX0116">Shanghai,CH</option>
<optionvalue="USCA0746">MountainView,CA</option>
<optionvalue="CHXX0008">Beijing,CH</option>
</select>
一个HTMLButton,用来触发对Service的挪用:
<!--invoketheservice-->
<inputid="getWeather"type="button"value="GetWeather"/>
一段HTML用来显现了局:
<!--displayresult-->
<divid="result"style="display:none;">
<divstyle="background-color:Gray;font-weight:bold;">Title</div>
<divid="title"></div>
<divstyle="background-color:Gray;font-weight:bold;">Description</div>
<divid="description"></div>
</div>
然后是JavaScript,能够看到经由过程Dflying.YahooWeatherService.GetWeather()挪用了Mashup,并在办法前往后把经由transform的值输入到了页面上:
functiongetWeather_onclick(){
//newatlasSelectcontrol
varplace=newSys.UI.Select($(place));
//invokethebridgemethod
Dflying.YahooWeatherService.GetWeather({p:place.get_selectedValue()},onGetComplete);
}
functiononGetComplete(result){
$(result).style.display="block";
$(title).innerHTML=result.Title;
$(description).innerHTML=result.Description;
}
c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。 Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。 我的意思是.net好用,从功能上来说比JAVA强还是很明显的。 使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
页:
[1]