李淑靜,卿光勇,王錫良
(1.黑水縣氣象局,四川 黑水 623500;2.阿壩州氣象局,四川 馬爾康 624000)
氣象服務(wù)是指氣象部門基于大氣科學(xué)的理論與技術(shù),根據(jù)社會(huì)、經(jīng)濟(jì)、軍事、生態(tài)、防災(zāi)減災(zāi)等需要,向社會(huì)提供的各類工作[1,2]。氣象服務(wù)是政府公共服務(wù)體系的重要組成部分[3],也是中國(guó)氣象事業(yè)的立業(yè)之本[4-7]。中國(guó)的氣象服務(wù)體系由決策氣象服務(wù)、公眾氣象服務(wù)、專業(yè)專項(xiàng)氣象服務(wù)和氣象科技服務(wù)構(gòu)成[8-10]。決策氣象服務(wù)的目的是在第一時(shí)間讓黨政領(lǐng)導(dǎo)和決策部門獲得科學(xué)、準(zhǔn)確、及時(shí)和有決策參考價(jià)值的氣象信息[11,12]。其中,對(duì)突發(fā)性災(zāi)害性的短時(shí)強(qiáng)降水的預(yù)報(bào)預(yù)警氣象服務(wù)的及時(shí)性要求更高,也是最重要的[13,14]。在汛期,及時(shí)的實(shí)時(shí)雨情信息服務(wù)可以為決策部門防災(zāi)減災(zāi)贏得寶貴時(shí)間。
四川省三級(jí)預(yù)報(bào)業(yè)務(wù)平臺(tái)[15]Web 服務(wù)器,提供了全省范圍內(nèi)氣象站的雨情信息,工作人員可以通過該平臺(tái)查詢某區(qū)域范圍內(nèi)指定時(shí)間段內(nèi)的雨情數(shù)據(jù),當(dāng)發(fā)現(xiàn)某氣象站的降水量達(dá)到或超過規(guī)定的閾值時(shí),就必須立刻對(duì)災(zāi)害應(yīng)急等決策部門做實(shí)時(shí)的雨情服務(wù),供決策部門參考,為保護(hù)人民群眾的生命財(cái)產(chǎn)安全做出提前的災(zāi)害預(yù)警。在三級(jí)預(yù)報(bào)業(yè)務(wù)平臺(tái)的前端頁面,從降水?dāng)?shù)據(jù)的統(tǒng)計(jì)時(shí)間段、氣象站所屬的行政區(qū)域范圍的選擇,到將查詢出來的雨量數(shù)據(jù)導(dǎo)出到Excel格式的文檔中進(jìn)行后續(xù)處理,都需要手工操作,流程繁瑣、效率低。更重要的是,這樣的人工不定時(shí)操作達(dá)不到及時(shí)掌握各地降水量實(shí)況大小的目的。如果用軟件來實(shí)現(xiàn)對(duì)降水?dāng)?shù)據(jù)的實(shí)時(shí)監(jiān)測(cè),及時(shí)報(bào)警,將極大地減輕值班人員的工作強(qiáng)度,提高工作效率。
實(shí)現(xiàn)軟件對(duì)三級(jí)預(yù)報(bào)業(yè)務(wù)平臺(tái)Web 服務(wù)器上的降水量數(shù)據(jù)進(jìn)行監(jiān)測(cè),也就是用編程來模擬瀏覽器訪問該Web 服務(wù)器時(shí)得到降水?dāng)?shù)據(jù)的全過程。在這一過程中,使用谷歌瀏覽器Chrome 開發(fā)者工具[16-18]對(duì)客戶端和服務(wù)器之間的交互信息進(jìn)行偵測(cè),得到開發(fā)軟件所需的各種信息,包括客戶端需要向服務(wù)器提供什么樣的參數(shù)和數(shù)據(jù)、請(qǐng)求資源時(shí)采用什么樣的方法,以及從服務(wù)器返回客戶端的數(shù)據(jù)格式等?;赒uartz.NET[19-22]開發(fā)雨情監(jiān)測(cè)報(bào)警程序,配合Aspose.Cells for .NET 自動(dòng)生成決策氣象服務(wù)所需的Excel格式的雨情通報(bào)文檔[23,24]。
Chrome 開發(fā)者工具是一套內(nèi)置于谷歌瀏覽器Chrome 中的Web 開發(fā)和調(diào)試工具,可用來對(duì)網(wǎng)站進(jìn)行分析、調(diào)試和迭代。該工具包含了Elements、Con?sole、Sources、Network、Performance、Memory 等面板。當(dāng)瀏覽器向服務(wù)器發(fā)起頁面請(qǐng)求后,Network 面板將記錄客戶端和服務(wù)器之間詳細(xì)的網(wǎng)絡(luò)請(qǐng)求和應(yīng)答信息,包括請(qǐng)求的狀態(tài)、資源的大小、類型、耗費(fèi)時(shí)間、Request請(qǐng)求和Response 響應(yīng)等。
Quartz.NET 是一個(gè)開源、輕量、功能強(qiáng)大的作業(yè)調(diào)度框架,是Java 作業(yè)調(diào)度系統(tǒng)Quartz 在.Net 平臺(tái)的實(shí)現(xiàn),能夠用它來為執(zhí)行一個(gè)作業(yè)而創(chuàng)建簡(jiǎn)單的或復(fù)雜的作業(yè)調(diào)度,既能執(zhí)行重復(fù)的作業(yè)任務(wù),也支持指定例外的日歷,從小型應(yīng)用到大型企業(yè)級(jí)系統(tǒng)都能適用。它具有數(shù)據(jù)庫(kù)支持、插件、集群、支持cron-like 表達(dá)式等特性,它實(shí)現(xiàn)了作業(yè)和觸發(fā)器的多對(duì)多關(guān)系,還能把多個(gè)作業(yè)與不同的觸發(fā)器關(guān)聯(lián)。
Aspose.Cells for .NET 是.NET 平臺(tái)下專業(yè)的電子表格控件,即使在沒有安裝Microsoft Excel 或Mi?crosoft office 的工作環(huán)境中,也能對(duì)XLS、XLSX、HT?ML、CSV、PDF 等格式的文件進(jìn)行生成、編輯、轉(zhuǎn)換等操作。允許軟件開發(fā)人員從其自己的應(yīng)用程序中操縱和轉(zhuǎn)換電子表格文件,以及將電子表格呈現(xiàn)為各種圖像和固定布局的文件格式。
Quartz.Net 框架包括幾個(gè)基本的概念:調(diào)度器(Scheduler)、被調(diào)度的任務(wù)類型(Job)、JobDetail(具體的可執(zhí)行調(diào)度任務(wù))和觸發(fā)器(Trigger)。調(diào)度器是Quartz.NET 框架的核心,負(fù)責(zé)管理Quartz.NET 應(yīng)用運(yùn)行環(huán)境。Job 是作業(yè)的類型,描述了作業(yè)是如何執(zhí)行的。JobDetail 是Job 的實(shí)例,它包含了該實(shí)例的執(zhí)行所需要的數(shù)據(jù)。Trigger 用于定義任務(wù)調(diào)度的時(shí)間觸發(fā)規(guī)則。
任務(wù)調(diào)度器在應(yīng)用程序啟動(dòng)時(shí)被創(chuàng)建。實(shí)例化一個(gè)調(diào)度器工廠SchedulerFactory,通過GetScheduler()方法從調(diào)度器工廠里得到調(diào)度器實(shí)例Scheduler。創(chuàng)建Job 任務(wù)并實(shí)例化JobDetail,在創(chuàng)建Trigger 觸發(fā)器后,JobDetail 和Trigger 注冊(cè)到Scheduler 中,就可以被Scheduler 容器調(diào)度了。最后,根據(jù)觸發(fā)器規(guī)劃執(zhí)行調(diào)度任務(wù)。在觸發(fā)器被觸發(fā)后,所有要完成的工作都在GetRainJob 作業(yè)中完成,該作業(yè)任務(wù)實(shí)現(xiàn)了IJob 接口的Execute 方法。實(shí)現(xiàn)雨量監(jiān)測(cè)報(bào)警,并結(jié)合Aspose.Cells for .NET 自動(dòng)生成雨情通報(bào)文檔的功能都在該方法中完成(圖1)。
圖1 雨情監(jiān)測(cè)報(bào)警程序運(yùn)行原理
運(yùn)行Chome 瀏覽器,打開Chrome 開發(fā)者工具,切換到Network 面板。在瀏覽器的地址欄輸入并訪問四川省氣象局省市縣三級(jí)預(yù)報(bào)業(yè)務(wù)平臺(tái)在內(nèi)網(wǎng)的網(wǎng)址:http://10.194.17.32/,此時(shí),在開發(fā)者工具的請(qǐng)求列表中列出了偵測(cè)到的所有資源,包括網(wǎng)址、圖片、json 等相關(guān)信息。點(diǎn)擊該列表左邊的Name 列中和該平臺(tái)相關(guān)的網(wǎng)址,在右側(cè)的Headers 標(biāo)簽頁中顯示了和該資源相關(guān)聯(lián)的HTTP 標(biāo)頭信息,包括請(qǐng)求的URL 地址、請(qǐng)求方法、請(qǐng)求狀態(tài)、服務(wù)器返回客戶端數(shù)據(jù)的類型等。在Response 標(biāo)簽頁則顯示了從服務(wù)器返回的HTTP 響應(yīng)數(shù)據(jù)是XML 格式的文本。這些信息為開發(fā)雨情監(jiān)測(cè)報(bào)警程序提供了依據(jù)(圖2)。
圖2 Chrome 開發(fā)者工具監(jiān)測(cè)瀏覽器和服務(wù)器之間的通訊
建立.NET 項(xiàng)目,在工程中添加對(duì)Quartz.dll 和Aspose.Cells.dll文件的引用,并引入命名空間:
為了實(shí)現(xiàn)對(duì)任務(wù)的調(diào)度,在程序啟動(dòng)時(shí)就需要基于Quartz.NET 框架,實(shí)例化并啟動(dòng)調(diào)度器Sched?uler,在創(chuàng)建觸發(fā)器Trigger 和Job 任務(wù)并實(shí)例化Job?Detail后,與調(diào)度器相關(guān)聯(lián)。代碼如下。
在GetRainJob 作業(yè)的Execute 方法,實(shí)現(xiàn)了降水?dāng)?shù)據(jù)監(jiān)測(cè)報(bào)警和雨情通報(bào)文檔的自動(dòng)生成。模擬瀏覽器向服務(wù)器發(fā)起請(qǐng)求的主要代碼如下。
軟件最終生成的Excel 格式雨情通報(bào)文檔(部分)如圖3 所示。
圖3 Excel格式的雨情通報(bào)文檔
在瀏覽器訪問省市縣三級(jí)預(yù)報(bào)業(yè)務(wù)平臺(tái)查詢降水?dāng)?shù)據(jù)時(shí),利用Chrome 開發(fā)者工具抓取客戶端和服務(wù)器之間詳細(xì)的請(qǐng)求和應(yīng)答信息,為開發(fā)基于Quartz.NET 的雨情監(jiān)測(cè)報(bào)警程序提供了依據(jù)。該程序不但能實(shí)時(shí)監(jiān)測(cè)特定時(shí)間段、特定區(qū)域范圍內(nèi)各個(gè)氣象站的累計(jì)降水量數(shù)據(jù)及時(shí)報(bào)警,而且還能結(jié)合Aspose.Cells for .NET 實(shí)現(xiàn)雨情通報(bào)文檔的自動(dòng)化生成,極大地減輕了工作人員的勞動(dòng)強(qiáng)度,提高了工作效率,其高效、及時(shí)和自動(dòng)化的優(yōu)勢(shì)在汛期繁重的氣象服務(wù)工作中發(fā)揮了重要的作用。
該程序還可以結(jié)合實(shí)際的工作需要,對(duì)其功能進(jìn)行擴(kuò)展開發(fā)。比如,結(jié)合電信網(wǎng)關(guān)和微信,向相關(guān)決策部門自動(dòng)發(fā)送實(shí)時(shí)雨情手機(jī)短信,并在微信平臺(tái)同步發(fā)布,以進(jìn)一步發(fā)揮其自動(dòng)、及時(shí)、高效的優(yōu)勢(shì)在氣象服務(wù)工作中的作用。