この演習では、ASP.NET Web アプリケーションに HTTP ハンドラーを実装して、GeoRSS フィードを返します。 GeoRSS は、RSS フィードに地理空間データを含めるための標準であり、GML 形式のデータをフィードに含めるための GeoRSS GML と呼ばれる特定の形式を定義します。クライアント アプリケーションは、通常の RSS フィードと同じ方法で GeoRSS フィードを購読できます。 GeoRSS 形式のデータは、Microsoft Virtual Earth VEMap コントロールに簡単にインポートできます。
注: この演習で使用するコードは、C:SQLHOLSSpatial および VESolutionStoreFinderSite にある完成した Web サイトのページからコピーできます。
HTTPハンドラーを実装する
1. Microsoft Visual Studio 2008 を起動します。
2. [ファイル] メニューの [Web サイトを開く] をクリックし、C:SQLHOLsSpatial および VEStarterStoreFinderSite Web サイトを開きます。
3. ソリューション エクスプローラーで、[App_Code] を展開し、GeoRSSHandler.vb をダブルクリックしてコード エディターで開きます。
注: HTTP ハンドラーは、Web アプリケーションへの HTTP リクエストを処理するコード モジュールです。 ASP.NET Web アプリケーションへの要求は通常、デフォルトの ASP.NET 要求ハンドラーによって処理されますが、特定のファイル拡張子用のカスタム ハンドラーを作成することもできます。この例では、.georss 拡張子を持つファイルのリクエストを処理するハンドラーを実装します。
4. 既存のコードを確認します。受信リクエストを処理するプロセスは ProcessRequest と呼ばれます。この手順は不完全であり、コードに追加する必要がある広範なコメントが含まれていることに注意してください。
5. 「GeoRSS フィードを構築する」というコメントの下に次のコードを追加して、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("ストアの場所") rssOutput.AppendLine("") rssOutput.AppendLine("" + System.DateTime.Now + "") rssOutput.AppendLine("") rssOutput.AppendLine("SQL Server") rssOutput.AppendLine("")
6. 「データベースへの接続を開く」というコメントの下に、次のコードを追加します。
sqlConn.Open()
7. 「GetStoresGML ストアド プロシージャを使用してデフォルトですべてのストアを取得する」というコメントの下に、次のコードを追加します。
spName = "GetStoresGML"
注: デフォルトでは、この HTTP ハンドラーへのリクエストは GetStoresGML ストアド プロシージャを呼び出し、すべてのストアを含む GeoRSS フィードを返します。
8. コメントの下に、searchFrom パラメーターが指定されている場合は、GetNearbyStores を使用し、指定された緯度と経度の座標をパラメーターとして追加し、次のコードを追加します。
Dim searchFrom As String = context.Request.QueryString("SearchFrom") searchFrom が何もない場合 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
注: リクエストに SearchFrom という名前のパラメーターが含まれている場合 (カンマ区切りの緯度と経度の座標ペアが含まれていると仮定)、ハンドラーはこのパラメーターから緯度と経度の値を抽出し、GetNearbyStoresGML ストアド プロシージャを使用して GeoRSS を返します。リクエストされた検索ポイントから半径 100 km 以内のショップを含むフィード。
9. 「ストアド プロシージャ名をコマンド テキストとして指定する」というコメントの下に、次のコードを追加します。
cmd.CommandText = spName
10. 「Create an element for this row」というコメントの下に次のコードを追加して、ストアド プロシージャの結果の各行にタグを作成します。
rssOutput.AppendLine("")
11. タイトルと説明に列 0 と 1 を使用するというコメントの下に、ストアド プロシージャから返されたデータに基づいて ", geomRdr.GetValue(0))) を作成する次のコードを追加します。
rssOutput.AppendLine(String.Format("{0}", _ geomRdr.GetValue(1)))
12. 「要素の追加」というコメントの下に、次のコードを追加して、このエントリの要素を作成します。
rssOutput.AppendLine("")
13. 「列 2 から地理インスタンス GML を取得する」というコメントの下に、ストアド プロシージャの結果から GML データを取得する次のコードを追加します。
gml = geomRdr.GetValue(2).ToString()
14. コメント「出力 XML に要素を追加」の下に、GML データを GeoRSS フィードに追加する次のコードを追加します。
rssOutput.AppendLine(gml)
15. コメント「Close」および「要素」の下に、次のコードを追加します。
rssOutput.AppendLine("") rssOutput.AppendLine("")
16. コメント「ドキュメントを閉じて応答として送信」の下に、次のコードを追加して GeoRSS フィードを完成させ、要求者に送信します。
rssOutput.Append("") context.Response.Write(rssOutput.ToString())
17. GeoRSSHandler.vb を保存します。
HTTPハンドラーを登録する
1. ソリューション エクスプローラーで、web.config をダブルクリックしてエディターで開きます。
2. このセクションのコメント「Register the GeoRSSHandler for .georss リクエスト」の下に、次の XML を追加します。
注: インターネット インフォメーション サービスがこれらのファイルに対する要求を正しいハンドラーに転送できるように、特定のファイル拡張子の HTTP ハンドラーを登録する必要があります。
3. web.config を保存します。
HTTPハンドラーをテストする
1. ソリューション エクスプローラーで、ツリーのルートにある Web サイト プロジェクト ファイルをクリックし、F4 キーを押してそのプロパティを表示します。
2. ポート番号属性に注意してください。
3. [サイト] メニューの [起動オプション] をクリックします。
4. [Launch URL] を選択し、次の URL を入力し (port を Web サイトのポート番号属性の値に置き換えます)、[OK] をクリックします。
http://localhost:/storefindersite/test.georss
5. [デバッグ] メニューの [デバッグなしで実行を開始] をクリックします。
6. Microsoft Internet Explorer ® が開いたら、店舗名の RSS フィードを含むページを表示します。
7. Internet Explorer で、Web ページ上の任意の場所を右クリックし、[ソースの表示] をクリックしてページのソース ファイルをメモ帳で開きます。このページのソースは、前に作成した HTTP ハンドラーによって生成された GeoRSS フィードであることに注意してください。
8. メモ帳を閉じます。
9. Internet Explorer のアドレス バーで、次のクエリ文字列を URL に追加し、Enter キーを押します。
?SearchFrom=34.000000,-118.000000
10. 生成された GeoRSS フィードに検索エリアとその中のすべてのストアが含まれていることを確認します。
11. Internet Explorerを閉じます