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