Autor: Dflying Chen ( http://dflying.cnblogs.com/ )
En la publicación anterior (Llamar a un servicio web en ASP.NET Atlas: crear un Mashup para llamar a un servicio web remoto (instancia de Yahoo! Weather)), presenté el uso de BridgeRestProxy para realizar un Mashup en un servicio web. Sin embargo, en el desarrollo real, este método simple a menudo no es suficiente. Necesitamos escribir código de programa para completar alguna lógica compleja. Es decir, utilice una clase de proxy compleja personalizada en lugar de las integradas en Atlas más algunas etiquetas XML en el archivo asbx. Hoy tomaremos un ejemplo más complejo: combine el servicio de búsqueda de Google para aprender a utilizar una clase personalizada para realizar llamadas proxy a servicios web remotos.
Primero, echemos un vistazo a los servicios proporcionados por Google: Google nos proporciona a los desarrolladores una serie de API, que pueden ver en http://api.google.com/ . Para la API de búsqueda que usaremos hoy. También puede ir a http://api.google.com/Apply para obtener una clave de licencia de Google e incluir esta clave en cada solicitud a Google. Eché un vistazo a la documentación de Google y decía que cada clave de licencia solo permite 1000 solicitudes por día. Si necesita utilizar la búsqueda de Google en un sitio web grande, me temo que tendrá que preparar un montón de claves de licencia. Google es realmente bastante tacaño-_-b.
Después de solicitar la clave de licencia, podemos comenzar. Por supuesto, si es la primera vez que entra en contacto con Mashup, puede consultar este artículo mío: Llamar a un servicio web en ASP.NET Atlas: crear un Mashup. Llamar al Servicio Web Remoto (conceptos básicos y ejemplos sencillos).
Primero, use la herramienta wsdl.exe que viene con Visual Studio para generar el código C# que llama al servicio web de Google según su dirección wsdl:
wsdl.exe http://api.google.com/GoogleSearch.wsdl
generará GoogleSearchService.cs Agréguelo al directorio App_Code de nuestro sitio web. En este punto, podemos usar las clases de este archivo directamente, entre las cuales GoogleSearchService.doGoogleSearch() es el método que necesitamos. Pero eche un vistazo a esta clase desordenada generada automáticamente. Hay muchos otros métodos en ella, y el método doGoogleSearch () también requiere muchos parámetros, por lo que primero debemos empaquetar este archivo desordenado, encapsular y simplificar sus llamadas.
En este programa de muestra, para cada resultado de búsqueda, solo necesitamos obtener sus campos Título, URL y Fragmento. Para reducir el tráfico de la red, no utilizamos la clase de resultados de búsqueda que viene con GoogleSearchService.cs, sino que personalizamos una clase SearchResultLite que solo contiene el contenido que necesitamos:
clase pública SearchResultLite
{
cadena privada _título;
Título de cadena pública
{
obtener {return_title}
establecer { _título = valor }
}
cadena privada _url;
URL de cadena pública
{
obtener {return_url}
establecer { _url = valor }
}
cadena privada _snippet;
Fragmento de cadena pública
{
obtener {return_snippet}
establecer { _snippet = valor }
}
resultado de búsqueda públicoLite()
{
}
public SearchResultLite (título de cadena, URL de cadena, fragmento de cadena)
{
_título = título;
_url = URL;
_snippet = fragmento;
}
}
Tenga en cuenta que la clase SearchResultLite anterior debe tener un constructor sin parámetros predeterminado y cada campo debe usar atributos en lugar de miembros públicos; de lo contrario, Atlas cometerá errores durante el proceso de conversión a objetos JavaScript.
Terminemos con GoogleSearchService.doGoogleSearch():
clase pública GoogleSearchWarpper
{
Búsqueda pública SearchResultLite [] (cadena clave de licencia, consulta de cadena)
{
GoogleSearchService s = nuevo GoogleSearchService();
Resultado de GoogleSearchResult = s.doGoogleSearch(
clave de licencia,
consulta,
0,
10,
FALSO,
"",
FALSO,
"",
"",
""
);
Lista
foreach (elemento ResultElement en result.resultElements)
{
SearchResultLite resultLite = nuevo SearchResultLite(elem.title, elem.URL, elem.snippet);
resultadoLites.Add(resultadoLite);
}
devolver resultadoLites.ToArray();
}
}
De esta manera, solo necesitamos dos parámetros al llamar al método de búsqueda y no hay ninguna parte redundante en los datos devueltos. Guárdelo como GoogleSearchWarpper.cs.
A continuación, debemos agregar la clave de licencia solicitada al principio al archivo web.config, que se utilizará en los pasos siguientes:
Veamos la declaración del archivo Bridge GoogleSearchBridge.asbx:
Observe que el valor del atributo de tipo de la sección
el valor del atributo de licenciaKey se establece en% appsettings: GoogleWebAPILisenceKey% Este es un nuevo método de escritura introducido en el archivo asbx, lo que significa que su valor se asignará a la sección appSettings en la web. El archivo de configuración en tiempo de ejecución es el valor de GoogleWebAPILisenceKey.
La consulta se pasará desde el cliente y representa la palabra clave de la consulta.
En este punto, podemos probarlo en la página Atlas. Por supuesto, el primer paso es agregar ScriptManager a la página y una referencia al puente anterior:
Agregue una parte de HTML para permitir a los usuarios ingresar palabras clave de consulta, activar consultas y mostrar resultados:
Finalmente, escriba JavaScript y podrá ver el uso de Sys.StringBuilder:
function btnSearch_onclick() {
var tbQuery = nuevo Sys.UI.TextBox($("tbQuery"));
Dflying.GoogleSearch.Search({'query': tbQuery.get_text()}, onSearchComplete);
}
función enSearchComplete(resultado) {
var sbResult = nuevo Sys.StringBuilder();
for (var i = 0; i < resultado.longitud; ++i) {
sbResult.append("
sbResult.append("" + resultado[i].Título + "
");
sbResult.append("" + resultado[i].Url + "
" );
sbResult.append(resultado[i].Fragmento);
}
$('resultado').innerHTML = sbResult.toString();
}
El programa de muestra se puede descargar aquí: