Web Services in der Praxis mit Visual Studio .NET Christian Weyer [email protected] Freiberuflicher Berater & Entwickler.
Download ReportTranscript Web Services in der Praxis mit Visual Studio .NET Christian Weyer [email protected] Freiberuflicher Berater & Entwickler.
Web Services in der Praxis mit Visual Studio .NET Christian Weyer [email protected] Freiberuflicher Berater & Entwickler Agenda XML Web Services im Überblick Architektur von ASP.NET XML Web Services mit ASP.NET Client-Anwendungen für XML Web Services Einfachheit & Mächtigkeit von ASP.NET in punkto XML Web Services Wo gibt‘s weitere Info‘s? Voraussetzungen Kenntnis von XML und grundlegende .NETKenntnisse Interesse und Lust, sich auf die neue Welt der XML Web Services einzulassen … Demos Quer über diesen TechTalk-Vortrag verstreut Sie werden alle wichtigen Techniken und Vorgehensweise zu sehen bekommen Web Services Stack Veröffentlichen, Finden, Benutzen UDDI Formale Dienstbeschreibung WSDL Dienstinteraktion SOAP Universelles Datenformat XML Allgegenwärtige Kommunikation Internet Web Services Roadmap Inter Application-Protokolle Reliable Messaging Eventing Directory Transactions Web Services-Module Inspection Referral Security Description Routing License SOAP Internet TCP/IP XML HTTP/SMTP ASP.NET in der Übersicht Web Forms HTTP <HTML> <script> … </script> … </HTML> app.aspx IIS Web Services SOAP Common Language Runtime class X { [WebMethod] public int method1() { … } } app.asmx ASP.NET-Architektur Unmanaged Code HTTP Request IIS ASP.NET Runtime HTTP Module HTTP Module Request Handler Managed Code ... ASP.NET-Laufzeitumgebung HTTP aspnet_wp.exe (ASP.NET Worker Prozess) Named Pipe aspnet_isapi.dll (ASP.NET ISAPI Extension) inetinfo.exe (IIS) HTTP Runtime HTTP Pipeline HTTP Pipeline-Prozessmodell • Details von aspnet_wp.exe Worker Prozess komplett konfigurierbar • aspnet_isapi.dll verarbeitet <processModel> Konfiguration aus der globalen Datei machine.config • Jeder einzelne Worker Prozess bedient standardmäßig unendlich viele Anfragen ASP.NET Web Services sind HTTP Handler • System.Web.Services.Protocols. WebServiceHandlerFactory ASP.NET-Architektur Alle Web-Anwendungen laufen in einem aspnet_wp.exe Prozess • Isolation der Web-Anwendungen erfolgt über Application Domains • • IsolationLevel bei Installation festgelegt auf Low separater virtueller Speicher pro Application separates Debugging pro Application ASPNET als Standardbenutzer zur Ausführung von aspnet_wp.exe • Stark eingeschränkte Berechtigungen Dynamische Kompilierung aspnet_wp.exe wird verwendet, um Code für Web-Anwendungen und Web Services auszuführen • • • Versucht, Assemblies für Web-Anwendung und Web Service zu laden Erzeugt über CodeDOM-Klassen, die sich von Page (Web Forms) oder WebService ableiten Bei Änderungen in Source Code-Dateien werden über Reflection.Emit automatisch neue Assemblies erzeugt ASP.NET Architektur ASP.NET Runtime Assembly existiert, gleicher Zeitstempel Assembly für Datei existiert? Nein – kompilieren <% WebService codebehind=„WS„ %> Ja – ausführen ASP.NET Compiler Reflection class WS : WebService { ... } Web Service Assembly ASP.NET Deployment ASP.NET-Anwendungen sind grundsätzlich voneinander isoliert • Installation einer ASP.NET-Anwendung durch Erstellen eines Verzeichnisses mit anschließendem Filecopy (XCOPY Deployment) • • • Verschiedene Anwendungen können parallel mit verschiedenen Versionen einer Komponente arbeiten Keine Registry-Änderungen (REGSVR32) Keine Änderungen in der IIS Metabase Kein Neustart des Web Servers Uninstall • Verzeichnis löschen ASP.NET und .NET Remoting Zwei Möglichkeiten in .NET, XML Web Services zu erzeugen • • ASP.NET .NET Remoting Remoting bietet automatisierte Möglichkeit, nicht-XML Web Services zu erzeugen ASP.NET Web Services für lose gekoppelte Systeme .NET Remoting stellt eine verteilte Identität zur Verfügung • Leicht erweiter- und konfigurierbar XML Web Services XML Web Services werden mit ASP.NET zum Kinderspiel • • Mapping von Web Services auf Dateiendung .asmx • • Keine Kenntnis über die Standards notwendig Verführt zur Spielerei -> Web Services nicht für alles geeignet Machine.config IIS Mapping Implementierung inline oder als Code-behindKlasse • Festlegung über die @WebService Direktive Web Services-Attribute <WebService (Namespace:="http://eyesoft.de/webservices/", _ Description:="This Web Service mimics a very simple calculator.")> _ Public Class SimpleCalc <WebMethod(Description:="Add two numbers")> _ Public Function Add(ByVal a As Long, _ ByVal b As Long) As Long Return a + b End Function End Class XML Web Services Attribut <WebService> muss sich auf eine Klasse beziehen • • Namespace System.Web.Services Diese Klasse kann von Klasse WebService abgeleitet sein • Direkter Zugriff auf HttpContext Eigenschaften Description und Namespace werden in WSDL und auch im Client Proxy verwendet • • Description: Informale Beschreibung des Web Services Namespace: XML Namespace, in dem die Typen/Schemas des Web Services definiert sind XML Web Services Attribut <WebMethod> muss sich auf eine öffentliche Methode einer Klasse beziehen • Namespace System.Web.Services Methode kann standardmäßig über SOAP, HTTP GET und HTTP POST aufgerufen werden • Konfigurierbar in web.config Inline vs. Code behind Inline: <%@ WebService Language="C#" Class="MyMath" %> using System.Web.Services; public class MyMath { [WebMethod] public int Add(int num1, int num2) { return num1+num2; } } Code-behind: <%@ WebService Language="VB" Class="MyNameSpace.MyWebService,MyAssembly" %> Web Services testen ASP.NET besitzt eine eingebaute Testund Dokumentationsseite für XML Web Services • • Kann konfiguriert werden Mit HTTP GET-Bindung verbunden Hier werden keine SOAP-Pakete verschickt • • Reines HTTP GET Erweiterungsmechansimen von ASP.NET Web Services sind so nicht testbar Nutzung von Web Services ASP.NET Web Forms ASP.NET Mobile Web Forms .NET Konsolenanwendung .NET Windows Forms HTTP GET und POST Client-Anwendungen IE Web Services Behavior Klassisches Win32 PocketPC-Anwendung Java-Anwendung UNIX/Linux-Skript ... ASP.NET Web Service-Clients Proxy-basiertes Entwurfsmuster • • • Dynamische Proxys nur mit Zusatzaufwand möglich „Webverweis hinzufügen“ in Visual Studio .NET • Client-Anwendung spricht mit lokalem Objekt Proxy-Objekt übernimmt die eigentliche Kommunikation Klassenimplementierung basiert auf WSDL des Web Services wsdl.exe Kommandozeilenanwendung Synchroner Aufruf Asynchroner Aufruf • • • BeginMethodenName und EndMethodenName Aufruf von BeginXXX mit Callback oder WaitHandle EndXXX zur Freigabe der Verbindung Web Services debuggen Interaktives Debuggen • • • Breakpoints setzen PDB-Datei erstellen lassen An den richtigen Prozess hängen Web Services instrumentieren • • • • Debug-Klasse Trace-Klasse Event Log Performance Counters Web Services debuggen ASPNET hat keine Berechtigungen, um in das Event Log zu schreiben • \\HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\Eventlog\Application\Re strictGuestAccess auf 0 setzen und rebooten ASPNET hat keine Berechtigungen, um Event Sources zu erstellen • ASPNET-Benutzer muss Lese/Schreiberechte auf \\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl Set\ Services\Eventlog und alle Unterschlüssel haben 25 Serialisierung Die Umwandlung von XML/SOAPDatenpaketen in native .NET-Typen und wieder zurück geschieht über den Prozess der Serialisierung/Deserialisierung In ASP.NET XML Web Services kümmert sich die Klasse XmlSerializer um diese Aufgaben • Im Gegensatz zu .NET Remoting-basierten Web Services Relativ gut konfigurierbar, hat aber einige Schwächen, die man schnell abschaffen sollte System.Xml.Serialization XmlSerializer ist kein Serialisierer / Deserialisierer im eigentlichen Sinne • Bietet keine Type Fidelity • • • • • Tatsächlich ist Type Infidelity das Ziel Bildet XML-Daten auf Typinstanzen ab Bildet Typinstanzen auf XML-Daten ab Erlaubt die Abbildung zwischen .NET- und nicht-.NETAnwendungen (De-)Serialisiert nur öffentliche Felder Zirkuläre Referenzen können Endlosschleifen bewirken • Mehr ein „Reflektor“ Objektgraph muß Blätter besitzen, die nicht auf andere Objekte verweisen Unterstützt ausschließlich XML als Format Wird vornehmlich für Interoperabilität verwendet • Einsatz in ASP.NET XML Web Services Serialisierung mit XmlSerializer using System; using System.IO; using System.XML.Serialization; public class MyType { public Int32 x, y, sum; } void SomeMethod(Object rootObject) { FileStream fs = new FileStream(@“C:\MyData.xml", FileMode.Create); // Create an XML serializer for the root type XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyType)); // Serialize the object graph to the stream xmlSerializer.Serialize(fs, rootObject); fs.Close(); } // Force a flush of the data Deserialisierung mit XmlSerializer using System; using System.IO; using System.XML.Serialization; public class MyType { public Int32 x, y, sum; } MyType SomeMethod() { FileStream fs = new FileStream(@“C:\MyData.xml", FileMode.Open); XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyType)); // Deserialize the object graph from the stream MyType rootObject = (MyType) xmlSerializer.Deserialize(fs); fs.Close(); // Close the file return(rootObject); // Return the object } Datentypen Typ Beschreibung Einfache Typen String, Int32, Byte, Boolean, Int16, Int64, Single, Double, Decimal, DateTime und XmlQualifiedName Aufzählungstypen Public enum Farbe { rot=1, blau=2 } Felder von einfachen Typen und Aufzählungen Felder (Arrays) wie z.B. String[] oder Integer[] Klassen und Strukturen Klassen und Strukturen mit öffentlichen Felder oder Eigenschaften Felder von Klassen/Strukturen DataSet ADO.NET DataSet. Ein DataSet ist ein Speicherabbild einer Ergebnisrelation (z.B. aus einer DB-Abfrage). Vergleichbar mit ADO Recordset Felder von DataSet XmlNode Felder von XmlNode XmlNode ist eine In-Memory Repräsentation eines XML Fragments (vergleichbar mit einem abgespeckten XML DOM) Marshaling & Encoding Serialisierung geschieht mit Hilfe von System.Web.XmlSerialization Marshaling durch XmlSerializer • • Instanzen von XmlSerializer werden an CLR-Typen gebunden Eingeschränkte Unterstützung für komplexe CLR Typen • XSD-basiertes Modell Eigenes Marshaling durch Überschreiben von IXmlSerializable XML-Format Beeinflussung des XML-Formats/ Marshalings • • • • XmlElement | SoapElement XmlAttribute | SoapAttribute XmlArray | SoapArray XmlRoot Unterschiedliche XML-Formate in Web Services • • • HTTP-GET und HTTP-POST SOAP WSDL-Beschreibung Zwei (bzw. drei) Ausprägungen von SOAP • • Document • standardmäßig, konfigurierbar RPC • konfigurierbar SOAP-Format beeinflussen Attribut SoapDocument Method Ausprägung Document Use SoapDocument Service Document Literal/ Encoded Alle Methoden SoapRpcMethod RPC Encoded Methode SoapRpcService RPC Encoded Alle Methoden Literal/ Encoding Betrifft Methode Konfiguration ASP.NET Web Services sind über Einstellungen in der machine.config oder einer anwendungsspezifischen web.config konfigurierbar Festlegung der unterstützen Protokolle • HttpGet, HttpPost, Soap, Documentation Angabe der Test- und Dokumentationsseite Konfiguration der Sicherheitseinstellungen über web.config Zustand und Caching Zustand • • • • Web Services sind von Natur aus zustandslos Session-Objekt in ASP.NET ermöglicht das Halten von Daten zwischen mehreren Aufrufen • Auch Application-Objekt verfügbar [WebMethod(EnableSession=True)] Vorsicht bei Verwendung von Sessions in Web Services (Cookies) Caching • • Bei Rückgabe großer Daten, die sich selten ändern, sollte man Caching-Funktionalität von ASP.NET verwenden [WebMethod(CacheDuration=40)] Transaktionen Transaktionen • • • • TransactionOption Property in WebMethod Attribut • DB-Transaktionen ADO.NET-Transaktionen ‚Lokale‘ verteilte COM+-Transaktionen Lang andauernde Transaktionen (z.B. mit BizTalk Server) [WebMethod(TransactionOption= TransactionOption.Required)] COM+-Transaktionseinstellungen Über ContextUtil kann der Ausgang einer Transaktion gesteuert werden COM+-Dienste nutzen Nutzung einer Vielzahl von COM+Diensten möglich (je nach Plattform) • • • • • • • • Transaktionen Objekt-Pooling Just-In-Time Aktivierung (JITA) Queued Components Loosely-Coupled Events (LCE) Objekt-Erzeugung Private Komponenten Rollenbasierte Sicherheit COM+ und ASP.NET Web Services Verwendung von COM+-Diensten auch in ASP.NET und XML Web Services Verwendung einer eigenen Klasse, welche die COM+-Methoden implementiert • Verwendung der Eigenschaft TransactionOption des Attributs WebMethod • Wrappen dieser Klasse durch eine Web ServiceKlasse Disabled, NotSupported, Supported, Required, RequiresNew Probleme bei der dynamischen Registrierung durch ASP.NET-Laufzeitumgebung • Standardmäßiges Benutzerkonto mit geringen Privilegien Sicherheit Unterschiedliche Ebenen • • • • • Verschlüsselung • Z.B. Transportsicherheit (SSL, TLS, …) Authentifizierung Autorisierung Signaturen Kryptografie Authentifizierung Windows-Authentifizierung (via IIS) • Basic, Digest, NTLM, Kerberos, clientseitige SSLZertifikate Forms-basierte (Cookie) Authentifizierung Passport-Authentifizierung Eigene Authentifizierung <security> <authentication mode="[Windows|Forms|Passport|None]"/> </security> Autorisierung Bsp.: erlaube “Admins” oder “WebServiceUsers” und lehne alle anderen ab <!-- * = alle, ? = anonym bzw. nicht auth. --> <authorization> <allow verbs="POST" Roles="Admins" /> <allow Roles="WebServiceUsers"/> <deny users="*" /> </authorization> Bsp.: lehne anonyme (nicht auth.) Benutzer ab <authorization> <deny users="?" /> </authorization> Große Daten ASP.NET Web Services unterstützen keine Attachments • • DIME-Beispielimplementierung auf MSDN Online • Weder MIME, noch DIME Lediglich kodierte Parameterwerte können hier als Notlösung verwendet werden Nur ein Sample, kein Support DIME Support für nächste Version angekündigt Erweiterungsmöglichkeiten HTTP Module HTTP Handler SOAP Header SoapExtensions Erweiterungsmöglichkeiten SoapExtensions • • • • • • • Fortgeschrittenes Konzept Web Services-Aufrufe können intercepted werden Web Method-Aufrufe können intercepted werden Pre- und Post-Processing Klasse von SoapExtension ableiten Eigenes Attribut von SoapExtensionAttribute ableiten Attribut auf Methoden einer Web Service-Klasse anwenden • Auch Konfiguration über web.config/machine.config möglich Zu beachten Exceptions • • Werden immer als SoapException an den Client übertragen Eigene Exceptions gehen verloren • Man kann aber über SoapException die Gestalt des SOAP Faults steuern Wenn Sessions verwendet werden • Client muss Cookies verwalten Überladene Methoden • • Da WSDL kein Überladen zulässt, muss man den Nachrichtennamen im Quelltext spezifizieren/ändern <WebMethod(MessageName:=“FooX”)> Tipps Keine Properties als WebMethod verwenden • • Properties implizieren Zustand ‘Weniger ist mehr’ Caching verwenden, wo sinnvoll • • • CacheDuration Property für Anzeige-Caching Klasse Cache für Daten-Caching Grosser Performanzgewinn Stress Testing • • ACT im VS.NET Enterprise Edition WAST Nicht auf Biegen und Brechen … • • Web Services sind nicht immer das geeignete Mittel! Web Services vor allem dann verwenden, wenn Interop gefragt Für Leseratten http://www.eyesoft.de/wsbuch/ Glossar DIME: Direct Internet Message Encapsulation. Standard zur Übertragung von großen Datenmengen in einer Web Services-Umgebung GXA: Global XML Web Services Architecture. Rahmenwerk von Microsoft für Real-World Web Services aufbauend auf SOAP. Definiert Spezifikationen für die unterschiedlichsten Bereiche IIS: Microsoft Internet Information Server SOAP: Simple Object Access Protocol (ursprünglich). XML-basierte Spezifikation des W3C zur plattformübergreifenden Kommunikation im Internet. Basis für XML Web Services SOAP Toolkit: SOAP/ Web Services-Implementierung von Microsoft für COM / Windows DNA-Anwendungen WSDL: Web Services Description Language. XML Dialekt zur Metadatenbeschreibung von Web Services XML Web Services: Softwareimplementierungen/Programme die über XML-basierte Standardprotokolle im Internet von nahezu jeder Plattform aus angesprochen werden können Weitere Informationen Christian Weyer, XML Web Service-Anwendungen mit Microsoft .NET, Addison-Wesley http://www.eyesoft.de/wsbuch/ Andreas Eide at. al., Professional ASP.NET Web Services, Wrox Press http://www.amazon.de/exec/obidos/ASIN/1861005458/qid%3D10 10053263/302-2442057-6660030 Andrew Krowczyk et. al., Professional C# Web Services: Building .NET Web Services with ASP.NET and .NET Remoting, Wrox Press http://www.amazon.de/exec/obidos/ASIN/1861004397/qid%3D10 10053263/302-2442057-6660030 William Oellermann, Architecting Web Services, Apress http://www.amazon.de/exec/obidos/ASIN/1893115585/qid%3D101 0053302/302-2442057-6660030 Weitere Informationen .NET XML Web Services Repertory http://www.xmlwebservices.cc/ MSDN SOAP Center http://msdn.microsoft.com/soap/ MSDN XML Web Services Center http://msdn.microsoft.com/webservices/ SOAP Builders Interop Lab http://www.xmethods.net/soapbuilders/ LearnXmlWs http://www.learnxmlws.com/ GotDotNet http://www.gotdotnet.com/ .NET Extreme http://www.dotnetextreme.com/ .NET 247 Guide Web Services http://www.dotnet247.com/247reference/guide/9.aspx Fragen!? Uff...