Junky's IT Notebook

          統(tǒng)計(jì)

          留言簿(8)

          積分與排名

          WebSphere Studio

          閱讀排行榜

          評(píng)論排行榜

          Web Services帶來(lái)了什么

          作者:王昱

          摘要:本文介紹了Web Services的起源和基本原理,分析了在企業(yè)應(yīng)用中Web Services帶來(lái)的沖擊和變革,指出了Web Services的一些優(yōu)缺點(diǎn)以及如何正確地應(yīng)用Web Services.

          無(wú)論是在計(jì)算機(jī)雜志還是在Internet上,目前最熱門的話題莫過(guò)于“Web Services”。各個(gè)平臺(tái)之間的鋒爭(zhēng),各個(gè)新產(chǎn)品的發(fā)布,眾多新標(biāo)準(zhǔn)的制訂,大都和Web Services有關(guān)。

          我的一些朋友是這樣的一些人,他們總是用著最新的平臺(tái),嘗試著最新的技術(shù),他們喜歡變化,喜歡流行,用他們自己的話說(shuō),新技術(shù)創(chuàng)造新生活!可是,當(dāng)我的一個(gè)朋友,帶領(lǐng)他們一個(gè)部門的開(kāi)發(fā)人員,花了兩個(gè)月的,將他們內(nèi)部的管理系統(tǒng)用Web Services重新設(shè)計(jì)和實(shí)現(xiàn)了一遍,卻發(fā)現(xiàn)在實(shí)際使用的情況下,系統(tǒng)性能非常糟糕。他提出了這樣一個(gè)問(wèn)題:是不是Web Services現(xiàn)在還處于實(shí)驗(yàn)和市場(chǎng)炒作時(shí)期,根本沒(méi)有進(jìn)入實(shí)用的階段?簡(jiǎn)單的回答是:Web Services不是萬(wàn)能的,它有它的應(yīng)用范圍和優(yōu)勢(shì)劣勢(shì)。

          Web Services的起源

          Web應(yīng)用的巨大成功和不斷發(fā)展,使其滲透到商業(yè)領(lǐng)域和個(gè)人生活的各個(gè)方面。人們只要使用瀏覽器,就可以享受到各種各樣的Web服務(wù),例如網(wǎng)上購(gòu)物,網(wǎng)上交易,網(wǎng)絡(luò)游戲,預(yù)定車票,網(wǎng)上聊天和交友等等。與此同時(shí),由于Web技術(shù)所帶來(lái)的優(yōu)勢(shì)(統(tǒng)一的客戶端和較好的維護(hù)性),使一些傳統(tǒng)的應(yīng)用紛紛轉(zhuǎn)型到BS結(jié)構(gòu)上。

          然而,在發(fā)展中,逐步暴露了一些問(wèn)題。所有這些Web頁(yè)面都是為人準(zhǔn)備的,是讓人去閱讀,去輸入,去判斷。因此各種反映視覺(jué)效果的內(nèi)容占用了大量的網(wǎng)絡(luò)帶寬,例如各種圖片,字體信息,文字排版樣式等。而真正含有高價(jià)值的一些信息,被深深埋在這些顯示信息中,很難被其他應(yīng)用和程序所使用。更重要的是,各種web服務(wù)之間缺少交互和通訊的機(jī)制。

          程序之間的互相通訊很重要嗎?簡(jiǎn)單舉一個(gè)例子。

          假設(shè)你經(jīng)常去國(guó)外出差,在你回國(guó)以后,第一件事就是費(fèi)用報(bào)銷了。而你們公司有這樣的財(cái)務(wù)規(guī)定,所有的報(bào)銷款,都按報(bào)銷當(dāng)天的外匯比價(jià)進(jìn)行結(jié)算。因此在你填寫報(bào)銷單的時(shí)候必須先填寫每一筆在各個(gè)國(guó)家的花消,然后上網(wǎng)查出當(dāng)天的外匯比價(jià),填寫到報(bào)銷單上。剩下的事情也許不用你做了,你的報(bào)銷單填寫工具會(huì)自動(dòng)進(jìn)行換算和統(tǒng)計(jì)。

          覺(jué)得有什么不妥嗎?作為IT公司的員工,也許都有一個(gè)特點(diǎn),計(jì)算機(jī)能做的事情,盡量要計(jì)算機(jī)去做。外匯比價(jià)的查詢可以讓計(jì)算機(jī)自動(dòng)去做嘛!然而,讓你的程序自動(dòng)去網(wǎng)頁(yè)上查找指定的外匯比價(jià)可不是一件容易的事。因?yàn)檫@些網(wǎng)頁(yè)是給人閱讀的,人眼和大腦的反應(yīng)速度有多快,它們可以從一整頁(yè)信息中快速定位到你所要的內(nèi)容,而且無(wú)論網(wǎng)頁(yè)怎樣變化和改版都不會(huì)帶來(lái)太大的影響。而應(yīng)用程序想要做同樣的事就差得太遠(yuǎn)了。因此,現(xiàn)在需要的是專門為應(yīng)用程序制定的Web服務(wù)。

          隨著應(yīng)用程序之間通訊的需求越來(lái)越大,這就需要制定統(tǒng)一的標(biāo)準(zhǔn)和協(xié)議。HP公司是最先提出這個(gè)觀點(diǎn)的公司,他們制定了有關(guān)“e-Speak”的標(biāo)準(zhǔn)來(lái)保證應(yīng)用程序之間的交互,并聲稱將成為下一代Internet信息交互的標(biāo)準(zhǔn)。而隨后,MicroSoft意識(shí)到此計(jì)劃的美好前景,便推出了.Net戰(zhàn)略;IBM很快就發(fā)布了Web Services Toolkit(WSTK),和Web Services Development Environment(WSDE),申明對(duì)Web Services的全力支持。與此同時(shí),Oracle也開(kāi)發(fā)出自己的Dynamic Services,并和Oracle 8i Release 2集成在一起。在這以后,W3C統(tǒng)一制定了Web Services的各種標(biāo)準(zhǔn)。而SUN公司在宣布了自己的Web Services的框架以后,將Web Services的標(biāo)準(zhǔn)溶入J2EE的環(huán)境,使Web Services有了廣泛支持的基礎(chǔ)和平臺(tái)。

          Web Services的基本原理

          Web Services 是通過(guò)一系列標(biāo)準(zhǔn)和協(xié)議來(lái)保證程序之間的動(dòng)態(tài)連接。其中最基本的協(xié)議包括:SOAP, WSDL, UDDI

          • SOAP: 是“Simple Object Access Protocol”的縮寫,SOAP是消息傳遞的協(xié)議,它規(guī)定了Web Services之間是怎樣傳遞信息的。簡(jiǎn)單的說(shuō),SOAP規(guī)定了:
            1.
            傳遞信息的格式為XML。這就使Web Services能夠在任何平臺(tái)上,用任何語(yǔ)言進(jìn)行實(shí)現(xiàn)。
            2.
            遠(yuǎn)程對(duì)象方法調(diào)用的格式。規(guī)定了怎樣表示被調(diào)用對(duì)象以及調(diào)用的方法名稱和參數(shù)類型等。
            3.
            參數(shù)類型和XML格式之間的映射。這是因?yàn)椋徽{(diào)用的方法有時(shí)候需要傳遞一個(gè)復(fù)雜的參數(shù),例如,一個(gè)Person對(duì)象。怎樣用XML來(lái)表示一個(gè)對(duì)象參數(shù),也是SOAP所定義的范圍。
            4.
            異常處理以及其他的相關(guān)信息.

          • WSDL:是“Web Services Description Language”的縮寫.意如其名,WSDLWeb Services的定義語(yǔ)言。當(dāng)你實(shí)現(xiàn)了某種服務(wù)的時(shí)候(,股票查詢服務(wù)),為了讓別的程序調(diào)用,你必須告訴大家你的服務(wù)的接口.例如,服務(wù)名稱,服務(wù)所在的機(jī)器名稱,監(jiān)聽(tīng)端口號(hào),傳遞參數(shù)的類型,個(gè)數(shù)和順序,返回結(jié)果的類型等等.這樣別的應(yīng)用程序才能調(diào)用你的服務(wù)。WSDL協(xié)議就是規(guī)定了有關(guān)Web Services描述的標(biāo)準(zhǔn)。

          • UDDI: Universal Description, Discovery, and Integration的縮寫。簡(jiǎn)單說(shuō),UDDI用于集中存放和查找WSDL描述文件,起著目錄服務(wù)器的作用。

          如上圖,一個(gè)Web Services的生命周期是:

          1. 實(shí)現(xiàn)一個(gè)Web Services,使其能夠接受和響應(yīng)SOAP消息(現(xiàn)在有很多工具都可以幫助實(shí)現(xiàn))。

          2. 撰寫一個(gè)WSDL文件用于描述此Web Services。(現(xiàn)在有很多工具可以自動(dòng)生成WSDL文件)。

          3. 將此WSDL發(fā)布到UDDI上。

          4. 其他的應(yīng)用程序(客戶端)從UDDI上搜索到你的WSDL

          5. 根據(jù)你的WSDL,客戶端可以編寫程序(現(xiàn)在有很多工具可以自動(dòng)生成調(diào)用程序)調(diào)用你的Web Services。

          Web Services的缺點(diǎn)

          由于是基于XML的應(yīng)用,Web Services與生俱來(lái)地在擁有XML帶來(lái)的一切優(yōu)勢(shì)的同時(shí),不可避免地繼承了XML所帶來(lái)的一些限制。

          • Web Services通常需要大量的CPU資源。因?yàn)?/font>XML數(shù)據(jù)要經(jīng)過(guò)多步處理才能被系統(tǒng)使用。首先是效驗(yàn)(validate),檢查它的格式是否符合XML的規(guī)范,以及根據(jù)應(yīng)用程序定義(DTDSchema)檢查是否符合語(yǔ)義上的規(guī)范;然后還要進(jìn)行解析(parse),從XML文檔分解出單個(gè)的元素;最后還要轉(zhuǎn)換成應(yīng)用程序所需要的二進(jìn)制表達(dá)(例如,把“12” 轉(zhuǎn)換成整型12的二進(jìn)制表示)。

          • Web Services還意味著占用較多的內(nèi)存資源。在進(jìn)行XML解析的時(shí)候,會(huì)產(chǎn)生大量的臨時(shí)內(nèi)存對(duì)象。特別是在處理DOM對(duì)象的時(shí)候。這些大量的臨時(shí)對(duì)象對(duì)于象JAVA這類自動(dòng)回收內(nèi)存的語(yǔ)言和系統(tǒng)其實(shí)是一種負(fù)擔(dān),大量的臨時(shí)對(duì)象將會(huì)使系統(tǒng)每隔一段時(shí)間就會(huì)進(jìn)行內(nèi)存回收,從而降低系統(tǒng)的性能。當(dāng)然,現(xiàn)在有的Web Services的產(chǎn)品(如axis)采用了SAX技術(shù),大大減少了內(nèi)存的占用量。詳細(xì)信息請(qǐng)參考:(http://xml.apache.org/axis/index.html)。

          • 網(wǎng)絡(luò)資源的消耗也是Web Services應(yīng)用的一些限制。因?yàn)榛?/font>XML數(shù)據(jù)的傳遞通常數(shù)據(jù)量要比二進(jìn)制的協(xié)議(如RMI/IIOP)要大的多。這種額外的消耗在網(wǎng)絡(luò)資源比較緊張或網(wǎng)絡(luò)傳輸比較頻繁的應(yīng)用中會(huì)產(chǎn)生一定的影響。

          除了XML帶來(lái)的限制,Web Services本身也具有一些缺點(diǎn):

          • 到目前為止,Web Services還可以說(shuō)是一種無(wú)狀態(tài)(stateless)的服務(wù)。
            所謂stateless就意味著不保存客戶端服務(wù)調(diào)用者的任何信息。這是由Web Services的本質(zhì)所決定的。Web Services在本質(zhì)上是要為應(yīng)用程序之間提供數(shù)據(jù)通訊的標(biāo)準(zhǔn),為企業(yè)應(yīng)用之間動(dòng)態(tài)地提供大顆粒度的服務(wù),所以Web Services并不適合于非常精細(xì)的基于會(huì)話的方法調(diào)用以及復(fù)雜的事務(wù)(transaction)處理之中。
            也許有人會(huì)對(duì)我這點(diǎn)提出異議!因?yàn)?,現(xiàn)在有很多Web Services的產(chǎn)品(如WASD),不但可以保存session的信息,使服務(wù)成為有狀態(tài)(stateful)的服務(wù),而且還實(shí)現(xiàn)了remote interface,可以在Web Services的會(huì)話中傳遞遠(yuǎn)程對(duì)象的句柄,讓客戶端可以操縱遞遠(yuǎn)程對(duì)象(詳細(xì)信息請(qǐng)參考:http://www.systinet.com )。原理上說(shuō),這并不難實(shí)現(xiàn),因?yàn)樵?/font>XML數(shù)據(jù)中,可以互相傳送任何數(shù)據(jù),包括sessionIDtransactionID,有了這些ID,從技術(shù)角度上說(shuō),實(shí)現(xiàn)有狀態(tài)(stateful)的服務(wù)和事務(wù)處理并不復(fù)雜。但是,這樣功能缺少標(biāo)準(zhǔn)的支持,當(dāng)前版本的WSDL還無(wú)法表示這些復(fù)雜的服務(wù)。在企業(yè)內(nèi)部,你可以任意使用這些特殊的功能,可以自己定義會(huì)話狀態(tài)的交互協(xié)議,因?yàn)榉?wù)者和服務(wù)調(diào)用者之間的通訊都在你的控制之中;然而要將這些服務(wù)發(fā)布到Internet上,其他的應(yīng)用程序是無(wú)法根據(jù)標(biāo)準(zhǔn)去識(shí)別這些特殊功能。

          • 數(shù)據(jù)綁定也存在一些不足。
            因?yàn)樗械臄?shù)據(jù)傳遞都用XML格式,因此,需要在二進(jìn)制數(shù)據(jù)和XML數(shù)據(jù)之間有個(gè)轉(zhuǎn)換。但是,并不是所有的二進(jìn)制數(shù)據(jù)都能方便地用XML來(lái)表示,并不是所有的JAVA對(duì)象都能被XML所表示。因此,經(jīng)常在轉(zhuǎn)換過(guò)程中會(huì)出現(xiàn)語(yǔ)義丟失的情況。

          • 技術(shù)要求高,學(xué)習(xí)曲線較長(zhǎng)。
            每一個(gè)Web Services的產(chǎn)品,都有豐富的工具,能夠根據(jù)Web Services的定義(如WSDL文件)方便地生成客戶端的程序;能夠?qū)⒁话愕姆?wù)程序,很容易就包裝成Web Services服務(wù)。因此,各個(gè)Web Services的產(chǎn)品都聲稱自己的平臺(tái)容易使用,根本不需要了解XML,也不需要了解什么WSDLUDDI,SOAP就能使用發(fā)布Web Services。特別是一個(gè)朋友告訴我,他在什么都不了解的情況下,用.NET花了15分鐘就發(fā)布了一個(gè)Web Services!
            千萬(wàn)不要醉心于這種簡(jiǎn)便,這對(duì)于簡(jiǎn)單的Demo也許是對(duì)的,可是對(duì)于真正意義上嚴(yán)肅的應(yīng)用,一定要了解Web Services的各個(gè)方面,設(shè)計(jì)整體結(jié)構(gòu)和解決方案,還要根據(jù)具體的應(yīng)用調(diào)整性能。所有這些都需要對(duì)Web Services知識(shí)的全面掌握。

          什么應(yīng)用適合Web Services

          Web Services這么多的缺點(diǎn)是不是讓你很泄氣?其實(shí),已經(jīng)有很多成功的Web Services的應(yīng)用和越來(lái)越多的開(kāi)發(fā)商的加盟,證明Web Services一定會(huì)成為新一代WEB信息通訊的主流。經(jīng)過(guò)不斷的發(fā)展,Web Services一定能克服自身的弱點(diǎn),得到更廣泛的應(yīng)用。但就目前來(lái)說(shuō),Web Services比較適合用于下列形式的應(yīng)用:

          • 基于WANInternet的應(yīng)用

          要在Internet上創(chuàng)建基于二進(jìn)制協(xié)議的RMI/IIOP的應(yīng)用,一般都會(huì)遇上一個(gè)大麻煩--防火墻??蛻舳藶g覽器極大可能在ISP防火墻后,大多數(shù)防火墻都只能允許和外部的HTTP連接,因此想要ISP防火墻后的客戶端能和防火墻外的RMI/IIOP的應(yīng)用端口進(jìn)行連接的話,就要改變ISP的安全策略,讓客戶端能夠連接除了80以外的其他端口。可是當(dāng)運(yùn)行RMI/IIOP的應(yīng)用的服務(wù)器為了安全也在防火墻之后的DMZ中的話,那這個(gè)連接就更加復(fù)雜了,要跨越兩個(gè)防火墻。
          Web Services由于使用的是HTTP協(xié)議,傳遞的是純文本的XML數(shù)據(jù),因此擁有穿透防火墻的良好性能。

          • 基于異構(gòu)平臺(tái)的應(yīng)用

          XML語(yǔ)言本身就是跨平臺(tái)、跨語(yǔ)言的數(shù)據(jù)表示方法,在加上通用的HTTP等協(xié)議,使得Web Services天生就適用于基于異構(gòu)平臺(tái)的應(yīng)用。如果你的客戶端包含了各種不同的平臺(tái),例如,你希望你的服務(wù)即可以被JAVA程序所調(diào)用,又可以由VBCOM程序所調(diào)用。你有兩種選擇:一種是為不同的平臺(tái)提供相應(yīng)的API,還要為不同的語(yǔ)言提供API;如果提供Web Services,所有平臺(tái)和語(yǔ)言都可以調(diào)用了!

          • 需要強(qiáng)安全特性的應(yīng)用

          很多人都認(rèn)為,安全性是Web Services的弱項(xiàng)。其實(shí)不然,經(jīng)過(guò)不斷的完善和各種新的協(xié)議的出臺(tái),Web Services完全可以用于安全性很強(qiáng)的應(yīng)用環(huán)境下。并且,由于Web Services使用HTTP協(xié)議進(jìn)行傳輸,所以可以和容易就使用已經(jīng)很成熟的基于HTTP的各種安全技術(shù)。

          • EAI(企業(yè)應(yīng)用集成)
            這是目前Web Services應(yīng)用最看好的方向之一。大多數(shù)企業(yè)內(nèi)部都有著各種各樣的應(yīng)用系統(tǒng),它們是在不同的領(lǐng)導(dǎo)在任期間,由不同的軟件開(kāi)發(fā)商開(kāi)發(fā),因此運(yùn)行在不同的平臺(tái)和系統(tǒng)上,系統(tǒng)的開(kāi)發(fā)語(yǔ)言也各不相同。由于現(xiàn)代企業(yè)信息自動(dòng)化要求的提高,各個(gè)系統(tǒng)之間的互動(dòng)和相互通訊便提到日程上。因此,保護(hù)原有投資,重用遺留系統(tǒng)是當(dāng)前很多中大型企業(yè)的重要任務(wù)。
            由于遺留系統(tǒng)的運(yùn)行平臺(tái)是異構(gòu)環(huán)境,因此企業(yè)應(yīng)用集成的代價(jià)一般來(lái)說(shuō)是很高的。但如果使用Web Services作為應(yīng)用集成的手段,將會(huì)大大降低集成的消耗。Web Services與平臺(tái)和語(yǔ)言無(wú)關(guān)的特性,以及各種平臺(tái)和環(huán)境下的開(kāi)發(fā)工具都是企業(yè)應(yīng)用集成的利器。
            另外,在開(kāi)發(fā)新的應(yīng)用系統(tǒng)的時(shí)候,仍然需要考慮和其他系統(tǒng)的集成,需要考慮調(diào)用其他系統(tǒng)的功能,和被其他系統(tǒng)所調(diào)用。使用Web Services作為系統(tǒng)與外部交流的接口,能夠使新的系統(tǒng)和別的系統(tǒng)之間保持松耦合的關(guān)系,保持較高的可擴(kuò)展性。

          • 行業(yè)內(nèi)部B2B應(yīng)用
            行業(yè)內(nèi)部的應(yīng)用是Web Services的另外一個(gè)方向。因?yàn)樵谝粋€(gè)行業(yè)中,商業(yè)業(yè)務(wù)是很相似的,因此在行業(yè)內(nèi)部很容易形成服務(wù)的標(biāo)準(zhǔn),使所有的業(yè)內(nèi)企業(yè)共同遵守;但怎樣實(shí)現(xiàn)服務(wù)和使用什么樣的系統(tǒng),決定權(quán)在于各個(gè)企業(yè)自己。例如,電信運(yùn)營(yíng)商之間的結(jié)算服務(wù),銀行之間的轉(zhuǎn)帳服務(wù)等都可以形成行業(yè)標(biāo)準(zhǔn),以WSDL的形式公布出來(lái)。各個(gè)企業(yè)之間可以選擇不同的平臺(tái)進(jìn)行服務(wù)的實(shí)現(xiàn)。

          提高Web Services的性能

          要想提高Web Services應(yīng)用的性能,需要對(duì)整個(gè)系統(tǒng)做全盤的考慮。一般來(lái)說(shuō),有以下幾點(diǎn)需要注意:

          1. Web Services的顆粒度
            選擇Web Services的顆粒度是提高Web Services應(yīng)用的性能的主要手段。因?yàn)?/span>Web Services使用的傳輸協(xié)議為HTTPSMTP等,這些協(xié)議都是面向無(wú)狀態(tài)的連接協(xié)議,每一個(gè)請(qǐng)求都要建立一個(gè)新的連接。因此Web Services的調(diào)用不能象數(shù)據(jù)庫(kù)JDBCODBC)接口一樣可以進(jìn)行精細(xì)而復(fù)雜的方法調(diào)用(例如,先獲得Connection,再獲得結(jié)果集,然后一行一行獲取結(jié)果)。Web Services比較適用于大顆粒度的應(yīng)用,在一個(gè)調(diào)用中便獲得所有的信息(比如說(shuō)銀行之間的轉(zhuǎn)帳,在一次調(diào)用中就將包括金額和認(rèn)證等所有的信息都傳輸過(guò)去)。

          2. 謹(jǐn)慎使用XML接口
            系統(tǒng)之間的接口可以使用XML,這樣可以增加系統(tǒng)的靈活性;但不要使用XML作為系統(tǒng)內(nèi)部的接口,因?yàn)檫@不會(huì)帶來(lái)任何好處,盡量使用二進(jìn)制作為系統(tǒng)內(nèi)部的接口,避免不必要的XML文檔的解析和效驗(yàn);在處理XML的時(shí)候,盡快將XML轉(zhuǎn)換成內(nèi)部對(duì)象,XML的傳遞只會(huì)增加系統(tǒng)的開(kāi)銷。

          3. 最大可能性使用CACHE
            當(dāng)有些信息是只讀的,或者在一段時(shí)間內(nèi)保持不變,就可以使用CACHE。無(wú)論是客戶端的CACHE還是服務(wù)器端的CACHE,都能大大提高系統(tǒng)的性能

          總結(jié)

          一旦Web Services得到更加廣泛的應(yīng)用,使得各種服務(wù)可以動(dòng)態(tài)查找和定位,這樣就提供了不同設(shè)備之間各種各樣的信息交互方式,將會(huì)大大改變商業(yè)運(yùn)做的模式和信息交流的風(fēng)格。

          你可以使用別人已經(jīng)成熟的功能來(lái)使自己提供更好的服務(wù),例如google,它的搜索引擎可以通過(guò)Web Services來(lái)訪問(wèn)。這就意味著在你的系統(tǒng)中可以方便的嵌入使用google的強(qiáng)大搜索功能,而不論你的系統(tǒng)是運(yùn)行在什么平臺(tái)上,使google的搜索引擎成為你系統(tǒng)的一部分,(請(qǐng)參考http://www.google.com/apis/)。站在別人的肩膀上,畢竟要看得遠(yuǎn)些!

          面對(duì)Web Services,你現(xiàn)在可以不行動(dòng),但你一定要準(zhǔn)備好!

          posted on 2007-05-22 13:43 junky 閱讀(296) 評(píng)論(0)  編輯  收藏 所屬分類: web

          主站蜘蛛池模板: 同仁县| 铁岭县| 阿克苏市| 鄂伦春自治旗| 蓬溪县| 宜阳县| 竹山县| 广灵县| 灵武市| 化州市| 徐水县| 中江县| 宜君县| 鄂托克前旗| 托克逊县| 阿坝| 久治县| 台中县| 阿鲁科尔沁旗| 奉贤区| 靖宇县| 黄大仙区| 丘北县| 峨眉山市| 扶沟县| 安新县| 双流县| 怀远县| 蒙自县| 逊克县| 德保县| 滨海县| 肇庆市| 察哈| 城口县| 德令哈市| 依兰县| 安阳县| 什邡市| 道孚县| 福泉市|