Warum .NET?

Transcription

Warum .NET?
5.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#
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 1
Topic: Warum .NET?
‰
Ubiquitous Software Infrastructure
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 2
.Überblick
Web
Controls
Web
Forms
COM+
Services
Interop
ASP
.NET
API
C#
Darüber
.NET
hinaus ist
RemChannels oting
.NET für
Microsoft
auch einfach
‚Markenname‘
für die aktuelle
Produktgeneration
C++
CLR
MSIL
VB.NET
ODBC
.NET
JS
ADO
.NET
OLE
DB
Class Library
XML
Web Services
.NET
DP
.NET
My Services
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 3
.NET in Kürze
‰
‰
‰
‰
‰
‰
‰
Software-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 Java
Unter anderem wird auch SOAP unterstützt, aber leider
ist die Implementierung derzeit noch unvollständig
“.NET My Services” waren mal als beispielhafte WebServices gedacht...
Microsoft Produkt
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 4
Common Language Runtime (CLR)
‰
Die CLR ist die Laufzeitumgebung für
sogenannten „managed“ Code
•
•
•
•
•
‰
‰
COM+
Services
I nterop
Web
Forms
Objektorientierung
Garbage Collection
Immer Just-In-Time Kompilierung (JIT)
Class Management (Zugriff, Versionierung)
Security Sandbox
Lauffähig ist alles, was in der Microsoft
Intermediate Language (MSIL) vorliegt
CLR ~ Java Virtual Machine
MSIL ~ Java Byte Code
Objektverwaltung höherer Ordnung (OHO) – SS 2003
ODBC
.NET
API
C#
ASP
.NET
Web
Controls
C+ +
CLR
JS
MSI L
ADO
.NET
OLE
DB
VB.NET
Class Library
.NET
DP
XML Web
Services
.NET My Services
CLR
MSIL
Kapitel 5: Workshop .NET – 5
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…
C++
C#
CLR
JS
MSIL
VB.NET
“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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 6
.NET Class Library
API
C#
‰
Umfangreiche sprachunabhängige
Klassenbibliothek
•
•
•
•
•
‰
Data Access (ADO.NET)
XML, XSLT
Web Services (SOAP, UDDI, WSDL)
Crypto (RSA, DES/3DES, MD5, ...)
I/O (File, TCP, HTTP, ...)
C+ +
CLR
JS
MSIL
VB.NET
Class Library
Nicht komplett plattformunabhängig
(although: Ximian‘s Mono [Opensource .NET
Framework], Halcyon Software [.NET Framework in
Java])
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 7
.NET Erweiterungen
‰
ADO.NET
•
‰
C+ +
.NET
Remoting
CLR
JS
MSIL
VB.NET
ADO
.NET
XML
Web Services
Zugriff auf COM+ Infrastruktur (Tx, Queues, etc.)
Vergleichbar mit Java RMI
ASP.NET
•
‰
API
.NET Remoting
•
‰
Interop
C#
COM+ Interoperabilität
•
‰
Zugriff auf Datenquellen (OLE DB, ODBC)
ASP
.NET
Programmiermodel für Einbindung in IIS
Web-Services
•
SOAP Kommunikation
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 8
Szenario - Übersicht
Finance WebService
Client
SOAP
WebService_Bern
Finance
SOAP
Zürich
SOAP
Account
UDDI
WebService_Basel
Account
Bern
UID
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Basel
UIDa
Kapitel 5: Workshop .NET – 9
Web-Services Infrastruktur
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 10
Web-Service Discovery
‰
‰
Lokalisierung von Dokumenten, die einen Web-Service beschreiben
Bei .NET typischerweise zwei Dokumente:
1. WSDL-Beschreibung
2. .disco Discovery-Datei
• XML Dokument, das auf andere Resourcen verweist (typischerweise 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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 11
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/grabs/WebService_Basel/Account.asmx?WSDL
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 12
Zugriff auf Web-Services
‰
‰
Eine Proxy-Klasse und das .NET Framework erledigen
die Feinarbeit.
Vorgehensweise:
1.
2.
3.
4.
5.
Lokalisieren des gewünschten Web-Service.
Erzeugen einer Proxy-Klasse für diesen Web-Service
im Projekt mittels einer Web-Referenz.
Einbinden der Proxy-Klasse im Client Code über deren
Namespace (using Direktive).
Instanziierung der Proxy-Klasse im Client Code.
Zugriff auf den Web-Service über die Proxy-Klasse.
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 13
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 CORBA
Speziell bei ASP.NET:
•
•
ASP.NET Web-Services sind selbstbeschreibend.
Parameter ‘?DISCO’ liefert Discovery-Dokument,
Parameter ‘?WSDL’ liefert WSDL Beschreibung
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 14
2. Proxy-Klassen
‰
Proxy-Klassen repräsentieren die Funktionalität eines
Web-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 Server
Praxis…
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 15
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:
– Statisch
Zum 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.
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 16
Proxy-Erzeugung für ASP.NET Web-Services
C# Source
C# Source
Client.cs
Finance.asmx.cs
wsdl.exe /language:CS … Finance.asmx?WSDL
C# Proxy
WSDL
Reference.cs
Finance?WSDL
C# Compiler
C# Compiler
CLR
.NET Framework
FinanceClient
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Finance Service
Kapitel 5: Workshop .NET – 17
Auszug aus dem Account-Proxy
public class Account :
System.Web.Services.Protocols.SoapHttpClientProtocol
{
public Account()
statische URL-Bindung
{
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]));
}
…
}
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 18
3. - 5. Einbindung und Verwendung des Proxy
using FinanceWebService.OhOBank;
public class FinanceClient
{
…
public Transfer ( long lFrom, long lTo, System.Double fAmount )
{
try
{
Account account = new Account(); dynamische URL-Bindung
account.Url = MapAccountToService(lFrom);
account.Withdraw(lFrom, fAmount);
…
}
catch ( System.Exception ex )
{ … }
}
…
}
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 19
ASP.NET Web-Service (Server)
1. HTTP requests arrive,
with method name and
parameters encoded in
URL or separate XML.
SOAP
Client
Windows 2000 server machine
with .NET and IIS
SOAP
Server
2. ASP.NET creates object
specified in ASMX file.
5. ASP.NET converts results
to XML and returns to
client via HTTP.
4. Objects returns
result to
ASP.NET.
Objektverwaltung höherer Ordnung (OHO) – SS 2003
3. ASP.NET calls specified
method on object.
Your NET object
Method 1
.
.
.
Method N
Kapitel 5: Workshop .NET – 20
Code-Beispiel Account::Withdraw()
public class Account : System.Web.Services.WebService
{
.NET Attribute, um automatisch
SOAP Interface generieren zu lassen
[WebMethod]
public double Withdraw ( long lAccountNumber, double fAmount )
. . .
{
try
benutzt SQL Server .NET Data Provider
{
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();
}
}
}
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 21
.NET WebMethodAttribute Properties
‰
Description
•
‰
EnableSession
•
‰
‰
Generiert einen Session-State für eine Service-Methode.
TransactionOption
•
•
‰
Kurzbeschreibung zu einer Web-Service Methode.
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 )
{ … }
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 22
In der Übung
Client
UDDI
SOAP
Exchange Rate
WebService_Finance
SOAP
WebService_Bern
Finance
SOAP
SOAP
Account
ADO.NET
Zürich
WebService_Basel
Account
Bern
UID
ADO.NET
Basel
UIDa
IIS auf SAPR4
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 23
Datenbankverbindung mit SQL Server
SQL Server Instance = SAPR4
DBName: ohoXX
UName : ohoXX
Paswd : ohoXX
DBName: ohoXXa
UName : ohoXXa
Paswd : ohoXXa
Database 1
Database 2
schema_BERN.sql
schema_BASEL.sql
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 24
Web-Service Directories
‰
‰
Problem: Wie findet man Web-Services (insbesondere von Drittanbietern)?
Web-Services Directiories
•
•
•
‰
UDDI (Universal Description, Discovery and Integration) Spezifikationen
•
•
•
‰
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
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/)
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 25
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/grabs/FinanceWebService/Finance.asmx?WSDL
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 5: Workshop .NET – 26