Autor: Dflying Chen ( http://dflying.cnblogs.com/ )
Bei einigen komplexen Diensten, deren Ausführung lange dauert und die keine hohen Echtzeitanforderungen haben, ist die Wahl von Cache oft eine wirksame Möglichkeit, die Effizienz zu verbessern. Die Webservice-Implementierung von .NET berücksichtigt vollständig die Notwendigkeit des Caches. Sie benötigen nur einfache Einstellungen, um den Cache zu aktivieren. Der Aufruf von Web Service in Atlas kann diesen Cache-Mechanismus auch nutzen, um unnötigen Overhead auf der Serverseite zu reduzieren.
Um den Cache des Webdienstes zu aktivieren, müssen Sie lediglich das folgende Attribut zur WebMethod-Deklaration hinzufügen:
[WebMethod(CacheDuration = 5)],
wobei der Wert von CacheDuration die Cache-Zeit in Sekunden darstellt.
Diese Cache-Methode wird jedoch vom Webdienst bereitgestellt, Atlas weiß nichts davon und jeder Aufruf wird trotzdem an den Server gesendet. Daher gibt es für diesen Cache keine Möglichkeit, die Auswirkungen der Netzwerklatenz auf Benutzer zu verbessern.
Lassen Sie uns anhand eines Beispielprogramms mehr über den Cache von Webdiensten erfahren.
Schreiben Sie zuerst einen Webdienst, geben Sie die aktuelle Zeit zurück und geben Sie CacheDuration als 5 Sekunden an:
[WebService(Namespace = " http://tempuri.org/ ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
öffentliche Klasse CachedWebService: System.Web.Services.WebService
{
[WebMethod(CacheDuration = 5)]
public DateTime GetGurrentTime()
{
return DateTime.Now;
}
}
Erstellen Sie dann eine Atlas-Seite, fügen Sie ScriptManager hinzu und verweisen Sie darin auf diesen Webdienst:
<atlas:ScriptManager runat="server" ID="scriptManager">
<Dienste>
<atlas:ServiceReference Path="CachedWebService.asmx" />
</Dienste>
</atlas:ScriptManager>
Fügen Sie einige HTML-Tags hinzu, um diesen Webdienst aufzurufen und die Ergebnisse anzuzeigen:
<input id="btnInvoke" type="button" value="Invoke" onclick="return btnInvoke_onclick()" />
<div id="result">
</div>
Der letzte Teil ist der JavaScript-Teil, in dem wir die Ergebnisse jedes Aufrufs auf der Seite zur einfachen Analyse anzeigen:
function btnInvoke_onclick() {
CachedWebService.GetGurrentTime(onCompleted);
}
Funktion onCompleted(result) {
$('result').innerHTML += result + "<br />";
}
Lassen Sie es uns im Browser testen. Nachdem Sie mehrmals auf die Schaltfläche geklickt haben, sehen Sie die Rolle des Caches:
Gleichzeitig können Sie in Fiddler sehen, dass diese Anforderungen tatsächlich an den Server gesendet werden und Cache nur die serverseitige Implementierung ist:
Der Quellcode für dieses Beispiel kann hier heruntergeladen werden: