在此練習中,您將在ASP.NET Web 應用程式中實作HTTP 處理程序以傳回GeoRSS 訂閱源。 GeoRSS 是在RSS 訂閱源中包含地理空間資料時所使用的一個標準,它定義了一種名為GeoRSS GML 的特定格式,用來在訂閱源中包含GML 格式的資料。用戶端應用程式可以訂閱GeoRSS 訂閱源,訂閱方式與訂閱常規RSS 訂閱源相同。可以輕鬆地將GeoRSS 格式的資料匯入Microsoft Virtual Earth VEMap 控制項。
注意:您可以從C:SQLHOLSSpatial and VESolutionStoreFinderSite 中的完成的網站頁面複製此練習中所使用的程式碼。
實作HTTP 處理程序
1. 啟動Microsoft Visual Studio 2008。
2. 在檔案選單中,按一下開啟網站,然後開啟C:SQLHOLsSpatial and VEStarterStoreFinderSite 網站。
3. 在解決方案資源管理器中,展開App_Code,然後雙擊GeoRSSHandler.vb 在程式碼編輯器中開啟它。
注意:HTTP 處理程序是一個程式碼模組,用於處理對Web 應用程式的HTTP 請求。通常由預設ASP.NET 請求處理程序處理對ASP.NET Web 應用程式的請求,但您可以針對特定檔案副檔名建立自訂處理程序。在本例中,您將實作一個將用於處理副檔名為.georss 的檔案的請求的處理程序。
4. 檢查現有的代碼。處理傳入請求的程序名為ProcessRequest。請注意,此過程不完整,包含大量必須添加程式碼的註釋。
5. 在註解Build the GeoRSS feed下,新增以下程式碼,以開始建置將由HTTP 處理程序傳回的GeoRSS 訂閱源。
rssOutput.AppendLine(" rssOutput.AppendLine("xmlns:georss='http://www.georss.org/georss'") rssOutput.AppendLine("xmlns:gm='http://www.mlgis.net/gml '>") rssOutput.AppendLine("") rssOutput.AppendLine("Store Locations") rssOutput.AppendLine("") rssOutput.AppendLine("" + System.DateTime.Now + "") 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"
注意:預設情況下,對此HTTP 處理程序的請求將呼叫GetStoresGML 預存程序,並傳回包含所有商店的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.Addd. SqlParameter("Lat", latLong(0))) cmd.Parameters.Add(New SqlParameter("Long", latLong(1))) End If
注意:如果請求包含名為SearchFrom 的參數(假定它包含以逗號分隔的緯度和經度座標對),處理程序將從此參數提取緯度和經度值,並使用GetNearbyStoresGML 儲存程序傳回GeoRSS 訂閱源,訂閱源中包含請求的搜尋點周圍方圓100 km 範圍內的商店。
9. 在註解Specify the stored procedure name as the command text(將預存程序名稱指定為指令文字)下,加入下列程式碼。
cmd.CommandText = spName
10. 在註解Create an element for this row下,新增下列程式碼來為預存程序的結果中的每一行都建立一個標記。
rssOutput.AppendLine("")
11. 在註解Use columns 0 and 1 for the title and description下,新增以下程式碼以根據預存程序傳回的資料建立", geomRdr.GetValue(0)))
rssOutput.AppendLine(String.Format("{0}", _ geomRdr.GetValue(1)))
12. 在註解Add a element下,加入以下程式碼來為此條目建立元素。
rssOutput.AppendLine("")
13. 在註解Get the geography instance GML from column 2下,新增下列程式碼,以從預存程序結果中檢索GML 資料。
gml = geomRdr.GetValue(2).ToString()
14. 在註解Add the elements to the output XML下,新增以下程式碼以向GeoRSS 訂閱源新增GML 資料。
rssOutput.AppendLine(gml)
15. 在註解Close and elements下,加入以下程式碼。
rssOutput.AppendLine("") rssOutput.AppendLine("")
16. 在註解Close the document and send it as the response下,新增以下程式碼以完成GeoRSS 訂閱來源並將其傳送給請求人。
rssOutput.Append("") context.Response.Write(rssOutput.ToString())
17. 儲存GeoRSSHandler.vb。
註冊HTTP 處理程序
1. 在解決方案資源管理器中,雙擊web.config 在編輯器中開啟它。
2. 在部分中,在註解Register the GeoRSSHandler for .georss requests下,加入以下XML。
<add verb="*" path="*.georss" type="GeoRSSHandler" validate="false"/>
注意:您必須為特定檔案副檔名註冊HTTP 處理程序,以便Internet Information Services 將針對這些檔案的請求轉送到正確的處理程序。
3. 儲存web.config。
測試HTTP 處理程序
1. 在解決方案資源管理器中,按一下位於樹的根目錄下的網站專案文件,然後按F4 查看其屬性。
2. 請注意觀察連接埠號碼屬性。
3. 在網站選單上,按一下啟動選項。
4. 選擇啟動URL,輸入以下URL(將port 替換為網站的連接埠號碼屬性的值),然後按一下確定。
http://localhost:/storefindersite/test.georss
5. 在調試選單上,按一下開始執行(不調試)。
6. 當Microsoft Internet Explorer ® 開啟時,請查看包含商店名稱的RSS 訂閱源的頁面。
7. 在Internet Explorer 中,右鍵點選該網頁的任意位置,然後按一下檢視來源檔案以在記事本中開啟該頁的來源檔案。請注意,該頁的來源是您前面建立的HTTP 處理程序產生的GeoRSS 訂閱源。
8. 關閉記事本。
9. 在Internet Explorer 中的網址列中,將以下查詢字串附加到URL 後,然後按Enter。
?SearchFrom=34.000000,-118.000000
10. 驗證產生的GeoRSS 訂閱源包含搜尋區域及其中的所有商店。
11. 關閉Internet Explorer