Autor: Dflying Chen ( http://dflying.cnblogs.com/ )
Para algunos servicios complejos que tardan mucho en completarse y no tienen altos requisitos de tiempo real, elegir Cache suele ser una forma eficaz de mejorar la eficiencia. La implementación del servicio web de .NET considera plenamente la necesidad de caché. Solo necesita configuraciones simples para habilitar el caché. La llamada al servicio web en Atlas también puede utilizar este mecanismo de caché para reducir la sobrecarga innecesaria en el lado del servidor.
Para habilitar la caché del servicio web, solo necesita agregar el siguiente atributo a la declaración WebMethod:
[WebMethod(CacheDuration = 5)]
donde el valor de CacheDuration representa el tiempo de caché, en segundos.
Pero este método de caché lo proporciona el servicio web, Atlas no sabe nada al respecto y cada llamada aún se envía al servidor. Por lo tanto, no hay forma de que esta caché mejore el impacto de la latencia de la red en los usuarios.
Aprendamos más sobre la caché del servicio web a través de un programa de muestra.
Primero escriba un servicio web, devuelva la hora actual y especifique CacheDuration como 5 segundos:
[WebService(Namespace = " http://tempuri.org/ ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
clase pública CachedWebService: System.Web.Services.WebService
{
[Método Web (Duración de la caché = 5)]
Fecha y hora pública GetGurrentTime()
{
devolver FechaHora.Ahora;
}
}
Luego cree una página Atlas, agregue ScriptManager y haga referencia a este servicio web en ella:
<atlas:ScriptManager runat="server" ID="scriptManager">
<Servicios>
<atlas:ServiceReference Path="CachedWebService.asmx" />
</Servicios>
</atlas:ScriptManager>
Agregue algunas etiquetas HTML para llamar a este servicio web y mostrar los resultados:
<input id="btnInvoke" type="button" value="Invoke" onclick="return btnInvoke_onclick()" />
<div id="resultado">
</div>
La última es la parte de JavaScript, donde mostramos los resultados de cada llamada en la página para facilitar el análisis:
function btnInvoke_onclick() {
CachedWebService.GetGurrentTime(onCompleted);
}
función completada (resultado) {
$('resultado').innerHTML += resultado + "<br />";
}
Probémoslo en el navegador. Después de hacer clic en el botón varias veces, los resultados son los siguientes. Puede ver la función de caché:
Al mismo tiempo, puede ver en Fiddler que estas solicitudes en realidad se envían al servidor y que Cache es solo la implementación del lado del servidor:
El código fuente de este ejemplo se puede descargar aquí: