Kapitel 8: Workshop .NET – 1Objektverwaltung höherer Ordnung (OHO) – SS 2002
8.2 Microsoft .NET
Kurzer Überblick zu Microsoft .NET • .NET Systemübersicht• Common Language Runtime• .NET Class Library• Erweiterungen und Dienste
.NET Web-Service Beispiel• Überweisungsszenario mit Web-Services...• Service Description and Discovery• Web Referenzen• Zoom-In: Proxies und Implementierungen in C#
Kapitel 8: Workshop .NET – 2Objektverwaltung höherer Ordnung (OHO) – SS 2002
Topic: Warum .NET?
Ubiquitous Software Infrastructure
Kapitel 8: Workshop .NET – 3Objektverwaltung höherer Ordnung (OHO) – SS 2002
.Überblick
CLR
MSIL
C#
VB.NET
C++ JS
API
Class Library
XML Web Services
ADO.NET
InteropASP.NET
WebForms
ODBC.NET
OLE DB
.NET DP
COM+Services
.NET My Services
Web Controls
.NETRem-otingChannels
Darüberhinaus ist.NET für Microsoft auch einfach ‚Markenname‘ für die aktuelle Produktgeneration
Kapitel 8: Workshop .NET – 4Objektverwaltung höherer Ordnung (OHO) – SS 2002
.NET in KürzeSoftware-Infrastruktur für die Entwicklung verteilter, heterogener Anwendungen (mit ‘verteilt’ meint man hier insbesondere das Internet)Für alle Arten von Computern (.NET Compact Framework, Smart Device Extension SDE)Optimiert für Windows (GDI+)Starke Ähnlichkeit zu den Konzepten und Mechanismen von JavaUnter anderem wird auch SOAP unterstützt, aber leider ist die Implementierung derzeit noch unvollständig“.NET My Services” waren mal als beispielhafte Web-Services gedacht...Microsoft Produkt
Kapitel 8: Workshop .NET – 5Objektverwaltung höherer Ordnung (OHO) – SS 2002
Common Language Runtime (CLR)
Die CLR ist die Laufzeitumgebung für sogenannten „managed“ Code• Objektorientierung• Garbage Collection• Immer Just-In-Time Kompilierung (JIT)• Class Management (Zugriff, Versionierung)• Security Sandbox
Lauffähig ist alles, was in der MicrosoftIntermediate Language (MSIL) vorliegtCLR ~ Java Virtual MachineMSIL ~ Java Byte Code
CLR
MSIL
C#
VB.NET
C+ + JS
API
Class Library
XML WebServices
ADO.NET
Interop
ASP.NET
WebForms
ODBC.NET
OLE DB
.NET DP
COM+Services
.NET My Services
Web Controls
CLR
MSIL
C#
VB.NET
C+ + JS
API
Class Library
XML WebServices
ADO.NET
Interop
ASP.NET
WebForms
ODBC.NET
OLE DB
.NET DP
COM+Services
.NET My Services
Web Controls
CLR
MSIL
Kapitel 8: Workshop .NET – 6Objektverwaltung höherer Ordnung (OHO) – SS 2002
Sprachunterstützung von .NET
“Sprachunabhängigkeit”• Source kann in ‘beliebiger’ Sprache sein,
sofern jene in MSIL übersetzt wird• C#, VB.NET, C++, Jscript, Java, Eiffel…• Aber nur C# und VB.NET spiegeln das
Objektmodel der CLR direkt wider…“Plattformunabhängigkeit”• CLR selbst ist standardisiert• Microsoft selbst bietet mit ‘Rotor’ eine Shared-Source
Implementierung der CLR für Windows NT und FreeBSD• Aus der Linux-Gemeinde kommt das ‘Mono’ Projekt• Problem: Das Klassenframework ist nicht komplett offen
C#
VB.NET
C++ JSCLR
MSIL
Kapitel 8: Workshop .NET – 7Objektverwaltung höherer Ordnung (OHO) – SS 2002
.NET Class Library
Umfangreiche sprachunabhängigeKlassenbibliothek• Data Access (ADO.NET)• XML, XSLT• Web Services (SOAP, UDDI, WSDL)• Crypto (RSA, DES/3DES, MD5, ...)• I/O (File, TCP, HTTP, ...)
Nicht komplett plattformunabhängig(although: Ximian‘s Mono [Opensource .NET Framework], Halcyon Software [.NET Framework in Java])
CLR
MSIL
C#
VB.NET
C+ + JS
API
Class Library
Kapitel 8: Workshop .NET – 8Objektverwaltung höherer Ordnung (OHO) – SS 2002
.NET Erweiterungen
ADO.NET• Zugriff auf Datenquellen (OLE DB, ODBC)
COM+ Interoperabilität• Zugriff auf COM+ Infrastruktur (Tx, Queues, etc.)
.NET Remoting• Vergleichbar mit Java RMI
ASP.NET• Programmiermodel für Einbindung in IIS
Web-Services• SOAP Kommunikation
CLR
MSIL
C#
VB.NET
C+ + JS
API
XML Web Services
ADO.NET
InteropASP.NET
.NETRem-oting
Kapitel 8: Workshop .NET – 9Objektverwaltung höherer Ordnung (OHO) – SS 2002
Szenario - Übersicht
Finance
UID
Zürich
Bern
Client
Account
UIDa
Account
UDDIFinance WebService
WebService_BaselWebService_Bern
SOAP
SOAP SOAP
Basel
Kapitel 8: Workshop .NET – 10Objektverwaltung höherer Ordnung (OHO) – SS 2002
Web-Services Infrastruktur
Kapitel 8: Workshop .NET – 11Objektverwaltung höherer Ordnung (OHO) – SS 2002
Web-Service DiscoveryLokalisierung von Dokumenten, die einen Web-Service beschreibenBei .NET typischerweise zwei Dokumente:1. WSDL-Beschreibung2. .disco Discovery-Datei
• XML Dokument, das auf andere Resourcen verweist (typischer-weise URLs), die gesuchten Web-Service näher beschreiben
• Erleichtert automatisierte Suche nach einem Web-Service.• Beispiel:
<?xml version="1.0" ?><disco:discovery xmlns:disco=http://schemas.xmlsoap.org/disco
xmlns:wsdl="http://schemas.xmlsoap.org/disco/wsdl"> <wsdl:contractRef ref="http://sapr4/oho/Finance.asmx?WSDL"/>
</disco:discovery>
Ein Web-Service muss keine Discovery anbieten(entweder gar nicht oder zumindest nicht selbst -> UDDI)ASP.NET ermöglicht sogar selbstbeschreibende Web Services
Kapitel 8: Workshop .NET – 12Objektverwaltung höherer Ordnung (OHO) – SS 2002
WSDL Beispiel (Account Web-Service)<?xml version="1.0" encoding="utf-8" ?><definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" … >
<types> … </types><message name="WithdrawSoapIn"> … </message><message name="WithdrawSoapOut"> … </message>
<portType name="WithdrawSoap"><operation name="Withdraw">
<input message="s0:WithdrawSoapIn"/><output message="s0:WithdrawSoapOut"/>
</operation>…
</portType>
<binding name="s0:AccountsBaselSoap"> … </binding>
<service name="AccountsBasel"><port name="AccountsBaselSoap" binding="s0:AccountsBaselSoap" ><soap:address location=“http://sapr4/WebService_Basel/Accounts.asmx"/>
</port></service>
</definitions>
http://sapr4:4711/roehm/WebService_Basel/Account.asmx?WSDL
Kapitel 8: Workshop .NET – 13Objektverwaltung höherer Ordnung (OHO) – SS 2002
Zugriff auf Web-Services
Eine Proxy-Klasse und das .NET Framework erledigendie Feinarbeit.Vorgehensweise:1. Lokalisieren des gewünschten Web-Service.2. Erzeugen einer Proxy-Klasse für diesen Web-Service
im Projekt mittels einer Web-Referenz.3. Einbinden der Proxy-Klasse im Client Code über deren
Namespace (using Direktive).4. Instanziierung der Proxy-Klasse im Client Code.5. Zugriff auf den Web-Service über die Proxy-Klasse.
Kapitel 8: Workshop .NET – 14Objektverwaltung höherer Ordnung (OHO) – SS 2002
1. Lokalisierung
Nachschlagen in einem Web-Services Directory• Suche nach einem .disco Wegweiser, der auf die gesuchte
WSDL Beschreibung verweist.Eine WSDL Datei entspricht einer IDL Beschreibung a la COM oder CORBASpeziell bei ASP.NET:• ASP.NET Web-Services sind selbstbeschreibend.• Parameter ‘?DISCO’ liefert Discovery-Dokument,
Parameter ‘?WSDL’ liefert WSDL Beschreibung
Kapitel 8: Workshop .NET – 15Objektverwaltung höherer Ordnung (OHO) – SS 2002
2. Proxy-Klassen
Proxy-Klassen repräsentieren die Funktionalität einesWeb-Services im Client• Konzept wie bei CORBA, COM+ und EJB• Orts- und Implementierungstransparenz
Grundlage der Proxy-Klasse ist WSDL Beschreibung Beispiel mit .NET:
wsdl.exe /language:CS /out:Finance.cs URL
Theoretisch Interoperabilität zwischen verschiedenen Herstellern von SOAP Client und SOAP ServerPraxis…
Kapitel 8: Workshop .NET – 16Objektverwaltung höherer Ordnung (OHO) – SS 2002
2b. Web References von Visual Studio
VisualStudio.NET kapselt Proxy-Klassen und deren Erzeugung/Verwaltung als sogenannte Web References• Basierend auf Discovery- und WSDL-Datei• Bindung zwischen Proxy und Service kann sein:
– StatischZum Kompilierzeitpunkt wird Client mit einer konkreten Instanz eines Web-Services gebunden
– Dynamisch Der Proxy wird erzeugt und kompiliert, die von ihm angesprochene Service-Instanz kann aber zur Laufzeit festgelegt werden, entweder per Konfigurationsdatei(web.config) oder im Programm per URL() Methode.
Kapitel 8: Workshop .NET – 17Objektverwaltung höherer Ordnung (OHO) – SS 2002
Proxy-Erzeugung für ASP.NET Web-ServicesC# Source
Client.cs
FinanceClient
C# CompilerC# Compiler
CLR.NET Framework
wsdl.exe /language:CS … Finance.asmx?WSDL
C# Proxy
Reference.cs
WSDL
Finance?WSDL
C# Source
Finance.asmx.cs
Finance Service
Kapitel 8: Workshop .NET – 18Objektverwaltung höherer Ordnung (OHO) – SS 2002
Auszug aus dem Account-Proxy
statische URL-Bindung
public class Account :System.Web.Services.Protocols.SoapHttpClientProtocol
{public Account() {
this.Url = "http://sapr4/…/WebService_Bern/Account.asmx";}…public System.Double Withdraw ( long lAccountNumber,
System.Double fAmount) {
object[] results = this.Invoke(“Withdraw", new object[] {lAccountNumber,fAmount});
return ((System.Double)(results[0]));} …
}
Kapitel 8: Workshop .NET – 19Objektverwaltung höherer Ordnung (OHO) – SS 2002
3. - 5. Einbindung und Verwendung des Proxyusing FinanceWebService.OhOBank;
public class FinanceClient{
…public Transfer ( long lFrom, long lTo, System.Double fAmount ) {
try {
Account account = new Account();account.Url = MapAccountToService(lFrom);account.Withdraw(lFrom, fAmount);…
}catch ( System.Exception ex ){ … }
}…}
dynamische URL-Bindung
Kapitel 8: Workshop .NET – 20Objektverwaltung höherer Ordnung (OHO) – SS 2002
ASP.NET Web-Service (Server)
1. HTTP requests arrive,with method name andparameters encoded inURL or separate XML.
5. ASP.NET converts resultsto XML and returns toclient via HTTP.
2. ASP.NET creates objectspecified in ASMX file.
Your NET objectMethod 1...Method N
Windows 2000 server machinewith .NET and IIS
3. ASP.NET calls specifiedmethod on object.
4. Objects returnsresult toASP.NET.
SOAP ServerSOAPClient
Kapitel 8: Workshop .NET – 21Objektverwaltung höherer Ordnung (OHO) – SS 2002
Code-Beispiel Account::Withdraw()public class Account : System.Web.Services.WebService{
. . . [WebMethod]public double Withdraw ( long lAccountNumber, double fAmount ){try{SqlConnection conn = new SqlConnection(…);SqlCommand comm = new SqlCommand(
"UPDATE account SET balance = balance - "+fAmount+ " WHERE account_number = " + lAccountNumber, conn);
comm.Connection.Open();return GetBalance(lAccountNumber);
}finally{
if ( conn != null ) conn.Close();}
}}
benutzt SQL Server .NET Data Provider
.NET Attribute, um automatischSOAP Interface generieren zu lassen
Kapitel 8: Workshop .NET – 22Objektverwaltung höherer Ordnung (OHO) – SS 2002
.NET WebMethodAttribute PropertiesDescription• Kurzbeschreibung zu einer Web-Service Methode.
EnableSession• Generiert einen Session-State für eine Service-Methode.
TransactionOption• Analog Transaktionsproperties von COM+• ABER: Web-Service kann nur Wurzel einer Tx. sein!
BufferResponse, CacheDuration, MessageName, …Beispiel:[WebMethod (Description=“Blafasel”, TransactionOption=Required)]public double Withdraw ( long lAccountNumber, double fAmount ){ … }
Kapitel 8: Workshop .NET – 23Objektverwaltung höherer Ordnung (OHO) – SS 2002
In der Übung
IIS auf SAPR4
Finance Zürich
WebService_Finance
SOAP SOAP
SOAP
SOAPUDDI
Exchange Rate
UID
Bern
Account
ADO.NET
WebService_Bern
Basel
UIDa
Account
ADO.NET
WebService_Basel
Client
Kapitel 8: Workshop .NET – 24Objektverwaltung höherer Ordnung (OHO) – SS 2002
Web-Service DirectoriesProblem: Wie findet man Web-Services (insbesondere von Drittanbietern)?Web-Services Directiories• Zentrale Verzeichnisse wo Anbeiter Informationen über ihre Web-Services veröffentlichen
können• Inhalt: UDDI Spezifikationen• Web-Service Directories können selbst ein Web-Service sein
UDDI (Universal Description, Discovery and Integration) Spezifikationen• standadisiert, wie Informationen über Web-Services publiziert und abgefragt werden können• The XML schemas associated with UDDI define four types of information that would enable a
developer to use a published XML Web service. These are: business information, service information, binding information, and information about specifications for services.
• Developers can use the UDDI Business Registry to locate discovery documents and service descriptions.
Beispiele:• Microsofts UDDI Business Registry (http://uddi.microsoft.com/)• IBM (http://www.ibm.com/servuices/uddi/)
Kapitel 8: Workshop .NET – 25Objektverwaltung höherer Ordnung (OHO) – SS 2002
WSDL Beispiel (Finance Web-Service)<?xml version="1.0" encoding="utf-8" ?><definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" … >
<types> … </types><message name="TransferSoapIn"> … </message><message name="TransferSoapOut"> … </message>
<portType name="FinanceSoap"><operation name="Transfer">
<input message="s0:TransferSoapIn"/><output message="s0:TransferSoapOut"/>
</operation></portType>
<binding name="s0:FinanceSoap"> … </binding>
<service name="Finance"><port name="FinanceSoap" binding="s0:FinanceSoap" ><soap:address location=“http://sapr4/FinanceWebService/Finance.asmx"/>
</port></service>
</definitions>
http://sapr4:4711/roehm/FinanceWebService/Finance.asmx?WSDL