Autor: Dflying Chen ( http://dflying.cnblogs.com/ )
Im vorherigen Artikel (Aufrufen von Webdiensten in ASP.NET Atlas – Erstellen eines Mashups zum Aufrufen von Remote-Webdiensten (Grundkenntnisse und einfaches Beispiel)) habe ich einige Grundkenntnisse über Mashup für Remote-Webdienste in Atlas vorgestellt und ein einfachstes Beispiel gegeben das ist überhaupt nicht sinnvoll. Um heute auf dieses Thema zurückzukommen, werde ich ein komplexeres, aber einigermaßen nützliches Beispiel geben – Yahoo!
Genug Unsinn, machen wir uns zunächst mit dem Yahoo!-Wetterdienst vertraut: Yahoo bietet auf seiner Website einen Wettervorhersagedienst an ( http://weather.yahoo.com/ ) und stellt auch eine Webdienstschnittstelle bereit ( http :/ /developer.yahoo.com/weather/ )
Aus den beiden oben genannten Webseiten können wir erkennen, dass die URL des von Yahoo! bereitgestellten Wetterdienstes http://xml.weather.yahoo.com/forecastrss lautet. Der Dienst verfügt außerdem über zwei Parameter:
p: den Standortcode Das Wetter soll abgefragt werden (Sie können diesen Code an verschiedenen Stellen unter http://weather.yahoo.com/ überprüfen).
u: Die Einheit der Temperatur im zurückgegebenen Ergebnis, f steht für Fahrenheit und c für Celsius.
Es scheint, dass dieser Yahoo!-Wetterdienst recht einfach ist. Lassen Sie uns testen, ob er gut funktioniert. Gehen Sie zunächst zu http://weather.yahoo.com/ und finden Sie heraus, dass der Standortcode von Shanghai CHXX0116 ist. Geben Sie dann http://xml.weather.yahoo.com/forecastrss?p=CHXX0116&u=c in den Browser ein. Nun wird das folgende nicht sehr komplizierte XML-Ergebnis zurückgegeben:
Yahoo Weather Service XML Result
http://us.rd.yahoo.com/dailynews/rss/weather/Shanghai__CH/*http://xml.weather.yahoo.com/forecast/CHXX0116_c.html
http://weather.yahoo.com/
http://us.rd.yahoo.com/dailynews/rss/weather/Shanghai__CH/*http://xml.weather.yahoo.com/forecast/CHXX0116_c.html
" />
Aktuelle Bedingungen:
Nebel, 21 °C
Prognose:
Do - Vereinzelte Gewitter. Höchstwert: 25. Tiefstwert: 20
Fr. - Vormittags Regenschauer. Hoch: 26 Tief: 18
Vollständige Vorhersage bei Yahoo! Wetter
(bereitgestellt von The Weather Channel)
]]>
Wir können sehen, dass die bereitgestellten Informationen sehr umfassend sind (sogar die Sonnenauf- und -untergangszeiten ... ), lassen Sie uns die asbx-Bridge-Seite schreiben, um diesen Service zu verknüpfen.
Unter Bezugnahme auf die asbx-Anweisung im Artikel „Calling Web Service in ASP.NET Atlas – Creating Mashup to Call Remote Web Service (Grundkenntnisse und einfaches Beispiel)“ können wir zunächst den folgenden Absatz schreiben:
In:
Die Namespace- und ClassName-Attribute von
Das serviceUrl-Attribut von
Die GetWeather-Methode definiert die beiden oben aufgeführten Parameter p und u. Wir haben den Standardwert des u-Parameters als c (für Grad Celsius) angegeben und der p-Parameter wird vom Aufrufer übergeben.
Dieser Schritt reicht tatsächlich aus. Der Client erhält den oben im Browser angezeigten XML-String und kann auf dem Client verarbeitet und angezeigt werden. Die Verarbeitung von XML durch den Client ist jedoch nicht so einfach oder effizient, und die Übertragung zu vieler unnötiger Informationen über das Netzwerk ist ebenfalls eine Verschwendung. Hier verwenden wir also den in asbx integrierten Transformer, um dieses XML zu verarbeiten, den für uns interessanten Inhalt zu extrahieren und ihn in Form von JSON an den Client zu senden. Fügen Sie dem Abschnitt
Die
Name ist ein Attributsegment des Selektors und das angegebene Wertattribut ist ein XPath-Ausdruck, der das Datensegment auswählt, das vom gesamten XPathBridgeTransformer verwendet wird.
name ist ein Wörterbuchsegment von namespaceMapping, das die Namespace-Zuordnung in dieser XML-Datei angibt. Wenn wir im folgenden Knotenauswahlprozess einen bestimmten Namensraum verwenden, muss dessen Deklaration hier sein. Hier fügen wir eine Zuordnung zu yweather hinzu, da diese im Folgenden verwendet wird.
Name ist ein Wörterbuchsegment von selectedNodes, wobei das Wertattribut jedes Elements ein XPath-String ist, der zur Auswahl des entsprechenden Werts aus XML verwendet wird, und das Namensattribut zur Angabe des entsprechenden Attributnamens in JavaScript verwendet wird. Als Beispiel habe ich hier nur drei Inhalte erhalten. Sie können sehen, dass das oben angegebene NamespaceMapping im XPath von CurrentCondition verwendet wird.
Ich werde nicht näher auf XPath eingehen. Freunde, die daran interessiert oder nicht damit vertraut sind, können es selbst googeln. Es gibt viele Online-Ressourcen. Ich bin mit anderen Arten von Transformern nicht sehr vertraut. Ich werde über sie sprechen, wenn ich ihnen in Zukunft begegne. Die fertige YahooWeatherBridge.asbx-Datei lautet wie folgt:
Erstellen Sie nun eine ASP.NET-Seite zum Testen. Zuerst wird der ScriptManager tausendmal wiederholt und ein Verweis auf Bridge:
Dann gibt es ein HTML-Select-Element, das mehrere Städte und entsprechende Stadtcodes auflistet:
Eine HTML-Schaltfläche, die zum Auslösen des Aufrufs des Dienstes verwendet wird:
Zur Anzeige des Ergebnisses wird ein HTML-Code verwendet:
Dann kommt JavaScript. Sie können sehen, dass Mashup über Dflying.YahooWeatherService.GetWeather() aufgerufen wird und der transformierte Wert auf der Seite ausgegeben wird, nachdem die Methode zurückgegeben wurde: function getWeather_onclick() {
// neues Atlas-'Select'-Steuerelement
var place = new Sys.UI.Select($('place'));
// die Bridge-Methode aufrufen
Dflying.YahooWeatherService.GetWeather({'p': place.get_selectedValue()}, onGetComplete);
}
Funktion onGetComplete(result) {
$('result').style.display = "block";
$('title').innerHTML = result[0].Title;
$('description').innerHTML = result[0].Description;
}