В этом упражнении вы реализуете обработчик HTTP в веб-приложении ASP.NET для возврата канала GeoRSS. GeoRSS — это стандарт включения геопространственных данных в RSS-каналы. Он определяет специальный формат под названием GeoRSS GML для включения данных в формате GML в каналы. Клиентские приложения могут подписываться на каналы GeoRSS так же, как и на обычные RSS-каналы. Данные в формате GeoRSS можно легко импортировать в элемент управления Microsoft Virtual Earth VEMap.
Примечание. Код, использованный в этом упражнении, можно скопировать со страницы готового веб-сайта в C:SQLHOLSSpatial и VESolutionStoreFinderSite.
Реализация обработчиков HTTP
1. Запустите Microsoft Visual Studio 2008.
2. В меню «Файл» выберите «Открыть веб-сайт», а затем откройте веб-сайт C:SQLHOLsSpatial и VEStarterStoreFinderSite.
3. В обозревателе решений разверните App_Code, а затем дважды щелкните GeoRSSHandler.vb, чтобы открыть его в редакторе кода.
Примечание. Обработчик HTTP — это модуль кода, который обрабатывает HTTP-запросы к веб-приложению. Запросы к веб-приложениям ASP.NET обычно обрабатываются обработчиком запросов ASP.NET по умолчанию, но вы можете создавать собственные обработчики для определенных расширений файлов. В этом примере вы реализуете обработчик, который будет обрабатывать запросы файлов с расширением .georss.
4. Проверьте существующий код. Процесс, обрабатывающий входящие запросы, называется ProcessRequest. Обратите внимание, что эта процедура неполная и содержит обширные комментарии, которые необходимо добавить в код.
5. Под комментарием Создать канал GeoRSS добавьте следующий код, чтобы начать создание канала GeoRSS, который будет возвращен обработчиком HTTP.
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.Открыть()
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 км от запрошенной точки поиска.
9. Под комментарием Укажите имя хранимой процедуры в качестве текста команды добавьте следующий код.
cmd.CommandText = spName
10. Под комментарием Создать элемент для этой строки добавьте следующий код, чтобы создать тег для каждой строки в результате хранимой процедуры.
rssOutput.AppendLine("")
11. Под комментарием «Использовать столбцы 0 и 1 для заголовка и описания» добавьте следующий код для создания «geomRdr.GetValue(0))) на основе данных, возвращаемых хранимой процедурой.
rssOutput.AppendLine(String.Format("{0}", _ geomRdr.GetValue(1)))
12. Под комментарием Добавить элемент добавьте следующий код, чтобы создать элемент для этой записи.
rssOutput.AppendLine("")
13. Под комментарием Получить экземпляр GML по географии из столбца 2 добавьте следующий код для получения данных GML из результата хранимой процедуры.
gml = geomRdr.GetValue(2).ToString()
14. Под комментарием «Добавить элементы в выходной XML» добавьте следующий код, чтобы добавить данные GML в канал GeoRSS.
rssOutput.AppendLine(gml)
15. Под комментарием Close и elements добавьте следующий код.
rssOutput.AppendLine("") rssOutput.AppendLine("")
16. Под комментарием Закройте документ и отправьте его в качестве ответа, добавьте следующий код, чтобы завершить канал GeoRSS и отправить его инициатору запроса.
rssOutput.Append("") context.Response.Write(rssOutput.ToString())
17. Сохраните GeoRSSHandler.vb.
Зарегистрировать обработчик HTTP
1. В обозревателе решений дважды щелкните файл web.config, чтобы открыть его в редакторе.
2. В разделе под комментарием Зарегистрируйте GeoRSSHandler для запросов .georss добавьте следующий XML.
<add verb="*" path="*.georss" type="GeoRSSHandler" validate="false"/>
Примечание. Необходимо зарегистрировать обработчики HTTP для определенных расширений файлов, чтобы службы IIS перенаправляли запросы к этим файлам правильному обработчику.
3. Сохраните web.config.
Тестирование обработчика HTTP
1. В обозревателе решений щелкните файл проекта веб-сайта, расположенный в корне дерева, а затем нажмите F4, чтобы просмотреть его свойства.
2. Обратите внимание на атрибут номера порта.
3. В меню «Сайт» выберите «Параметры запуска».
4. Выберите «URL-адрес запуска», введите следующий URL-адрес (замените порт значением атрибута номера порта веб-сайта) и нажмите «ОК».
http://localhost:/storefindersite/test.georss
5. В меню «Отладка» выберите «Начать выполнение без отладки».
6. Когда откроется Microsoft Internet Explorer ®, просмотрите страницу, содержащую RSS-канал для названия магазина.
7. В Internet Explorer щелкните правой кнопкой мыши в любом месте веб-страницы и выберите «Просмотреть исходный код», чтобы открыть исходный файл страницы в «Блокноте». Обратите внимание, что источником этой страницы является канал GeoRSS, созданный обработчиком HTTP, который вы создали ранее.
8. Закройте Блокнот.
9. В адресной строке Internet Explorer добавьте следующую строку запроса к URL-адресу и нажмите Enter.
?SearchFrom=34.000000,-118.000000
10. Убедитесь, что созданный канал GeoRSS содержит область поиска и все магазины в ней.
11. Закройте Internet Explorer.