Kapitel 5: Workshop.NET 1 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#
Kapitel 5: Workshop.NET 2 Topic: Warum.NET? Ubiquitous Software Infrastructure
Kapitel 5: Workshop.NET 3.Überblick Web Controls COM+ Services Web Forms ASP.NET API Interop Darüber hinaus ist.net für Microsoft auch einfach Markenname für die aktuelle Produktgeneration Channels.NET Remoting C++ C# CLR MSIL VB.NET Class Library XML Web Services.NET My Services JS ADO.NET.NET DP ODBC.NET OLE DB
Kapitel 5: Workshop.NET 4.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 Web- Services gedacht... Microsoft Produkt
Kapitel 5: Workshop.NET 5 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 Microsoft Intermediate Language (MSIL) vorliegt CLR ~ Java Virtual Machine MSIL ~ Java Byte Code Web Forms ASP.NET Web Controls COM+ Services Interop API ODBC.NET C# CLR C++ JS ADO OLE MSIL.NET DB VB.NET.NET Class Library DP XML Web Services.NET My Services CLR MSIL
Sprachunterstützung von.net C# 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++ CLR MSIL VB.NET JS Objektverwaltung höherer Ordnung (OHO) SS 2003 Kapitel 5: Workshop.NET 6
Kapitel 5: Workshop.NET 7.NET Class Library API 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,...) Nicht komplett plattformunabhängig (although: Ximian s Mono [Opensource.NET Framework], Halcyon Software [.NET Framework in Java]) C# CLR C+ + JS MSIL VB.NET Class Library
Kapitel 5: Workshop.NET 8.NET Erweiterungen ASP.NET API Interop 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.NET Remoting C# CLR C+ + JS MSIL VB.NET XML Web Services ADO.NET
Kapitel 5: Workshop.NET 9 Szenario - Übersicht Finance WebService UDDI Client SOAP Finance Zürich WebService_Bern SOAP SOAP WebService_Basel Account Account Bern Basel UID UIDa
Kapitel 5: Workshop.NET 10 Web-Services Infrastruktur
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. 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. 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
Kapitel 5: Workshop.NET 15 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
Kapitel 5: Workshop.NET 16 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.
Proxy-Erzeugung für ASP.NET Web-Services Objektverwaltung höherer Ordnung (OHO) SS 2003 Kapitel 5: Workshop.NET 17 C# Source Client.cs C# Source Finance.asmx.cs wsdl.exe /language:cs Finance.asmx?WSDL C# Compiler C# Proxy Reference.cs CLR.NET Framework WSDL Finance?WSDL C# Compiler FinanceClient Finance Service
Kapitel 5: Workshop.NET 18 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])); } }
Kapitel 5: Workshop.NET 19 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 ) { }
Kapitel 5: Workshop.NET 20 ASP.NET Web-Service (Server) SOAP Client 1. HTTP requests arrive, with method name and parameters encoded in URL or separate XML. 5. ASP.NET converts results to XML and returns to client via HTTP. 4. Objects returns result to ASP.NET. Windows 2000 server machine with.net and IIS 2. ASP.NET creates object specified in ASMX file. 3. ASP.NET calls specified method on object. Your NET object Method 1... Method N SOAP Server
Kapitel 5: Workshop.NET 21 Code-Beispiel Account::Withdraw() public class Account : System.Web.Services.WebService { }... [WebMethod].NET Attribute, um automatisch SOAP Interface generieren zu lassen 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(); } }
Kapitel 5: Workshop.NET 22.NET WebMethodAttribute Properties Description 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 5: Workshop.NET 23 In der Übung Client SOAP WebService_Finance UDDI Exchange Rate SOAP Finance Zürich WebService_Bern SOAP SOAP WebService_Basel Account Account ADO.NET Bern ADO.NET Basel UID IIS auf SAPR4 UIDa
Kapitel 5: Workshop.NET 24 Datenbankverbindung mit SQL Server SQL Server Instance = SAPR4 DBName: ohoxx UName : ohoxx Paswd : ohoxx DBName: ohoxxa UName : ohoxxa Paswd : ohoxxa Database 1 schema_bern.sql Database 2 schema_basel.sql
Kapitel 5: Workshop.NET 25 Web-Service Directories Problem: 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 5: Workshop.NET 26 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