在此練習(xí)中,您將在 ASP.NET Web 應(yīng)用程序中實(shí)現(xiàn) HTTP 處理程序以返回 GeoRSS 訂閱源。GeoRSS 是在 RSS 訂閱源中包含地理空間數(shù)據(jù)時(shí)所用的一個(gè)標(biāo)準(zhǔn),它定義了一種名為 GeoRSS GML 的特定格式,用來(lái)在訂閱源中包含 GML 格式的數(shù)據(jù)。客戶端應(yīng)用程序可以訂閱 GeoRSS 訂閱源,訂閱方式與訂閱常規(guī) RSS 訂閱源相同。可以輕松地將 GeoRSS 格式的數(shù)據(jù)導(dǎo)入 Microsoft Virtual Earth VEMap 控件中。
注意:您可以從 C:\SQLHOLS\Spatial and VE\Solution\StoreFinderSite 中的完成的網(wǎng)站頁(yè)面復(fù)制此練習(xí)中所用的代碼。
實(shí)現(xiàn) HTTP 處理程序
1. 啟動(dòng) Microsoft Visual Studio 2008。
2. 在文件菜單中,單擊打開網(wǎng)站,然后打開 C:\SQLHOLs\Spatial and VE\Starter\StoreFinderSite 網(wǎng)站。
3. 在解決方案資源管理器中,展開 App_Code,然后雙擊 GeoRSSHandler.vb 在代碼編輯器中打開它。
注意:HTTP 處理程序是一個(gè)代碼模塊,用于處理對(duì) Web 應(yīng)用程序的 HTTP 請(qǐng)求。通常由默認(rèn) ASP.NET 請(qǐng)求處理程序處理對(duì) ASP.NET Web 應(yīng)用程序的請(qǐng)求,但是您可以針對(duì)特定文件擴(kuò)展名創(chuàng)建自定義處理程序。在本例中,您將實(shí)現(xiàn)一個(gè)將用于處理擴(kuò)展名為 .georss 的文件的請(qǐng)求的處理程序。
4. 檢查現(xiàn)有的代碼。處理傳入請(qǐng)求的過(guò)程名為 ProcessRequest。請(qǐng)注意,此過(guò)程不完整,包含大量必須添加代碼的注釋。
5. 在注釋 Build the GeoRSS feed下,添加以下代碼,以開始構(gòu)建將由 HTTP 處理程序返回的 GeoRSS 訂閱源。 rssOutput.AppendLine(" rssOutput.AppendLine("xmlns:georss='http://www.georss.org/georss'") rssOutput.AppendLine("xmlns:gml='http://www.opengis.net/gml'>") rssOutput.AppendLine("") rssOutput.AppendLine("Store Locations") rssOutput.AppendLine("") rssOutput.AppendLine("" + System.DateTime.Now + "") rssOutput.AppendLine("") rssOutput.AppendLine("SQL Server") rssOutput.AppendLine("")
6. 在注釋 Open a connection to the database下,添加以下代碼。 sqlConn.Open()
7. 在注釋 Use the GetStoresGML stored proc to get all stores by default下,添加以下代碼。 spName = "GetStoresGML"
注意:默認(rèn)情況下,對(duì)此 HTTP 處理程序的請(qǐng)求將調(diào)用 GetStoresGML 存儲(chǔ)過(guò)程,并返回包含所有商店的 GeoRSS 訂閱源。
8. 在注釋If a searchFrom parameter is provided, use GetNearbyStores and add the provided lat and lon coordinates as parameters下,添加以下代碼。 Dim searchFrom As String = context.Request.QueryString("SearchFrom") If Not searchFrom Is Nothing Then spName = "GetNearbyStoresGML" Dim latLong() As String = Split(searchFrom, ",", 2) cmd.Parameters.Add(New SqlParameter("Lat", latLong(0))) cmd.Parameters.Add(New SqlParameter("Long", latLong(1))) End If
注意:如果請(qǐng)求包含名為 SearchFrom 的參數(shù)(假定它包含以逗號(hào)分隔的緯度和經(jīng)度坐標(biāo)對(duì)),處理程序?qū)拇藚?shù)提取緯度和經(jīng)度值,并使用 GetNearbyStoresGML 存儲(chǔ)過(guò)程返回 GeoRSS 訂閱源,訂閱源中包含請(qǐng)求的搜索點(diǎn)周圍方圓 100 km 范圍內(nèi)的商店。
9. 在注釋 Specify the stored procedure name as the command text(將存儲(chǔ)過(guò)程名稱指定為命令文本)下,添加以下代碼。 cmd.CommandText = spName
10. 在注釋 Create an element for this row下,添加以下代碼來(lái)為存儲(chǔ)過(guò)程的結(jié)果中的每一行都創(chuàng)建一個(gè) 標(biāo)記。 rssOutput.AppendLine("")
11. 在注釋 Use columns 0 and 1 for the title and description下,添加以下代碼以根據(jù)存儲(chǔ)過(guò)程返回的數(shù)據(jù)創(chuàng)建 ", geomRdr.GetValue(0))) rssOutput.AppendLine(String.Format("{0}", _ geomRdr.GetValue(1))) 12. 在注釋 Add a element下,添加以下代碼來(lái)為此條目創(chuàng)建 元素。 rssOutput.AppendLine("")
13. 在注釋 Get the geography instance GML from column 2下,添加以下代碼,以從存儲(chǔ)過(guò)程結(jié)果中檢索 GML 數(shù)據(jù)。 gml = geomRdr.GetValue(2).ToString()
14. 在注釋 Add the elements to the output XML下,添加以下代碼以向 GeoRSS 訂閱源添加 GML 數(shù)據(jù)。 rssOutput.AppendLine(gml)
15. 在注釋 Close and elements下,添加以下代碼。 rssOutput.AppendLine("") rssOutput.AppendLine("")
16. 在注釋 Close the document and send it as the response下,添加以下代碼以完成 GeoRSS 訂閱源并將其發(fā)送給請(qǐng)求人。 rssOutput.Append("") context.Response.Write(rssOutput.ToString())
17. 保存 GeoRSSHandler.vb。
注冊(cè) HTTP 處理程序
1. 在解決方案資源管理器中,雙擊 web.config 在編輯器中打開它。
2. 在 部分中,在注釋 Register the GeoRSSHandler for .georss requests下,添加以下 XML。 <add verb="*" path="*.georss" type="GeoRSSHandler" validate="false"/>
注意:您必須為特定文件擴(kuò)展名注冊(cè) HTTP 處理程序,以便 Internet Information Services 將針對(duì)這些文件的請(qǐng)求轉(zhuǎn)發(fā)到正確的處理程序。
3. 保存 web.config。
測(cè)試 HTTP 處理程序
1. 在解決方案資源管理器中,單擊位于樹的根目錄下的網(wǎng)站項(xiàng)目文件,然后按 F4 查看其屬性。
2. 請(qǐng)注意觀察端口號(hào)屬性。
3. 在網(wǎng)站菜單上,單擊啟動(dòng)選項(xiàng)。
4. 選擇啟動(dòng) URL,輸入以下 URL(將 port 替換為網(wǎng)站的端口號(hào)屬性的值),然后單擊確定。
http://localhost:/storefindersite/test.georss
5. 在調(diào)試菜單上,單擊開始執(zhí)行(不調(diào)試)。
6. 當(dāng) Microsoft Internet Explorer ® 打開時(shí),查看包含商店名稱的 RSS 訂閱源的頁(yè)面。
7. 在 Internet Explorer 中,右鍵單擊該網(wǎng)頁(yè)的任意位置,然后單擊查看源文件以在記事本中打開該頁(yè)的源文件。請(qǐng)注意,該頁(yè)的源是您前面創(chuàng)建的 HTTP 處理程序生成的 GeoRSS 訂閱源。
8. 關(guān)閉記事本。
9. 在 Internet Explorer 中的地址欄中,將以下查詢字符串附加到 URL 后,然后按 Enter。
?SearchFrom=34.000000,-118.000000
10. 驗(yàn)證生成的 GeoRSS 訂閱源包含搜索區(qū)域及其中的所有商店。
11. 關(guān)閉 Internet Explorer。
本文鏈接:http://m.95time.cn/tech/program/2010/7338.asp
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|