Autor: Dflying Chen ( http://dflying.cnblogs.com/ )
No post anterior (Chamando Web Service no ASP.NET Atlas - Criando Mashup para chamar Web Service remoto (instância do Yahoo! Weather)), apresentei o uso do BridgeRestProxy para realizar Mashup no Web Service. No entanto, no desenvolvimento real, este método simples muitas vezes não é suficiente. Precisamos escrever o código do programa para completar alguma lógica complexa. Ou seja, use uma classe proxy complexa personalizada em vez das integradas no Atlas, além de algumas tags XML no arquivo asbx. Hoje vamos dar um exemplo mais complexo: mashup o serviço de pesquisa do Google para aprender a usar uma classe personalizada para fazer proxy de chamadas para serviços Web remotos.
Primeiro, vamos dar uma olhada nos serviços fornecidos pelo Google: o Google fornece aos desenvolvedores uma série de APIs, que você pode ver em http://api.google.com/ Para a API de pesquisa que usaremos hoje, você também pode acessar http://api.google.com/Apply para obter uma chave de licença do Google e incluí-la em todas as solicitações ao Google. Dei uma olhada na documentação do Google e ela dizia que cada chave de licença permite apenas 1.000 solicitações por dia. Se você precisar usar a Pesquisa do Google em um site grande, terá que preparar várias chaves de licença. .Google é realmente o suficiente Stingy-_-b.
Depois de solicitar a chave de licença, podemos começar. Claro, se esta é a primeira vez que você entra em contato com o Mashup, consulte este meu artigo: Chamando o serviço da Web no ASP.NET Atlas - Criando um Mashup. para chamar o serviço Web remoto (noções básicas e exemplos simples).
Primeiro, use a ferramenta wsdl.exe que acompanha o Visual Studio para gerar o código C# que chama o Google Web Service com base em seu endereço wsdl:
wsdl.exe http://api.google.com/GoogleSearch.wsdl
gerará GoogleSearchService.cs Adicione-o ao diretório App_Code do nosso site. Neste ponto, podemos usar diretamente as classes deste arquivo, entre as quais GoogleSearchService.doGoogleSearch() é o método que precisamos. Mas dê uma olhada nesta classe confusa gerada automaticamente. Existem muitos outros métodos nela, e o método doGoogleSearch() também requer muitos parâmetros, portanto, devemos agrupar esse arquivo confuso primeiro, encapsular e simplificar suas chamadas.
Neste programa de exemplo, para cada resultado de pesquisa, precisamos apenas obter seus campos Título, URL e Snippet. Para reduzir o tráfego de rede, não usamos a classe de resultados de pesquisa que vem com GoogleSearchService.cs, mas personalizamos uma classe SearchResultLite que contém apenas o conteúdo que precisamos:
classe pública SearchResultLite
{
string privada _title;
título da string pública
{
obter {retornar _título};
definir {_título = valor};
}
string privada _url;
URL de string pública
{
obter {retornar _url};
definir {_url = valor};
}
string privada _snippet;
trecho de string pública
{
obter {retornar _snippet};
definir { _snippet = valor };
}
public SearchResultLite()
{
}
public SearchResultLite(string título, string url, string snippet)
{
_título = título;
_url = url;
_snippet = trecho;
}
}
Observe que a classe SearchResultLite acima deve ter um construtor padrão sem parâmetros e cada campo deve usar atributos em vez de membros públicos, caso contrário o Atlas cometerá erros durante o processo de conversão para objetos JavaScript.
Vamos agrupar GoogleSearchService.doGoogleSearch():
classe pública GoogleSearchWarpper
{
public SearchResultLite[] Search(string lisenceKey, string query)
{
GoogleSearchServices = novo GoogleSearchService();
Resultado GoogleSearchResult = s.doGoogleSearch(
licençaChave,
consulta,
0,
10,
falso,
"",
falso,
"",
"",
""
);
List
foreach (elemento ResultElement em result.resultElements)
{
SearchResultLite resultLite = novo SearchResultLite(elem.title, elem.URL, elem.snippet);
resultadoLites.Add(resultLite);
}
retornar resultadoLites.ToArray();
}
}
Dessa forma, precisamos apenas de dois parâmetros ao chamar o método Search e não há parte redundante nos dados retornados. Salve-o como GoogleSearchWarpper.cs.
Em seguida, precisamos adicionar a chave de licença solicitada no início ao arquivo web.config, que será usada nas etapas subsequentes:
Vejamos a declaração do arquivo Bridge GoogleSearchBridge.asbx:
Observe que o valor do atributo type da seção
o valor do atributo value de licenseKey é definido como % appsettings: GoogleWebAPILisenceKey % Este é um novo método de escrita introduzido no arquivo asbx, o que significa que seu valor será atribuído à seção appSettings no arquivo web. arquivo de configuração em tempo de execução é o valor de GoogleWebAPILisenceKey.
A consulta será passada do cliente e representa a palavra-chave da consulta.
Neste ponto, podemos testá-lo na página do Atlas. Claro, o primeiro passo é adicionar ScriptManager à página e uma referência ao Bridge acima:
Adicione um pedaço de HTML para permitir que os usuários insiram palavras-chave de consulta, acionem consultas e exibam resultados:
Finalmente, escreva JavaScript e você poderá ver o uso de Sys.StringBuilder:
function btnSearch_onclick() {
var tbQuery = new Sys.UI.TextBox($("tbQuery"));
Dflying.GoogleSearch.Search({'query': tbQuery.get_text()}, onSearchComplete);
}
função onSearchComplete(resultado) {
var sbResult = new Sys.StringBuilder();
for (var i = 0; i < resultado.comprimento; ++i) {
sbResult.append("
O programa de exemplo pode ser baixado aqui: