In dieser Übung implementieren Sie einen HTTP-Handler in einer ASP.NET-Webanwendung, um einen GeoRSS-Feed zurückzugeben. GeoRSS ist ein Standard zum Einbinden von Geodaten in RSS-Feeds. Er definiert ein spezielles Format namens GeoRSS GML zum Einbinden von GML-formatierten Daten in Feeds. Clientanwendungen können GeoRSS-Feeds auf die gleiche Weise abonnieren wie normale RSS-Feeds. Daten im GeoRSS-Format können problemlos in das Microsoft Virtual Earth VEMap-Steuerelement importiert werden.
Hinweis: Sie können den in dieser Übung verwendeten Code von der fertigen Website-Seite in C:SQLHOLSSpatial und VESolutionStoreFinderSite kopieren.
Implementieren Sie HTTP-Handler
1. Starten Sie Microsoft Visual Studio 2008.
2. Klicken Sie im Menü „Datei“ auf „Website öffnen“ und öffnen Sie dann die Website „C:SQLHOLsSpatial“ und „VEStarterStoreFinderSite“.
3. Erweitern Sie im Projektmappen-Explorer App_Code und doppelklicken Sie dann auf GeoRSSHandler.vb, um es im Code-Editor zu öffnen.
Hinweis: Ein HTTP-Handler ist ein Codemodul, das HTTP-Anfragen an eine Webanwendung verarbeitet. Anforderungen an ASP.NET-Webanwendungen werden normalerweise vom standardmäßigen ASP.NET-Anforderungshandler verarbeitet, Sie können jedoch benutzerdefinierte Handler für bestimmte Dateierweiterungen erstellen. In diesem Beispiel implementieren Sie einen Handler, der Anfragen für Dateien mit der Erweiterung .georss verarbeitet.
4. Überprüfen Sie den vorhandenen Code. Der Prozess, der eingehende Anfragen verarbeitet, heißt ProcessRequest. Bitte beachten Sie, dass dieses Verfahren unvollständig ist und umfangreiche Kommentare enthält, die dem Code hinzugefügt werden müssen.
5. Fügen Sie unter dem Kommentar „GeoRSS-Feed erstellen“ den folgenden Code hinzu, um mit der Erstellung des GeoRSS-Feeds zu beginnen, der vom HTTP-Handler zurückgegeben wird.
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. Fügen Sie unter dem Kommentar „Verbindung zur Datenbank öffnen“ den folgenden Code hinzu.
sqlConn.Open()
7. Fügen Sie unter dem Kommentar „Gespeicherte Prozedur GetStoresGML verwenden, um standardmäßig alle Geschäfte abzurufen“ den folgenden Code hinzu.
spName = "GetStoresGML"
Hinweis: Standardmäßig rufen Anforderungen an diesen HTTP-Handler die gespeicherte Prozedur GetStoresGML auf und geben einen GeoRSS-Feed zurück, der alle Geschäfte enthält.
8. Fügen Sie unter dem Kommentar „Wenn ein searchFrom-Parameter bereitgestellt wird, GetNearbyStores verwenden und die bereitgestellten Breiten- und Längenkoordinaten als Parameter hinzufügen“ den folgenden Code hinzu.
Dimmen Sie searchFrom als String = context.Request.QueryString("SearchFrom"). Wenn nicht, ist searchFrom nichts, dann ist spName = "GetNearbyStoresGML" Dimmen Sie latLong() als String = Split(searchFrom, ",", 2) cmd.Parameters.Add(New SqlParameter("Lat", latLong(0))) cmd.Parameters.Add(New SqlParameter("Long", latLong(1))) End If
Hinweis: Wenn die Anfrage einen Parameter namens SearchFrom enthält (vorausgesetzt, er enthält ein durch Kommas getrenntes Paar von Breiten- und Längenkoordinaten), extrahiert der Handler die Breiten- und Längengrade aus diesem Parameter und verwendet die gespeicherte Prozedur GetNearbyStoresGML, um ein GeoRSS zurückzugeben Feed mit Geschäften im Umkreis von 100 km um den gewünschten Suchpunkt.
9. Fügen Sie unter dem Kommentar Geben Sie den Namen der gespeicherten Prozedur als Befehlstext an den folgenden Code hinzu.
cmd.CommandText = spName
10. Fügen Sie unter dem Kommentar „Element für diese Zeile erstellen“ den folgenden Code hinzu, um für jede Zeile im Ergebnis der gespeicherten Prozedur ein Tag zu erstellen.
rssOutput.AppendLine("")
11. Fügen Sie unter dem Kommentar „Spalten 0 und 1 für Titel und Beschreibung verwenden“ den folgenden Code hinzu, um „geomRdr.GetValue(0))) basierend auf den von der gespeicherten Prozedur zurückgegebenen Daten zu erstellen.“
rssOutput.AppendLine(String.Format("{0}", _ geomRdr.GetValue(1)))
12. Fügen Sie unter dem Kommentar „Element hinzufügen“ den folgenden Code hinzu, um ein Element für diesen Eintrag zu erstellen.
rssOutput.AppendLine("")
13. Fügen Sie unter dem Kommentar „Geographieinstanz-GML aus Spalte 2 abrufen“ den folgenden Code hinzu, um die GML-Daten aus dem Ergebnis der gespeicherten Prozedur abzurufen.
gml = geomRdr.GetValue(2).ToString()
14. Fügen Sie unter dem Kommentar „Elemente zur Ausgabe-XML hinzufügen“ den folgenden Code hinzu, um GML-Daten zum GeoRSS-Feed hinzuzufügen.
rssOutput.AppendLine(gml)
15. Fügen Sie unter dem Kommentar „Close and elements“ den folgenden Code hinzu.
rssOutput.AppendLine("") rssOutput.AppendLine("")
16. Fügen Sie unter dem Kommentar „Dokument schließen und als Antwort senden“ den folgenden Code hinzu, um den GeoRSS-Feed zu vervollständigen und ihn an den Anforderer zu senden.
rssOutput.Append("") context.Response.Write(rssOutput.ToString())
17. Speichern Sie GeoRSSHandler.vb.
Registrieren Sie den HTTP-Handler
1. Doppelklicken Sie im Projektmappen-Explorer auf web.config, um es im Editor zu öffnen.
2. Fügen Sie im Abschnitt unter dem Kommentar „Registrieren Sie den GeoRSSHandler für .georss-Anfragen“ den folgenden XML-Code hinzu.
Hinweis: Sie müssen HTTP-Handler für bestimmte Dateierweiterungen registrieren, damit Internetinformationsdienste Anforderungen für diese Dateien an den richtigen Handler weiterleiten.
3. Speichern Sie web.config.
Testen Sie den HTTP-Handler
1. Klicken Sie im Projektmappen-Explorer auf die Website-Projektdatei im Stammverzeichnis der Struktur und drücken Sie dann F4, um deren Eigenschaften anzuzeigen.
2. Bitte achten Sie auf das Portnummernattribut.
3. Klicken Sie im Menü „Site“ auf „Startoptionen“.
4. Wählen Sie „URL starten“, geben Sie die folgende URL ein (ersetzen Sie „port“ durch den Wert des Portnummernattributs der Website) und klicken Sie auf „OK“.
http://localhost:/storefindersite/test.georss
5. Klicken Sie im Menü Debuggen auf Ausführung ohne Debuggen starten.
6. Wenn Microsoft Internet Explorer® geöffnet wird, sehen Sie sich die Seite an, die den RSS-Feed für den Shopnamen enthält.
7. Klicken Sie im Internet Explorer mit der rechten Maustaste auf eine beliebige Stelle auf der Webseite und klicken Sie dann auf Quelle anzeigen, um die Quelldatei für die Seite im Editor zu öffnen. Beachten Sie, dass die Quelle dieser Seite der GeoRSS-Feed ist, der von dem zuvor erstellten HTTP-Handler generiert wurde.
8. Schließen Sie den Editor.
9. Hängen Sie in der Adressleiste im Internet Explorer die folgende Abfragezeichenfolge an die URL an und drücken Sie die Eingabetaste.
?SearchFrom=34.000000,-118.000000
10. Stellen Sie sicher, dass der generierte GeoRSS-Feed den Suchbereich und alle darin enthaltenen Geschäfte enthält.
11. Schließen Sie den Internet Explorer