Web Services in der Praxis mit Visual Studio.NET Christian Weyer [email protected] Freiberuflicher...
-
Upload
berthold-helmuth -
Category
Documents
-
view
107 -
download
2
Transcript of Web Services in der Praxis mit Visual Studio.NET Christian Weyer [email protected] Freiberuflicher...
Web Services in der Praxis
mit Visual Studio .NET
Christian [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 .NET-Kenntnisse
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
Allgegenwärtige Kommunikation Internet
Universelles Datenformat XML
Dienstinteraktion SOAP
Formale Dienstbeschreibung WSDL
Veröffentlichen, Finden, Benutzen UDDI
Web Services Roadmap
SOAP
HTTP/SMTPXMLTCP/IP
Directory
Inspection
Description
Web Services-Module
Inter Application-Protokolle
Referral
Routing
Security
License
Eventing Transactions
Reliable Messaging
Internet
IIS
Web Forms
Web Services
Common Language Runtime
ASP.NET in der Übersicht
app.aspx
<HTML><script>…</script>…</HTML>
app.asmx
class X {
[WebMethod]
public int
method1()
{ … }
}
HTTP
SOAP
ASP.NET-Architektur
Unmanaged Code
Managed Code
...Request Handler
HTTP Module
HTTP Module
ASP.NET Runtime
IIS
HTTP Request
ASP.NET-Laufzeitumgebung
inetinfo.exe(IIS)
aspnet_isapi.dll(ASP.NET
ISAPI Extension)
aspnet_wp.exe(ASP.NET Worker Prozess)
HTTP
Named Pipe
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• IsolationLevel bei Installation festgelegt auf
Low Isolation der Web-Anwendungen erfolgt
über Application Domains• 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
<% WebService codebehind=„WS„ %>
ASP.NET Compiler
Reflection
Web Service
Assembly
ASP.NET Runtime
Assembly für Dateiexistiert?
Assembly existiert, gleicher Zeitstempel
Nein – kompilieren Ja –
ausführen
class WS : WebService{ ... }
ASP.NET Deployment
ASP.NET-Anwendungen sind grundsätzlich voneinander isoliert
• Verschiedene Anwendungen können parallel mit verschiedenen Versionen einer Komponente arbeiten
Installation einer ASP.NET-Anwendung durch Erstellen eines Verzeichnisses mit anschließendem Filecopy (XCOPY Deployment)
• 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• Keine Kenntnis über die Standards notwendig
• Verführt zur Spielerei -> Web Services nicht für alles geeignet
Mapping von Web Services auf Dateiendung .asmx• Machine.config
• IIS Mapping
Implementierung inline oder als Code-behind-Klasse• 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 Test- und 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
• Client-Anwendung spricht mit lokalem Objekt• Proxy-Objekt übernimmt die eigentliche
Kommunikation• Klassenimplementierung basiert auf WSDL des
Web Services Dynamische Proxys nur mit Zusatzaufwand
möglich „Webverweis hinzufügen“ in Visual
Studio .NET• 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
25
Web Services debuggen
ASPNET hat keine Berechtigungen, um in das Event Log zu schreiben• \\HKEY_LOCAL_MACHINE\SYSTEM\
CurrentControlSet\Services\Eventlog\Application\RestrictGuestAccess auf 0 setzen und rebooten
ASPNET hat keine Berechtigungen, um Event Sources zu erstellen• ASPNET-Benutzer muss Lese/Schreiberechte auf \\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\Eventlog und alle Unterschlüssel haben
Serialisierung
Die Umwandlung von XML/SOAP-Datenpaketen 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• Mehr ein „Reflektor“
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-.NET-
Anwendungen• (De-)Serialisiert nur öffentliche Felder
Zirkuläre Referenzen können Endlosschleifen bewirken• 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
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}
Serialisierung 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}
Deserialisierung mit XmlSerializer
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 XmlNode ist eine In-Memory Repräsentation eines XML Fragments (vergleichbar mit einem abgespeckten XML DOM)
Felder von XmlNode
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 Ausprägung Use Betrifft
SoapDocumentMethod
Document Literal/Encoding
Methode
SoapDocumentService
Document Literal/Encoded
Alle Methoden
SoapRpcMethod RPC Encoded Methode
SoapRpcService RPC Encoded Alle Methoden
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• DB-Transaktionen
• ADO.NET-Transaktionen
• ‚Lokale‘ verteilte COM+-Transaktionen
• Lang andauernde Transaktionen (z.B. mit BizTalk Server)
TransactionOption Property in WebMethod Attribut • [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• Wrappen dieser Klasse durch eine Web Service-
Klasse Verwendung der Eigenschaft
TransactionOption des Attributs WebMethod• 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 SSL-
Zertifikate
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
Bsp.: lehne anonyme (nicht auth.) Benutzer ab
<!-- * = alle, ? = anonym bzw. nicht auth. --><authorization> <allow verbs="POST" Roles="Admins" /> <allow Roles="WebServiceUsers"/> <deny users="*" /></authorization>
<authorization> <deny users="?" /></authorization>
Große Daten
ASP.NET Web Services unterstützen keine Attachments
• Weder MIME, noch DIME
• Lediglich kodierte Parameterwerte können hier als Notlösung verwendet werden
DIME-Beispielimplementierung auf MSDN Online
• 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-Wesleyhttp://www.eyesoft.de/wsbuch/
Andreas Eide at. al., Professional ASP.NET Web Services, Wrox Presshttp://www.amazon.de/exec/obidos/ASIN/1861005458/qid%3D1010053263/302-2442057-6660030
Andrew Krowczyk et. al., Professional C# Web Services: Building .NET Web Services with ASP.NET and .NET Remoting, Wrox Presshttp://www.amazon.de/exec/obidos/ASIN/1861004397/qid%3D1010053263/302-2442057-6660030
William Oellermann, Architecting Web Services, Apresshttp://www.amazon.de/exec/obidos/ASIN/1893115585/qid%3D1010053302/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...Uff...