Web Services in der Praxis mit Visual Studio .NET Christian Weyer [email protected] Freiberuflicher Berater & Entwickler.

Download Report

Transcript 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...