1、首先找一個提供天氣預報webservice的URL,這里我們選擇。
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
該URL提供了多個獲取天氣的方法。
打開網站后我們可以看到有個getWeatherbyCityName方法,根據城市獲取天氣。
2、輸入我們想要獲取的城市名:然后點擊調用,頁面返回給我們的是XML內容,內容如下:
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/"> <string>湖南</string> <string>常德</string> <string>57662</string> <string>57662.jpg</string> <string>2013-1-22 1:43:29</string> <string>0℃/7℃</string> <string>1月22日 陰轉多雲</string> <string>北風微風</string> <string>2.gif</string> <string>1.gif</string> <string>今日天氣實況:氣溫:4℃;風向/風力:西北風 1級;濕度:74%;空氣質量:中;紫外線強度:最弱</string> <string> 穿衣指數:天氣涼,建議着厚外套加毛衣等春秋服裝。年老體弱者宜着大衣、呢外套加羊毛衫。 過敏指數:天氣條件極不易誘發過敏,可放心外出,享受生活。 運動指數:陰天,較適宜進行各種戶內外運動。 洗車指數:適宜洗車,未來持續兩天無雨天氣較好,適合擦洗汽車,藍天白雲、風和日麗將伴您的車子連日潔凈。 晾曬指數:天氣陰沉,不利於水分的迅速蒸發,不太適宜晾曬。若需要晾曬,請盡量選擇通風的地點。 旅游指數:陰天,氣溫稍低,會感覺稍微有點涼,不過也是個好天氣哦。適宜旅游,可不要錯過機會呦! 路況指數:陰天,路面比較干燥,路況較好。 舒適度指數:天氣陰沉,會感到有點兒涼,不過大部分人仍會有比較舒適的感覺。 空氣污染指數:氣象條件對空氣污染物稀釋、擴散和清除無明顯影響,易感人群應適當減少室外活動時間。 紫外線指數:屬弱紫外線輻射天氣,無需特別防護。若長期在戶外,建議塗擦SPF在8-12之間的防曬護膚品。 </string> <string>4℃/9℃</string> <string>1月23日 多雲</string> <string>北風微風</string> <string>1.gif</string> <string>1.gif</string> <string>1℃/10℃</string> <string>1月24日 多雲</string> <string>北風微風</string> <string>1.gif</string> <string>1.gif</string> <string> 常德市位於湖南省西北部,東濱洞庭,南通長沙,西連川黔,北鄰鄂西,距省會長沙150公里,距世界聞名的風景區張家界195公里。史稱“黔川咽喉,雲貴門戶”。常德不僅風景優美,而且人才輩出,歷代文人屈原、陶淵明、李白、劉禹錫等都曾在此寓居或游歷,留下了許多膾炙人口的詩章;老一輩革命家林伯渠、著名文學家丁玲、史學家翦伯贊等名人都誕生在常德。常德古稱武陵,歷史悠久,山川秀麗,歷來被稱為“洞庭明珠”和“湘西門戶”。常德市屬於中亞熱帶濕潤季風氣候向北亞熱帶濕潤季風氣候過渡的地帶。氣候溫暖,四季分明,熱量豐富,雨量豐沛,春溫多變,夏季酷熱,秋雨寒秋,冬季嚴寒。常德市年平均氣溫16.7℃,年降水量1200-1900毫米。常德名勝古跡遍布,最有名的當屬晉代詩人陶淵明曾描繪過的桃花源。當地最著名的景點是桃花源,春天來常德旅游可以看到漫山桃花的美景。桃花源3.28起為桃花節,歷時一個月,此時桃花山景區前面萬樹桃花盛開,煞是好看,故此時是來常德旅游的最佳時間。景觀:桃花源景區、九龍山、獅子岩、白龍井、龍鳳湖、闖王陵、古風民宅等。 </string> </ArrayOfString>
這時我們就可以根據獲取到的XML文檔內容來進行編程,以便顯示我們需要的信息。
3、添加web引用后,輸出我們自定義的web引用名WeatherWebService,如下:
然后就可以看到webservice服務已經添加好了:
下面便開始我們真正的引用Webservice的操作。
首先我們要從webservice中獲取省份和城市名稱,查看webservice網站,發現它提供了返回支持webservice的省份和城市的數據,並且是以Dataset形式返回的(good)。如下圖:
我們就可以根據獲取到的數據綁定省份和城市:
/// <summary> /// 綁定省份 /// </summary> public void BindProvince() { WeatherWebService.WeatherWebService weatherWebService = new WeatherWebService.WeatherWebService(); DataSet ds = weatherWebService.getSupportDataSet(); Province.DataSource = ds.Tables[0].DefaultView; Province.DataTextField = "Zone"; Province.DataValueField = "ID"; Province.DataBind(); } /// <summary> /// 根據省份ID綁定城市 /// </summary> /// <param name="zongID">省份ID</param> public void BindCity(string zongID) { WeatherWebService.WeatherWebService weatherWebService = new WeatherWebService.WeatherWebService(); DataSet ds = weatherWebService.getSupportDataSet(); DataView dv = new DataView(ds.Tables[1]); dv.RowFilter="ZoneID="+zongID; City.DataSource = dv; City.DataTextField = "Area"; City.DataValueField = "AreaCode"; City.DataBind(); } /// <summary> /// 根據省份綁定相應的城市 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Province_SelectedIndexChanged(object sender, EventArgs e) { string ID = Province.SelectedItem.Value.ToString(); BindCity(ID); }
效果如圖:
然后根據選擇的城市加載出其相應的天氣預報,我們再來仔細看下webservice提供的getWeatherbyCityName方法的詳細參數,如下圖:
可以看到返回的是一個數組,數組類型為string,長度為22,並且提供了每一個數組元素代表的數據。這樣我們自己聲明一個數組即可存儲返回的所有數據,獲取天氣代碼如下:
/// <summary> /// 根據城市名稱獲取天氣 /// </summary> /// <param name="cityName"></param> public void BindCityWeather(string cityName) { WeatherWebService.WeatherWebService weatherWebService = new WeatherWebService.WeatherWebService(); string[] wea = weatherWebService.getWeatherbyCityName(cityName); Label1.Text = wea[10]; Label2.Text = wea[6] + " " +wea[5] + " " +wea[7]; Label3.Text = wea[13] + " " + wea[12] + " " + wea[14]; Label4.Text = wea[18] + " " + wea[17]+ " " + wea[19]; Label5.Text = wea[11]; Label6.Text = wea[22]; Label7.Text = Convert.ToDateTime(wea[4]).ToLongDateString(); Label8.Text = wea[0] + " / " + wea[1]; Image1.ImageUrl = "~/images/weather/" + wea[8]; Image2.ImageUrl = "~/images/weather/" + wea[9]; Image3.ImageUrl = "~/images/weather/" + wea[15]; Image4.ImageUrl = "~/images/weather/" + wea[16]; Image5.ImageUrl = "~/images/weather/" + wea[20]; Image6.ImageUrl = "~/images/weather/" + wea[21]; CityPhoto.ImageUrl = "http://www.cma.gov.cn/tqyb/img/city/" + wea[3]; CityPhoto.AlternateText = City.SelectedItem.Text; }