Neste exercício, você implementará um manipulador HTTP em um aplicativo Web ASP.NET para retornar um feed GeoRSS. GeoRSS é um padrão para inclusão de dados geoespaciais em feeds RSS. Ele define um formato específico chamado GeoRSS GML para inclusão de dados formatados em GML em feeds. Os aplicativos clientes podem assinar feeds GeoRSS da mesma forma que feeds RSS normais. Os dados no formato GeoRSS podem ser facilmente importados para o controle VEMap do Microsoft Virtual Earth.
Observação: você pode copiar o código usado neste exercício da página completa do site em C:SQLHOLSSpatial e VESolutionStoreFinderSite.
Implementar manipuladores HTTP
1. Inicie o Microsoft Visual Studio 2008.
2. No menu Arquivo, clique em Abrir site e, em seguida, abra o site C:SQLHOLsSpatial e VEStarterStoreFinderSite.
3. No Solution Explorer, expanda App_Code e clique duas vezes em GeoRSSHandler.vb para abri-lo no editor de código.
Nota: Um manipulador HTTP é um módulo de código que manipula solicitações HTTP para um aplicativo web. As solicitações para aplicativos Web ASP.NET normalmente são tratadas pelo manipulador de solicitações ASP.NET padrão, mas você pode criar manipuladores personalizados para extensões de arquivo específicas. Neste exemplo, você implementará um manipulador que tratará solicitações de arquivos com extensão .georss.
4. Verifique o código existente. O processo que trata das solicitações recebidas é denominado ProcessRequest. Observe que este procedimento está incompleto e contém comentários extensos que devem ser adicionados ao código.
5. No comentário Construir o feed GeoRSS, adicione o código a seguir para iniciar a construção do feed GeoRSS que será retornado pelo manipulador 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("Locais de armazenamento") rssOutput.AppendLine("") rssOutput.AppendLine("" + System.DateTime.Now + "") rssOutput.AppendLine("") rssOutput.AppendLine("SQL Server") rssOutput.AppendLine("")
6. No comentário Abra uma conexão com o banco de dados, adicione o código a seguir.
sqlConn.Open()
7. No comentário Use o procedimento armazenado GetStoresGML para obter todas as lojas por padrão, adicione o código a seguir.
spName = "GetStoresGML"
Nota: Por padrão, as solicitações para esse manipulador HTTP chamam o procedimento armazenado GetStoresGML e retornam um feed GeoRSS contendo todos os armazenamentos.
8. No comentário Se um parâmetro searchFrom for fornecido, use GetNearbyStores e adicione as coordenadas lat e lon fornecidas como parâmetros, adicione o código a seguir.
Dim searchFrom As String = context.Request.QueryString("SearchFrom") Se não searchFrom não for nada, então spName = "GetNearbyStoresGML" Dim latLong() As String = Split(searchFrom, ",", 2) cmd.Parameters.Add(Novo SqlParameter("Lat", latLong(0))) cmd.Parameters.Add(New SqlParameter("Long", latLong(1))) End If
Nota: Se a solicitação contiver um parâmetro chamado SearchFrom (assumindo que contém um par de coordenadas de latitude e longitude separadas por vírgula), o manipulador extrairá os valores de latitude e longitude desse parâmetro e usará o procedimento armazenado GetNearbyStoresGML para retornar um GeoRSS feed contendo lojas em um raio de 100 km do ponto de pesquisa solicitado.
9. No comentário Especifique o nome do procedimento armazenado como o texto do comando, adicione o código a seguir.
cmd.CommandText = spNome
10. No comentário Crie um elemento para esta linha, adicione o código a seguir para criar uma tag para cada linha no resultado do procedimento armazenado.
rssOutput.AppendLine("")
11. No comentário Use as colunas 0 e 1 para o título e a descrição, adicione o seguinte código para criar ", geomRdr.GetValue(0))) com base nos dados retornados pelo procedimento armazenado.
rssOutput.AppendLine(String.Format("{0}", _ geomRdr.GetValue(1)))
12. No comentário Adicionar um elemento, adicione o código a seguir para criar um elemento para esta entrada.
rssOutput.AppendLine("")
13. No comentário Obtenha a instância geográfica GML da coluna 2, adicione o código a seguir para recuperar os dados GML do resultado do procedimento armazenado.
gml = geomRdr.GetValue(2).ToString()
14. No comentário Adicione os elementos ao XML de saída, adicione o código a seguir para adicionar dados GML ao feed GeoRSS.
rssOutput.AppendLine(gml)
15. No comentário Fechar e elementos, adicione o código a seguir.
rssOutput.AppendLine("") rssOutput.AppendLine("")
16. No comentário Fechar o documento e enviá-lo como resposta, adicione o seguinte código para completar o feed GeoRSS e enviá-lo ao solicitante.
rssOutput.Append("") context.Response.Write(rssOutput.ToString())
17. Salve GeoRSSHandler.vb.
Registrar manipulador HTTP
1. No Solution Explorer, clique duas vezes em web.config para abri-lo no editor.
2. Na seção, sob o comentário Registrar o GeoRSSHandler para solicitações .georss, adicione o seguinte XML.
<add verbo="*" path="*.georss" type="GeoRSSHandler" validar="false"/>
Nota: Você deve registrar manipuladores HTTP para extensões de arquivo específicas para que os Serviços de Informações da Internet encaminhem solicitações desses arquivos para o manipulador correto.
3. Salve web.config.
Testar manipulador HTTP
1. No Solution Explorer, clique no arquivo de projeto do site localizado na raiz da árvore e pressione F4 para visualizar suas propriedades.
2. Preste atenção ao atributo do número da porta.
3. No menu Site, clique em Opções de inicialização.
4. Selecione URL de lançamento, insira o seguinte URL (substitua porta pelo valor do atributo do número da porta do site) e clique em OK.
http://localhost:/storefindersite/test.georss
5. No menu Depurar, clique em Iniciar execução sem depuração.
6. Quando o Microsoft Internet Explorer ® for aberto, visualize a página que contém o feed RSS do nome da loja.
7. No Internet Explorer, clique com o botão direito em qualquer lugar da página da web e clique em Exibir código-fonte para abrir o arquivo de origem da página no Bloco de Notas. Observe que a origem desta página é o feed GeoRSS gerado pelo manipulador HTTP que você criou anteriormente.
8. Feche o Bloco de Notas.
9. Na barra de endereço do Internet Explorer, anexe a seguinte string de consulta ao URL e pressione Enter.
?PesquisarDe=34.000000,-118.000000
10. Verifique se o feed GeoRSS gerado contém a área de pesquisa e todas as lojas nela contidas.
11. Feche o Internet Explorer