Skript zum Seminar: Einführung in die Windows Communication Foundation (WCF)

Größe: px
Ab Seite anzeigen:

Download "Skript zum Seminar: Einführung in die Windows Communication Foundation (WCF)"

Transkript

1 Aachen, Mark Foti - Tel Skript zum Seminar: Einführung in die Windows Communication Foundation (WCF) Autor: Betreuer: Mark Foti Dipl.-Ing. Mirco Vitr Datum: Seminar Windows Communication Foundation 1/37

2 Inhalt 1 Einleitung Motivation hinter SOAP Das A-B-C Prinzip Bindings und Protokolle im Detail BasicHttpBinding WSHttpBinding WSDualHttpBinding NetTcpBinding und NetNamedPipeBinding Aufbau eines WCF Programms Voraussetzungen Der Contract Die Implementierung Die Konfiguration WSDL und Metadaten Aufbau eines WCF Clients Erstellung der Service Reference Aufruf der serverseitigen Methoden Konfiguration des WCF-Clients Bidirektionale Verbindungen Die Callback-Schnittstelle Das OperationContext Der ConcurrencyMode Aufbau des Clients bei der bidirektionalen Kommunikation Fehlerbehandlung Seminar Windows Communication Foundation 2/37

3 13 Fazit A. Anhang Quelltext des Servers Quelltext des SimpleClients (ohne Callbacks) Quelltext des ComplexClients (mit Callbacks) Seminar Windows Communication Foundation 3/37

4 Seminar Windows Communication Foundation 4/37

5 1 Einleitung Die Windows Communication Foundation (WCF) ist eine API (application programming interface) in dem.net Framework zur Entwicklung von vernetzten Service-orientierten Applikationen (SOA). Ziel dieses Skriptes ist es, eine erste Einführung in die Welt der verteilten Systeme unter Benutzung des.net Frameworks zu geben. 1.1 Motivation hinter SOAP Die Grundidee hinter SOAP 1 ist, Operationen nicht nur auf dem lokalen Rechner auszuführen, sondern zu verteilen. Als einfachstes Beispiel kann ein Taschenrechner dienen, bei der die auszuführenden Operationen (z.b. 5+3) auf einem Rechner (Client) eingegeben und die tatsächliche Berechnung auf einem anderen Rechner (Server) ausgeführt werden und die Ergebnisse zurück an den Client gesendet werden. Abbildung 1 zeigt den grundsätzlichen Aufbau eines WCF Servers und Clients. Dieses Vorgehen kann große Vorteile mit sich bringen: sicherheitskritische Operationen werden nur auf einem Server ausgeführt und der Algorithmus kann nicht analysiert werden da das Binärprogramm nicht zur Verfügung steht bei rechenintensiven Programmen muss nicht jeder Client die erforderliche Hardware besitzen; stattdessen kann die Berechnung auf einem Großrechner erfolgen und der Client muss die Daten lediglich verwalten (Master/Worker- Prinzip) Abbildung 1: Schematische Abbildung eines WCF Servers und Clients 2 1 Service Oriented Architecture Protocol, 2 Quelle: Seminar Windows Communication Foundation 5/37

6 WCF, ursprünglich unter dem Codenamen Indigo bekannt, wurde mit Version 3.0 des.net Frameworks im Dezember 2006 eingeführt und sollte als Ablösung für die bis dahin aktuelle.net Remoting Technologie dienen. Die Motivation dahinter war eine bessere Interoperabilität sowie Performance. Während.NET Remoting nur auf Windows Rechnern lief, auf denen das.net Framework installiert war, erlaubt WCF den Austausch von standardisierten SOAP Nachrichten (z.b. zwischen WebServices) und ist dadurch nicht mehr an eine Programmierumgebung gebunden (somit kann ein unter C# geschriebener Server mit einem unter Java entwickelten Client problemlos kommunizieren). Abbildung 2 stellt dabei die Kompatibilität zwischen den verschiedenen Implementierungen von SOAP dar. Abbildung 2: Darstellung der Flexibilität und Kompatibilität 3 Zudem wurde die Leistung gegenüber.net Remoting wesentlich verbessert, indem verschiedene Encoder, also Mechanismen, wie Nachrichten auf Byte-Ebene kodiert werden, benutzt werden können. Soll das Programm möglichst viele Daten zwischen zwei WCF Applikationen austauschen, kann ein Binaryformatter benutzt werden, der ohne viele Metadaten auskommt und die Daten binär formatiert. Wenn dagegen höchste Interoperabilität gefragt ist, kann auf einen XML-Serializer zurückgegriffen werden der dementsprechend mehr Metadaten zu den Nachrichten hinzufügt. 3 Quelle: Seminar Windows Communication Foundation 6/37

7 1.2 Das A-B-C Prinzip WCF verwendet bei der Kommunikation das sogenannte ABC Prinzip: A = Address B = Binding C = Contract Die Adresse ist dabei eine URL ähnlich wie die Links im Internet. Diese sagt aus, welches Protokoll verwendet wird, wie der Endpunkt heißt (Hostname oder IP-Adresse) und zu welchem Endpunkt auf dem Server verbunden werden soll (auf dem gleichen Rechner können mehrere WCF-Server laufen). Mit dem Binding wird das verwendete Protokoll konfiguriert. Hier kann eingestellt werden, welche Sicherheitsmechanismen verwendet werden sollen oder wie die Übertragung funktionieren soll (z.b. ob Daten "gestreamed" oder "gepuffert" übertragen werden sollen). Da sowohl die URL als auch das Binding das verwendete Protokoll beschreiben, muss eine URL zum verwendeten Binding passen; andernfalls kommt es zu einer Exception beim Verbindungsaufbau. Beispiel: Die Adresse "net.tcp://localhost/icomplexcalculator" beschreibt ein NetTcpBinding. Somit würde ein Fehler auftreten, wenn der Server versuchen würde, als Binding das BasicHttpBinding zu verwenden. Letztlich beschreibt der Contract die Schnittstelle, die vom Server zur Verfügung gestellt wird. In anderen Worten: der Server kann dem Client mitteilen, was für Methoden auf ihm ausgeführt werden können (mit allen notwendigen Metadaten wie z.b. Übergabeparameter und Rückgabetypen) und stellt intern eine oder mehrere Klassen zur Verfügung, die die Schnittstellen implementieren. Seminar Windows Communication Foundation 7/37

8 2 Bindings und Protokolle im Detail Das Übertragungsformat auf Byte-Ebene hängt vom verwendeten Binding ab. Einige mögliche Bindings sind in Abbildung 3 dargestellt.: Abbildung 3: Darstellung einiger Bindings 2.1 BasicHttpBinding Das BasicHttpBinding ermöglicht die höchste Kompatibilität. Eine Anfrage wird als HTTP-Request geschickt (wie der Web-Browser) und die Daten werden im XML-Format verschickt. Mit diesem Binding ist auch die Kompatibilität mit anderen SOAP Implementierungen gewährleistet ein Java SOAP Client kann also mit einem WCF SOAP Server kommunizieren und umgekehrt. Von allen HTTP-Bindings hat das BasicHttpBinding den geringsten Overhead, ermöglicht dabei aber weder Verschlüsselung noch eine bidirektionale Kommunikation. Somit muss jede Anfrage immer vom Client stammen. 2.2 WSHttpBinding Sicherheit bietet das WSHttpBinding-Binding. Es basiert auf dem BasicHttpBinding mit dem Unterschied, dass die Daten verschlüsselt werden können. Unterstützt werden dabei mehrere Sicherheitsmechanismen: Transport Security Mode Message Security Mode Beim Transport Security Mode wird die Nachricht in der Übertragungsebene, z.b. HTTPS, verschlüsselt. Damit ist zwar die Übertragung verschlüsselt, die Daten sind vor Seminar Windows Communication Foundation 8/37

9 dem Versenden bzw. nach der Ankunft allerdings ungesichert. Der Vorteil von diesem Mechanismus liegt in der geringen Komplexität und damit in der Geschwindigkeit. Mehr Schutz bietet der Message Security Mode. Hierbei werden die SOAP Nachrichten einzeln verschlüsselt, was eine höhere Sicherheit gewährleistet, da nur die entsprechende Applikationen die Nutzdaten sieht. Dies wird allerdings mit einem höheren Aufwand bezahlt, da jede Nachricht einzeln angepasst werden muss. Die Verschlüsselung basiert dabei auf der WS-Security Spezifikation und ist dementsprechend auch normiert 4. Damit wird ebenfalls eine Kompatibilität zu anderen Implementierungen ermöglicht. 2.3 WSDualHttpBinding Bei den beiden zuvor genannten Bindings können Daten nicht bidirektional gesendet werden: der Client schickt eine Anforderung an den Server und dieser antwortet. Auf asynchrone Ereignisse kann der Client nicht reagieren. Das WSDualHttpBinding bietet Unterstützung für sogenannte Callbacks, also Methodenaufrufe, die vom Server aus initiiert werden. Dabei wird im Contract festgelegt, welche Methoden der Client implementieren muss und dieser startet automatisch ebenfalls einen WCF Server. Verbindet sich der Client zum eigentlich Server, so wird eine zweite Verbindung vom Server zum WCF-Server des Clients aufgebaut. Somit ist eine Vollduplexverbindung (gleichzeitiges Senden und Empfangen) möglich. Da das WSDualHttpBinding auf dem WSHttpBinding aufbaut, werden die dort implementieren Sicherheitsmechanismen ebenfalls unterstützt. Dieses Plus an Flexibilität wird ebenfalls mit einem höheren Overhead bezahlt und das WSDualHttpBinding gehört somit zu den langsamsten Bindings, welche auf das HTTP Protokoll aufbauen. 2.4 NetTcpBinding und NetNamedPipeBinding Spielt die Übertragungsgeschwindigkeit bzw. der Aufwand eine größere Rolle als die Kompatibilität, kann das NetTcpBinding oder das NetNamedPipeBinding Binding verwendet werden. Bei diesen Bindings werden die Daten binär übertragen (d.h. nicht mehr im XML-Format und nicht im Klartext) und somit geht die Kompatibilität zu 4 Quelle: Seminar Windows Communication Foundation 9/37

10 anderen SOAP Implementierungen verloren. Die Übertragung verläuft entweder über das TCP/IP Protokoll bzw. über Named Pipes von Windows. Bei beiden Bindings sind die zuvor genannten Sicherheitsmechanismen als auch die bidirektionale Kommunikation vorhanden. Die folgende Tabelle 5 zeigt einen groben Geschwindigkeitsvergleich zwischen den einzelnen Bindings (jeweils mit ausgeschalteten Sicherheitsmechanismen) Bindung Aufrufe in 10 Sekunden BasicHttpBinding WSHttpBinding WSDualHttpBinding NetTcpBinding NetNamedPipeBinding Wie der Tabelle entnommen werden kann, sollte bei reinen WCF Applikationen entweder das NetTcpBinding oder das NetNamedPipeBinding aus Performancegründen gewählt werden. Damit sind durchaus Übertragungsraten möglich, die ähnlich hoch sind wie reine TCP/IP Übermittlungen ohne Nachrichten (also Übermittlungen bei denen ausschließlich reine Nutzdaten übertragen werden). 5 Seminar Windows Communication Foundation 10/37

11 3 Aufbau eines WCF Programms Eine WCF-Applikation besteht aus drei Teilen. 1) Eine Schnittstelle (Contract) die beschreibt, was der Server "kann" 2) Die eigentliche Implementierung der Schnittstelle 3) Die Konfiguration, in der sowohl die Adresse als auch das Binding ausgewählt und konfiguriert werden Nachfolgend werden diese drei Aspekte anhand eines einfachen Beispiels erklärt. Dabei wird ein Server erstellt, der einfache Rechenoperationen ausführen und die Ergebnisse anschließend dem Client mitteilen kann. Um Missverständnissen vorzubeugen, wird folgendes vereinbart: Variablen einer Klasse, die als üblicherweise Attribute bezeichnet werden, werden (private / public) Membervariablen genannt. Attribute hingegen bezeichnen die Codeabschnitte in eckigen Klammern (z.b. [Serializable]). Seminar Windows Communication Foundation 11/37

12 4 Voraussetzungen Soll das Beispiel nachimplementiert werden, so muss auf dem Zielrechner das.net Framework ab Version 3.0 installiert sein (aktuell:.net Framework 3.5 SP1). Zusätzlich muss dem Projekt eine Referenz auf die DLL "System.ServiceModel.dll" hinzugefügt sein. 4.1 Der Contract Die Operationen, die von einem Client später ausgeführt werden können, müssen zunächst deklariert werden. Dies geschieht in Form von einer normalen Schnittstelle (Interface), bei der die Deklarationen für die WCF Kommunikation mit bestimmten Attributen versehen werden. Im Fall des Beispieltaschenrechners würde das Interface so aussehen: [ServiceContract] public interface ISimpleCalculator [OperationContract] double Add(double Value1, double Value2); [OperationContract] double Subtract(double Value1, double Value2); [OperationContract] double Multiply(params double[] Values); [OperationContract] double Divide(double Value1, double Value2); Die Schnittstelle wurde mit dem Attribut [ServiceContract] versehen. Damit wird dem.net Framework mitgeteilt, dass diese Schnittstelle später von außen angesprochen werden kann. Jede Methode, die dabei aufgerufen werden können soll, muss mit dem Attribut [OperationContract] versehen werden. Der restliche Aufbau entspricht dem einer regulären Schnittstelle. In diesem Beispiel werden nur herkömmliche Datentypen übergeben; es besteht darüber hinaus auch die Möglichkeit, Datenklassen zu übergeben. Dazu genügt es, die Seminar Windows Communication Foundation 12/37

13 Klasse als public zu kennzeichnen; sämtliche public Membervariablen dieser Klasse werden dem Client somit mitgeteilt. Methoden bleiben unbekannt, da sie nicht serialisiert werden können. Dabei spielt es keine Rolle ob die Methoden public oder private sind. 4.2 Die Implementierung Im allgemeinen Fall muss bei der Implementierung nicht unterschieden werden, ob die Methode von außen oder von innen (also von der eigenen Assembly) aufgerufen wird. Für das obige Beispiel könnte die Implementierung so aussehen: class MyCalculator : ISimpleCalculator #region ISimpleCalculator Members public double Add(double Value1, double Value2) throw new NotImplementedException(); public double Subtract(double Value1, double Value2) throw new NotImplementedException(); public double Multiply(params double[] Values) throw new NotImplementedException(); public double Divide(double Value1, double Value2) throw new NotImplementedException(); #endregion In diesem Fall wird für jeden Methodenaufruf eine neue Instanz vom Typ MyCalculator erstellt. Selbst dann, wenn der Client eine Methode bereits aufgerufen hat. Siehe dazu auch Kap. Der ConcurrencyMode. Seminar Windows Communication Foundation 13/37

14 4.3 Die Konfiguration Nachdem die Schnittstelle deklariert und definiert wurde, wird der eigentliche Server erzeugt. Dazu sind folgende Schritte notwendig: Dem.NET Framework muss bekannt gegeben werden, welche Klasse die nach außen sichtbare Schnittstelle implementiert Ein Binding muss ausgesucht und konfiguriert werden. Schließlich muss dem Framework mitgeteilt werden, welche Schnittstellen der Server anbietet. Für den Beispieltaschenrechner könnte der erste Punkt so implementiert werden: var host = new ServiceHost(typeof(SimpleCalculator), new Uri(" Der erste Parameter im ServiceHost-Konstruktor sagt aus, in welcher Klasse die Implementierung für die Schnittstelle liegt. Die Uri (der zweite Parameter) sagt aus, unter welcher Adresse der Server ggf. Metadaten zur Verfügung stellen kann. Da der Taschenrechner möglichst einfach aufgebaut werden soll, wird als Binding das BasicHttpBinding verwendet, das so erzeugt werden kann: var binding = new BasicHttpBinding(); Letztlich wird mit dem folgenden Aufruf ein "ServiceEndPoint" der Host-Instanz hinzugefügt. Hierbei handelt es sich um die eigentliche Schnittstelle, die zur Verfügung gestellt wird. Diese wird mit dem eben erzeugten Binding verknüpft. Da ein Server mehrere Schnittstellen anbieten kann, muss jeder ServiceEndPoint mit einer Uri gekennzeichnet werden. Anschließend kann der Server gestartet werden (.Open()). Ab diesem Zeitpunkt wartet der Server auf einkommende Anfragen: host.addserviceendpoint(typeof(isimplecalculator), binding, " host.open(); Wichtig ist, dass die Klasse, die beim Erstellen der ServiceHost-Instanz bekanntgegeben wurde, die Schnittstelle auch tatsächlich implementiert. Andernfalls würde es bei diesem Schritt zu einer Exception kommen. Ein Host kann auch mehrere Schnittstellen mit verschiedenen Bindings anbieten wichtig ist hierbei, dass die Klasse diese auch implementiert. Seminar Windows Communication Foundation 14/37

15 5 WSDL und Metadaten Nachdem der Server gestartet wurde, kann mit einem Client auf den Server zugegriffen und die Schnittstelle benutzt werden. Dafür muss der Client jedoch wissen, welche Methoden und Datentypen die Schnittstelle überhaupt definiert. Zwar ist es grundsätzlich möglich, die Schnittstelle und alle verwendete Datentypen ein zweites Mal auf der Clientseite manuell zu definieren, doch ist dieser Vorgang fehleranfällig und zeitintensiv. Dieser Ablauf kann auch automatisiert werden: Der Server kann sogenannte Metadaten im WSDL 6 Format auf Anfrage verschicken, die die Beschreibung über die Schnittstelle und alle verwendeten Datentypen sowie Datenstrukturen beinhaltet. Damit der Server diese Daten auch verschicken kann, muss dem ServiceHost ein ServiceMetadataBehavior hinzugefügt werden: var metadatabehavior = new ServiceMetadataBehavior(); metadatabehavior.httpgetenabled = true; host.description.behaviors.add(metadatabehavior); Wird der Server anschließend gestartet, können die Metadaten mit dem Web-Browser unter der Uri angesehen werden. Visual Studio 2008 kann diese Daten auch herunterladen und somit bei der Entwicklung des Clients unterstützen (vgl. folgendes Kapitel). 6 Web Services Description Langauge, Seminar Windows Communication Foundation 15/37

16 6 Aufbau eines WCF Clients 6.1 Erstellung der Service Reference Dieses Kapitel widmet sich dem Erstellen eines WCF Clients anhand des Beispieltaschenrechners. Um an die Schnittstellendefinition des Servers zu gelangen, werden die vom Server bereitgestellten Metadaten verwendet. Dazu wird die eingebaute Funktionalität von Visual Studio 2008 verwendet: Nachdem ein neues Projekt für den Client erstellt wurde, wird durch ein Rechts-Klick auf "Service References" der Menüpunkt "Add Service Reference" ausgewählt (vgl. Abbildung 4). Abbildung 4: Kontextmenü des Service References unter Visual Studio 2008 Zu diesem Zeitpunkt ist es wichtig, dass der Server läuft, damit Visual Studio sich mit dem Server verbinden kann! Als nächstes wird in die Adressleiste die Uri eingetragen und auf "Go" geklickt. Unter "Services" sollte der ServiceHost SimpleCalculator und die Schnittstelle ISimpleCalculator gefunden werden. In diesem Beispiel wurde der Namespace auf "Calculator" geändert (vgl. Abbildung 5) Seminar Windows Communication Foundation 16/37

17 Abbildung 5: Add Service Reference - Dialog Mit "OK" wird der Dialog beendet und anschließend werden die Metadaten heruntergeladen. 6.2 Aufruf der serverseitigen Methoden Die Verwendung des Servers ist im Code dann relativ einfach: Console.WriteLine("--- Simple Client ---"); var client = new Calculator.SimpleCalculatorClient(); client.open(); Console.WriteLine("5 + 5 = 0", client.add(5, 5)); Console.WriteLine(" = 0", client.add(5, 10)); Beim ersten tatsächlichen Methodenaufruf wird die Verbindung zum Server aufgebaut und der Server erstellt eine neue Instanz vom Typ SimpleCalculator. Visual Studio erstellt zudem eine Applikationskonfigurationsdatei (app.config) in der die Adresse und die Konfiguration des Bindings eingetragen werden (die zuvor heruntergeladen wurden). Als Adresse wird dabei diejenige verwendet, die im Dialog "Add Service Reference" eingetragen wurde (in diesem Fall localhost). Seminar Windows Communication Foundation 17/37

18 6.3 Konfiguration des WCF-Clients Werden Client und Server nicht auf dem gleichen Rechner ausgeführt, würde es mit der erstellten Standardkonfiguration zu einem Fehler kommen. Auf der Clientseite ist es möglich, das Binding sowie die Adresse zu ändern. Angenommen, der Server läuft auf dem Rechner mit der IP-Adresse , würde der Aufruf so aussehen: var binding = new BasicHttpBinding(); var address = new EndpointAddress(" var client = new Calculator.SimpleCalculatorClient(binding, address); Das Binding wird an dieser Stelle nicht weiter geändert es werden die Standardeinstellungen verwendet. Einige weitere Konfigurationsmöglichkeiten betreffen verschiedene Timeouts z.b. wie lange das Senden höchstens dauern darf. Zudem können weitere Einschränkungen definiert werden, z.b. die maximale Größe eines Pakets. Für sichere und zuverlässige Verbindungen bietet das NetTcpBinding eine Option für ReliableSessions. Hier wird intern die Tcp-Verbindung durch Keepalive-Pakete aufrecht gehalten und somit kann sowohl der Server als auch der Client auf ein Netzwerkproblem entsprechend reagieren (z.b. dass die physikalische Netzwerkverbindung unterbrochen wurde), ohne dass diese Funktionalität explizit implementiert werden muss. Seminar Windows Communication Foundation 18/37

19 7 Bidirektionale Verbindungen Bis jetzt wurden einfache Verbindungen behandelt, wobei jede Anfrage vom Client ausgeht und dieser solange wartet, bis der Server eine Antwort schickt. Bis auf das BasicHttpBinding unterstützen die Bindings auch sogenannte Callbacks; das heißt, der Server kann selbstständig eine Verbindung zum Client aufbauen. Dabei gibt es einige Fragestellungen, die geklärt sein müssen: Welche Methoden kann der Server beim Client aufrufen? Welcher Client soll angesprochen werden? Mehrere Clients können schließlich mit dem gleichen Server verbunden sein. Was passiert im folgenden Fall (Abbildung 6)? Abbildung 6: Gleichzeitige synchrone und asynchrone Anfragen Oder in Worten ausgedrückt: der Client sendet eine synchrone Anfrage an den Server und bevor dieser Antworten kann, kommt eine zweite, asynchrone Anfrage vom Server. Seminar Windows Communication Foundation 19/37

20 8 Die Callback-Schnittstelle Bei der Deklaration der Serverschnittstelle besteht die Möglichkeit, eine Callback- Schnittstelle bekanntzugeben. Mit diesem Konstrukt wird dem Framework mitgeteilt, dass jeder Client, der die Serverschnittstelle benutzen will, ebenfalls eine weitere Schnittstelle implementieren muss die Callback-Schnittstelle. Als Beispiel wird der einfache Taschenrechner so erweitert, dass Operationen zunächst nur in eine Warteschlange hinzugefügt werden, danach der Reihe nach asynchron ausgewertet werden und schließlich dem entsprechenden Client das Ergebnis zurückgeschickt wird. Als erstes wird die Callback-Schnittstelle deklariert: public interface ICalculatorCallback [OperationContract(IsOneWay = true)] void OperationCompleted(OperationResult Result); Das Attribut OperationContract kennzeichnet die Methode, dass sie über WCF aufgerufen werden kann. Der Parameter IsOneWay sagt aus, dass die Methode keinen Wert zurückliefert und somit der Server nicht auf eine Antwort warten muss. Die Methode kann also "blind" aufgerufen werden. OperationResult ist eine selbsterstellte Klasse, welche der Aufnahme der Ergebnisse dient und folgenderweise deklariert ist: mit public class OperationResult public Operator Operator get; set; public double Result get; set; public bool Succeeded get; set; public Exception Error get; set; public enum Operator Add, Subtract, Multiply, Divide, Seminar Windows Communication Foundation 20/37

21 Die eigentliche Serverseitige Schnittstelle sieht so aus: [ServiceContract(CallbackContract=typeof(ICalculatorCallback))] public interface IComplexCalculator [OperationContract] void StartOperation(Operation Operation); mit public class Operation internal OperationContext OperationContext get; set; public Operator Operator get; set; public List<double> Operands get; set; Wie bereits beim einfachen Taschenrechner, kennzeichnet das ServiceContract Attribut, dass es sich um eine Schnittstelle handelt, die von außen aufgerufen werden kann. Allerdings wird jetzt ein Parameter CallbackContract verwendet, welcher dem Framework mitteilt, dass jeder Client, der die IComplexCalculator Schnittstelle verwenden will, die ICalculatorCallback Schnittstelle implementieren muss. Die Operation Klasse dient wieder lediglich als Datencontainer und besitzt die zwei öffentlichen Membervariablen Operator und eine Liste von Operanden. Die Property OperationContext wird in dem nächsten Kapitel behandelt und ist nur innerhalb der Assembly sichtbar (da sie als internal gekennzeichnet ist) sie wird in Form von Metadaten (WSDL Daten) nicht übertragen. Seminar Windows Communication Foundation 21/37

22 9 Das OperationContext WCF verschickt bei jedem Methodenaufruf implizit eine Session ID damit kann der Client ermittelt werden, der diesen Aufruf getätigt hat. In einer Methode, die von einem Client aufgerufen wurde, kann diese ID über die statische Property OperationContext.Current abgefragt werden. Darüber hinaus kann mit dem aktuellen Operation-Context auch der zugehörige Callback-kanal ermittelt werden: OperationContext.Current.GetCallbackChannel<ICalculatorCallback>() Der Rückgabetyp dieser Methode ist vom Typ ICalculatorCallback und referenziert die Methode, die vom aufgerufenen Client implementiert wurde. Die StartOperation Methode, die in der IComplexCalculator Schnittstelle deklariert wurde, könnte so aussehen: public void StartOperation(Operation Operation) Operation.OperationContext = OperationContext.Current; lock (this.operations) this.operations.add(operation); Die Klasse Operation hat ein interne Membervariable OperationContext dieser wird auf den aktuellen OperationContext gesetzt und somit zwischengespeichert. Bei der späteren Auswertung besteht damit die Verknüpfung zwischen einer Operation und dem zugehörigen Callback-Kanal, womit das Ergebnis später zurückgeschickt werden kann: var result = ProcessOperation(operation); var callback = operation.operationcontext.getcallbackchannel<icalculatorcallback>(); callback.operationcompleted(result); Seminar Windows Communication Foundation 22/37

23 10 Der ConcurrencyMode Im Normalfall erlaubt WCF nur einen gleichzeitigen Aufruf. Zwei gleichzeitige Aufrufe von zwei verschiedenen Clients werden hintereinander verarbeitet (vgl. Abbildung 7) Abbildung 7: Mehrere Anfragen werden hintereinander abgearbeitet Client B muss warten, bis der Server die Anfrage von Client A verarbeitet hat. Dieses Vorgehen wird dann problematisch, wenn wie in der Fragestellung weiter oben, der Client eine Anfrage schickt, der Server die Anfrage verarbeitet aber bevor er fertig ist eine zusätzliche asynchrone Anfrage vom Server an den Client geschickt werden soll so ein Fall führt zu einem Deadlock des Clients. Und da der Server auf eine Reaktion des Clients wartet, kommt es beim Server ebenfalls zu einem Deadlock! Warum? Der Client schickt eine Anfrage, der Server akzeptiert sie. Damit ist eine Verbindung vom Client zum Server geöffnet. Der Server schickt eine asynchrone Anfrage an den Client, baut damit eine Verbindung vom Server zum Client auf. Der Client meldet allerdings, sie würde noch auf die ursprüngliche Antwort warten; somit wird die Anfrage des Servers in eine Warteschlange gesetzt. Seminar Windows Communication Foundation 23/37

24 Die ursprüngliche Anfrage, die der Server nun abgearbeitet hat, soll beantwortet werden doch nun meldet der Client, dass keine Daten empfangen werden können da in der Warteschlange bereits eine Anfrage steht. 7 Abhilfe kann dadurch geschafft werden, dass sowohl Server als auch Client so konfiguriert werden, dass sie gleichzeitig mehrere WCF Verbindungen erlauben. Der Nachteil: es müssen eigene Vorkehrungen getroffen werden, damit Zugriffe auf gemeinsame Variablen synchronisiert werden (der Aufruf erfolgt aus mehreren Threads) Die Konfiguration erfolgt erneut über Attribute. Diese sind beim Server und beim Client unterschiedlich. Beim Server: [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)] class ComplexCalculator : IComplexCalculator, IDisposable... Der Parameter ConcurrencyMode.Multiple sorgt dafür, dass die Methoden beim Server gleichzeitig von mehreren Clients aufgerufen werden können. Zusätzlich kann beim Server über den zweiten Parameter InstanceContextMode gesteuert werden, wie die Instanzen erzeugt werden sollten. Am Anfang wurde erwähnt, dass jeder Methodenaufruf eine neue Instanz anlegt. Soll der OperationContext zwischengespeichert werden, müsste eine statische Liste benutzt werden, da die Information nicht erhalten bleibt, wenn sie lediglich in einer privaten Membervariable zwischengespeichert wird. Mit InstanceContextMode.Single wird dafür gesorgt, dass es insgesamt nur eine Instanz von dieser Klasse gibt. Entweder wird diese von WCF einmal automatisch erzeugt, oder aber sie wird vom Entwickler erzeugt und dem Framework mitgeteilt, dass sie diese Singleton-Instanz verwenden soll. Dies geschieht im Konstruktor vom ServiceHost: instance = new ComplexCalculator(); host = new ServiceHost(instance, new Uri(" Wurde bislang nur der Typ der Klasse im Konstruktor des ServiceHosts bekanntgegeben, kann stattdessen auch eine Instanzvariable übergeben werden. Diese muss natürlich die entsprechende Schnittstelle implementieren. 7 Weitere Informationen: Seminar Windows Communication Foundation 24/37

25 11 Aufbau des Clients bei der bidirektionalen Kommunikation Der Callback-Client wurde bis jetzt noch nicht behandelt und soll nun anhand des erweiterten Taschenrechners beschrieben werden. Der Grundaufbau ändert sich dabei nicht, allerdings gibt es jetzt ein Interface, welches vom Client implementiert werden muss (die IComplexCalculatorCallback Schnittstelle). [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)] class ResultReceiver : IComplexCalculatorCallback #region IComplexCalculatorCallback Members public void OperationCompleted(OperationResult Result) if (Result.Succeeded) Console.WriteLine("Operation 0 succeeded! Result = 1", Result.Operator, Result.Result); else Console.WriteLine("Operation 0 failed! Reason: 1", Result.Operator, Result.Error); #endregion Bei der Realisierung wird über ConcurrencyMode wie beim Server gesteuert (siehe dazu Kap. Der ConcurrencyMode), dass WCF Anfragen vom Server gleichzeitig erfolgen dürfen. Der Parameter UseSynchonizationContext = false sagt aus, dass die Synchronisation manuell erfolgt. Der restliche Aufbau unterscheidet sich nur im Konstruktor des ComplexCalculatorClients: var client = new ComplexCalculatorClient(new InstanceContext(receiver)); Der Konstruktor erwartet als ersten Parameter die Implementierung der IComplexCalculatorCallback Schnittstelle in diesem Fall die Hilfsklasse ResultReceiver. Seminar Windows Communication Foundation 25/37

26 12 Fehlerbehandlung Grundsätzlich können über WCF auch Exceptions geworfen werden. Normale Exceptions, also z.b. die Basisklasse Exception, aber auch abgeleite Exceptions wie FileNotFoundException, müssen zunächst explizit gefangen werden schließlich kann WCF nicht wissen, ob der Client sämtliche Stack-Traces und Fehlernachrichten erhalten soll. Über WCF können Exceptions vom Typ FaultException weitergeleitet werden. Soll keine besonderte Fehlerbehandlung auf Serverseite erfolgen und die Fehlerinformationen an den Client weitergeschickt werden, könnte die Realisierung so aussehen: public void StartOperation(Operation Operation) try Operation.OperationContext = OperationContext.Current; lock (this.operations) this.operations.add(operation); catch (Exception exp) throw new FaultException(exp.Message); Aus der ursprünglichen Exception wird eine neue Exception vom Typ FaultException erzeugt und über WCF an den Client geleitet. Da FaultException ebenfalls von der Basisklasse Exception abgeleitet ist, kann der Client ebenfalls auf gewöhnliche Ausnahmen reagieren. Wird auf Serverseite die Exception nicht gefangen, wird dem Client lediglich mitgeteilt, dass ein Fehler aufgetreten ist und die Verbindung wird als fehlerhaft gekennzeichnet. Seminar Windows Communication Foundation 26/37

27 13 Fazit Die vorgestellten Codebeispiele decken dabei lediglich die Grundlagen von WCF ab, sollten jedoch dem Leser die Gedankengänge hinter WCF näher bringen. Mit den vermittelten Informationen sollte die Erstellung von WCF Applikationen möglich sein, die erweitert werden können. Genau dadurch wird WCF auch attraktiv, da sie weder an eine Programmiersprache / -Umgebung noch an ein Betriebssystem gebunden ist und einfache Programme trotzdem schnell und einfach erstellt werden können. WCF ist stark abstraktionsfähig soll die gewünschte Applikation möglichst einfach sein, reichen die hier erwähnten Klassen. Auf der anderen Seite können auch eigene Bindings erstellt 8 sowie andere Übertragungsprotokolle gewählt werden die an die eigenen Anwendungsfälle angepasst sind. Theoretisch könnte ein eigenes Protokoll eingebunden werden, welches die Daten über USB oder die serielle Schnittstelle weiterleitet, ohne die Schnittstelle oder Implementierung des Servers verändern zu müssen. Ein andere Möglichkeit wäre, mehrere Übertragungsmethoden zu implementieren, um eine hohe Verfügbarkeit des Servers zu gewährleisten (z.b. sowohl über WLAN als auch über das Kabelgebundene Ethernet). Durch die automatisierte Erstellung des Proxies (für den Client) mit Hilfe von Visual Studio muss bei der Programmierung des Clients relativ wenig redundanter (und damit fehleranfälliger) Code selber geschrieben werden. 8 Erstellung eigener Bindings: Seminar Windows Communication Foundation 27/37

28 A. Anhang Quelltext des Servers namespace CalculatorServer.Contracts [ServiceContract] public interface ISimpleCalculator [OperationContract] double Add(double Value1, double Value2); [OperationContract] double Subtract(double Value1, double Value2); [OperationContract] double Multiply(params double[] Values); [OperationContract] double Divide(double Value1, double Value2); namespace CalculatorServer.Contracts public class Operation internal OperationContext OperationContext get; set; public Operator Operator get; set; public List<double> Operands get; set; public enum Operator Add, Subtract, Multiply, Divide, [ServiceContract(CallbackContract=typeof(ICalculatorCallback))] public interface IComplexCalculator [OperationContract] void StartOperation(Operation Operation); Seminar Windows Communication Foundation 28/37

29 namespace CalculatorServer.Contracts public class OperationResult public Operator Operator get; set; public double Result get; set; public bool Succeeded get; set; public Exception Error get; set; public interface ICalculatorCallback [OperationContract(IsOneWay = true)] void OperationCompleted(OperationResult Result); namespace CalculatorServer.Implementation class SimpleCalculator : ISimpleCalculator static int count = 0; public SimpleCalculator() var thiscount = ++count; Console.WriteLine("SimpleCalculator Constructor called 0 time(s)!", thiscount); #region ISimpleCalculator Members public double Add(double Value1, double Value2) try Console.WriteLine("Calculating 0 + 1", Value1, Value2); return Value1 + Value2; catch (Exception exp) throw new FaultException(exp.Message); public double Subtract(double Value1, double Value2) try Console.WriteLine("Calculating 0-1", Value1, Value2); return Value1 - Value2; catch (Exception exp) throw new FaultException(exp.Message); Seminar Windows Communication Foundation 29/37

30 public double Multiply(params double[] Values) try double ret = 1.0; foreach (double value in Values) ret *= value; return ret; catch (Exception exp) throw new FaultException(exp.Message); public double Divide(double Value1, double Value2) try Console.WriteLine("Calculating 0 / 1", Value1, Value2); return Value1 / Value2; catch (Exception exp) throw new FaultException(exp.Message); #endregion private static ServiceHost host; public static void StartSimpleCalculator() var host = new ServiceHost(typeof(SimpleCalculator), new Uri(" var binding = new BasicHttpBinding(); host.addserviceendpoint(typeof(isimplecalculator), binding, " var metadatabehavior = new ServiceMetadataBehavior(); metadatabehavior.httpgetenabled = true; host.description.behaviors.add(metadatabehavior); host.open(); public static void Stop() if (host!= null) host.close(); host = null; Seminar Windows Communication Foundation 30/37

31 namespace CalculatorServer.Implementation [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)] class ComplexCalculator : IComplexCalculator, IDisposable private List<Operation> operations = new List<Operation>(); private Dictionary<OperationContext, Operation> contexts = new Dictionary<OperationContext, Operation>(); private bool disposing = false; private Thread mythread; public ComplexCalculator() this.mythread = new Thread(ProcessOperations); this.mythread.start(); #region IComplexCalculator Members public void StartOperation(Operation Operation) try Operation.OperationContext = OperationContext.Current; lock (this.operations) this.operations.add(operation); catch (Exception exp) throw new FaultException(exp.Message); #endregion Seminar Windows Communication Foundation 31/37

32 private void ProcessOperations() try List<Operation> tempops; while (!this.disposing) lock (this.operations) tempops = new List<Operation>(this.operations); this.operations.clear(); foreach (Operation operation in tempops) try var result = ProcessOperation(operation); var callback = operation.operationcontext.getcallbackchannel<icalculatorcallback>(); callback.operationcompleted(result); catch (Exception exception) Console.WriteLine("Could not send result!\r\n0", exception.message); tempops.clear(); for (int i = 0; i < 60 &&!this.disposing; ++i) Thread.Sleep(100); catch (Exception exp) Console.WriteLine(exp.ToString()); Seminar Windows Communication Foundation 32/37

33 private OperationResult ProcessOperation(Operation Operation) OperationResult result = new OperationResult(); try switch (Operation.Operator) case Operator.Add: result.result = 0.0; foreach (var value in Operation.Operands) result.result += value; result.succeeded = true; break; case Operator.Subtract: result.result = Operation.Operands[0]; for (int i = 1; i < Operation.Operands.Count; ++i) result.result -= Operation.Operands[i]; result.succeeded = true; break; case Operator.Multiply: result.result = 1.0; foreach (var value in Operation.Operands) result.result *= value; result.succeeded = true; break; case Operator.Divide: result.result = Operation.Operands[0]; for (int i = 1; i < Operation.Operands.Count; ++i) result.result /= Operation.Operands[i]; result.succeeded = true; break; default: throw new Exception("Unsupported Operator!"); catch (Exception exp) result.succeeded = false; result.error = exp; return result; #region IDisposable Members public void Dispose() if (!this.disposing) this.disposing = true; this.mythread.join(); #endregion Seminar Windows Communication Foundation 33/37

34 private static ServiceHost host; private static ComplexCalculator instance; public static void StartComplexCalculator() instance = new ComplexCalculator(); host = new ServiceHost(instance, new Uri(" var binding = new NetTcpBinding(); host.addserviceendpoint(typeof(icomplexcalculator), binding, "net.tcp://localhost/icomplexcalculator"); var metadatabehavior = new ServiceMetadataBehavior(); metadatabehavior.httpgetenabled = true; host.description.behaviors.add(metadatabehavior); host.open(); public static void Stop() if (host!= null) host.close(); host = null; if (instance!= null) instance.dispose(); instance = null; Seminar Windows Communication Foundation 34/37

35 namespace CalculatorServer class ServerProgram static void Main(string[] args) try Console.WriteLine("--- Calculator Server ---"); Console.Write("Starting Simple Calculator..."); SimpleCalculator.StartSimpleCalculator(); Console.WriteLine(" Done!"); Console.Write("Starting Complex Calculator..."); ComplexCalculator.StartComplexCalculator(); Console.WriteLine(" Done!"); catch (Exception exp) Console.WriteLine("--- Exception ---"); Console.WriteLine(exp.ToString()); Console.WriteLine("------"); finally Console.ReadLine(); try catch SimpleCalculator.Stop(); ComplexCalculator.Stop(); Seminar Windows Communication Foundation 35/37

36 Quelltext des SimpleClients (ohne Callbacks) namespace SimpleClient class SimpleProgram static void Main(string[] args) try Console.WriteLine("--- Simple Client ---"); var binding = new BasicHttpBinding(); var address = new EndpointAddress(" var client = new Calculator.SimpleCalculatorClient(binding, address); client.open(); Console.WriteLine("5 + 5 = 0", client.add(5, 5)); Console.WriteLine(" = 0", client.add(5, 10)); Console.WriteLine("1 * 2 * 3 * 4 * 5 * 6 * 7 = 0", client.multiply(new double[] 1, 2, 3, 4, 5, 6, 7 )); catch (Exception exp) Console.WriteLine("--- Exception ---"); Console.WriteLine(exp.ToString()); Console.WriteLine("------"); finally Console.ReadLine(); Seminar Windows Communication Foundation 36/37

37 Quelltext des ComplexClients (mit Callbacks) namespace ComplexClient [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)] class ResultReceiver : IComplexCalculatorCallback #region IComplexCalculatorCallback Members public void OperationCompleted(OperationResult Result) if (Result.Succeeded) Console.WriteLine("Operation 0 succeeded! Result = 1", Result.Operator, Result.Result); else Console.WriteLine("Operation 0 failed! Reason: 1", Result.Operator, Result.Error); #endregion namespace ComplexClient class ComplexProgram static void Main(string[] args) try Console.WriteLine("--- Complex Client ---"); var receiver = new ResultReceiver(); var client = new ComplexCalculatorClient(new InstanceContext(receiver)); client.open(); var operation = new Operation(); operation.operator = Operator.Add; for (int i = 1; i < 20; ++i) operation.operands = new double[] i,i+1,i*i,100/i,i%5; client.startoperation(operation); Console.ReadLine(); catch (Exception exp) Console.WriteLine("--- Exception ---"); Console.WriteLine(exp.ToString()); Console.WriteLine("------"); Seminar Windows Communication Foundation 37/37

Einführung in die Windows Communication Foundation (WCF)

Einführung in die Windows Communication Foundation (WCF) Einführung in die Windows Communication Foundation (WCF) Seminarvortrag Mark Foti Matrikelnummer: 993344 Gliederung 1 Einleitung 2 Das A-B-C (Address, Binding, Contract) Prinzip 3 Bindings und Protokolle

Mehr

.NET-Networking 2 Windows Communication Foundation

.NET-Networking 2 Windows Communication Foundation .NET-Networking 2 Windows Communication Foundation Proseminar Objektorientiertes Programmieren mit.net und C# Fabian Raab Institut für Informatik Software & Systems Engineering Agenda Grundproblem Bestandteile

Mehr

Einführung: Verteilte Systeme - Remote Method Invocation -

Einführung: Verteilte Systeme - Remote Method Invocation - Einführung: Verteilte Systeme - - Prof. Dr. Michael Cebulla 11. Dezember 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 43 M. Cebulla Verteilte Systeme Gliederung 1 2 Architektur RMI Kommunikation

Mehr

Unified-E Standard WebHttp Adapter

Unified-E Standard WebHttp Adapter Unified-E Standard WebHttp Adapter Version: 1.5.0.2 und höher Juli 2017 Inhalt 1 Allgemeines... 2 2 Adapter-Parameter in Unified-E... 2 3 Symbolische Adressierung... 3 3.1 ReadValues-Methode... 4 3.2 WriteValues

Mehr

Objektorientierung. Marc Satkowski 20. November C# Kurs

Objektorientierung. Marc Satkowski 20. November C# Kurs Objektorientierung Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Weiterführende Verzweigungen Tertiäre-Verzweigung switch case 2. Schleifen Zählschleife (for) break & continue 3. Objektorientierung

Mehr

Programmierung für Mathematik HS11

Programmierung für Mathematik HS11 software evolution & architecture lab Programmierung für Mathematik HS11 Übung 8 1 Aufgabe: Codeverständnis (Repetition) 1.1 Lernziele 1. Code verstehen können. 2. Fehler im Code finden und korrigieren

Mehr

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden Javaprogrammierung mit NetBeans Variablen, Datentypen, Methoden Programmieren 2 Java Bezeichner Bezeichner: Buchstabe _ $ Buchstabe _ $ Ziffer Groß- und Kleinbuchstaben werden strikt unterschieden. Schlüsselwörter

Mehr

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften

Mehr

Exceptions und Vererbung

Exceptions und Vererbung Exceptions und Vererbung Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter 2. Exceptions Eigene Exceptions Handling

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Serielle Kommunikation - Kodierung

Serielle Kommunikation - Kodierung Serielle Kommunikation - Kodierung (1.) Erstellen Sie nachfolgende Klasse: Dabei haben die Methoden folgende Funktionen: exists(): Überprüft, ob eine serielle Schnittstelle existiert getproperties(): Liefert

Mehr

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener

Mehr

Grundlagen der Web-Entwicklung INF3172

Grundlagen der Web-Entwicklung INF3172 Grundlagen der Web-Entwicklung INF3172 Web-Services Thomas Walter 16.01.2014 Version 1.0 aktuelles 2 Webservice weitere grundlegende Architektur im Web: Webservice (Web-Dienst) Zusammenarbeit verschiedener

Mehr

SRH Hochschule Heidelberg

SRH Hochschule Heidelberg SRH Hochschule Heidelberg Fachbereich Informatik Vertriebssysteme / CRM Johannes Dipl. Inf. (FH) Hoppe Johannes Hoppe MSP WCF Vorlesung 25.03.2009 90 Minuten, 8 Teilnehmer Dipl. Inf. (FH) Johannes Hoppe

Mehr

1 Abstrakte Klassen, finale Klassen und Interfaces

1 Abstrakte Klassen, finale Klassen und Interfaces 1 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell Klassen - Technisch Eine Klasse ist eine Einheit mit einem Namen, die Daten und Funktionalität beinhaltet 12. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, Kapselung,

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie zu Übung 8 Implementierung in Java Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am Aufgabe 1 Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am 16.3.2002 Folgende Implementierung löst die gestellte Aufgabe : public interface Figur { public void anzeigen (); public

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen

Mehr

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1) Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte

Mehr

Effiziente Administration Ihrer Netzwerkumgebung

Effiziente Administration Ihrer Netzwerkumgebung n ne atio n orm tione f n n ri tze onve nu Be nd K u Effiziente Administration Ihrer Netzwerkumgebung XML-WebService Schnittstelle Inhaltsverzeichnis Allgemeines 3 Web Service 3 Starten und Kontrollieren

Mehr

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1) Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte

Mehr

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1) Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte

Mehr

Objektorientierte Programmierung OOP Programmieren mit Java

Objektorientierte Programmierung OOP Programmieren mit Java Objektorientierte Programmierung OOP Programmieren mit Java 5.1 Elementare Anweisungen 5.1.1 Ausdrucksanweisung 5.1.2 Leere Anweisung 5.1.3 Blockanweisung 5.1.4 Variablendeklaration 5.2 Bedingungen 5.2.1

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Java Einführung ABLAUFSTEUERUNG Kapitel 3 und 4

Java Einführung ABLAUFSTEUERUNG Kapitel 3 und 4 Java Einführung ABLAUFSTEUERUNG Kapitel 3 und 4 Inhalt dieser Einheit Merkmale und Syntax der verschiedenen Kontrollstrukturen: if else switch while do while for break, continue EXKURS: Rekursion 2 Kontrollstrukturen

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation spezielle Technik aus dem Java-Umfeld Ausführung der Methoden auf einem entfernten Rechner Analogon zum RPC (Remote Procedure Call) Zweck: Objekte in verschiedenen Java-VM s Aufruf

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

C# - Einführung in die Programmiersprache Fehler abfangen. Leibniz Universität IT Services Anja Aue

C# - Einführung in die Programmiersprache Fehler abfangen. Leibniz Universität IT Services Anja Aue C# - Einführung in die Programmiersprache Fehler abfangen Leibniz Universität IT Services Anja Aue Fehler in einem Programm Warnungen sind Hinweise auf eventuelle Fehler während der Laufzeit des Programms.

Mehr

Ausnahmen. Exceptions. Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten. Dr. Beatrice Amrhein

Ausnahmen. Exceptions. Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten. Dr. Beatrice Amrhein Ausnahmen Exceptions Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten Dr. Beatrice Amrhein Definition 2 Definition: Ausnahme (Exception) In C# werden Fehler, die zur Laufzeit im

Mehr

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion 1 Java 1.1 e B Java RMI orientierte Sprache e beschrieben in Klassendefinitionen und andere Datentypen: int, float, boolean, etc. referenzen Verweise auf e keine Zeiger, Adressen o.ä. B.1 B.2 1.1 e (2)

Mehr

1 Klassen und Objekte

1 Klassen und Objekte 1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

Übungen zu Middleware Universität Erlangen-Nürnberg Informatik 4, 2007 Z-Java-Exceptions.fm

Übungen zu Middleware Universität Erlangen-Nürnberg Informatik 4, 2007 Z-Java-Exceptions.fm Z.11Fehlerbehandlung Programm beenden (System.exit()) meist eine schlechte Idee Ausgabe einer Fehlermeldung hilft nicht den Fehler zu überwinden spezieller Rückgabewert kennzeichnet Fehler Konstruktoren

Mehr

Informatik B. Vorlesung 17 Netzwerkprogrammierung. Dr. Ralf Kunze

Informatik B. Vorlesung 17 Netzwerkprogrammierung. Dr. Ralf Kunze Vorlesung 17 Netzwerkprogrammierung 1 Rückblick URL-Objekt Socket Verbindung zu einem Server aufbauen Webserver aus Clientsicht 2 Serverimplementation Server bauen keine eigene Verbindung auf, sondern

Mehr

Anleitung zur Fleet & Servicemanagement Evatic Schnittstelle

Anleitung zur Fleet & Servicemanagement Evatic Schnittstelle Anleitung zur Fleet & Servicemanagement Evatic Schnittstelle Seite 1 von 7 Inhaltsverzeichnis 1 Einleitung... 3 2 Hinweise zur Verbindungseinrichtung zum Evatic Server... 3 3 Konfiguration der docuform

Mehr

Themen. Web Service - Clients. Kommunikation zw. Web Services

Themen. Web Service - Clients. Kommunikation zw. Web Services Themen Web Service - Clients Kommunikation zw. Web Services Bisher: Implementierung einer Java Anwendung und Bereitstellung durch Apache Axis unter Apache Tomcat Java2WSDL Erzeugen einer WSDL-Datei zur

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation Spezielle Technik aus dem Java-Umfeld Ausführung von Methoden auf einem entfernten Rechner Analogon zum RPC (Remote Procedure Call) Zweck: Objekte in verschiedenen Java-VMs Aufruf

Mehr

Websockets. Verbindungskanal zwischen Client-Anwendung (JavaScript in Browser) und Server.

Websockets. Verbindungskanal zwischen Client-Anwendung (JavaScript in Browser) und Server. Websockets Websocket: Verbindungskanal zwischen Client-Anwendung (JavaScript in Browser) und Server. Vergleichbar mit TCP/IP-Socket, aber durch Client-Skript direkt nutzbar Mit eingebauter Nachrichten-Fragmentierung.

Mehr

Klassen mit Instanzmethoden

Klassen mit Instanzmethoden Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 3.12.07 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07

Mehr

7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc.

7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc. 7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc.html) bietet leider nur begrenzte Verteilungsabstraktion Unterstützung

Mehr

Umgang mit Fehlern. Sinn von Ausnahme-/Fehlerobjekten Dokumentation Umgang mit Fehlern Eigene Fehlerklassen

Umgang mit Fehlern. Sinn von Ausnahme-/Fehlerobjekten Dokumentation Umgang mit Fehlern Eigene Fehlerklassen Umgang mit Fehlern Sinn von Ausnahme-/Fehlerobjekten Dokumentation Umgang mit Fehlern Eigene Fehlerklassen Die Java-Fehlerbehandlung stellt gegenüber älteren Verfahren einen großen Fortschritt dar. Prof.

Mehr

Komponenten & Frameworks Seite 1

Komponenten & Frameworks Seite 1 Überblick - ermöglichen das Hinzufügen von benutzerdefinierbaren Informationen zur Klasse - analog der Sprache, Bsp.: ein schönes Auto - können zur Laufzeit abgefragt und ausgewertet werden - werden bei

Mehr

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3 Programmieren mit Java Modul 5 Objekte Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Klassen und Objekte 3 2.1 Klassen.................................... 4 2.2 Objektvariablen und Methoden.......................

Mehr

Tag 8 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java) Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG FORTGESCHRITTENE KONZEPTE Tobias Witt!! 26.03.2014 FEHLERBEHANDLUNG KLASSISCHER ANSATZ Fehlercode als Rückgabewert von Methoden! String Fehlercode als String! int Fehlercode

Mehr

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017 Informatik 1 für Nebenfachstudierende Grundmodul Java Methoden Kai-Steffen Hielscher Folienversion: 1. Februar 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht Kapitel 3 - Java

Mehr

Programmierung für Mathematik HS10 Übung 8

Programmierung für Mathematik HS10 Übung 8 Department of Informatics software evolution & architecture lab Programmierung für Mathematik HS10 Übung 8 1 Aufgabe: Codeverständnis (Repetition) 1.1 Lernziele 1. Code verstehen können. 2. Fehler im Code

Mehr

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo Webentwicklung mit Vaadin 7 Theoretische und praktische Einführung in Vaadin 7 Christian Dresen, Michael Gerdes, Sergej Schumilo Agenda Allgemeines Architektur Client-Side Server-Side Vaadin UI Components

Mehr

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007 Systemprogrammierung Projekt: Java RMI Wintersemester 2006 / 2007 Systemprogrammierung 1. Einleitung 2. Einführung in RPC 3. RMI 4. Code Beispiele 5. Live Vorstellung 6. Ausblick 7. Fazit 2 1. Einleitung

Mehr

Präsenzübung 10. Konzepte und Methoden der Systemsoftware. Sommersemester 2010. vom 21.06.2010 bis 25.06.2010

Präsenzübung 10. Konzepte und Methoden der Systemsoftware. Sommersemester 2010. vom 21.06.2010 bis 25.06.2010 Sommersemester 2010 Konzepte und Methoden der Systemsoftware Universität Paderborn Fachgebiet Rechnernetze Präsenzübung 10 vom 21.06.2010 bis 25.06.2010 Aufgabe 1: Kommunikation via Kanalobjekt Betrachten

Mehr

Interaktionsdiagramme in UML

Interaktionsdiagramme in UML Interaktionsdiagramme in UML Interaktionsdiagramm ist ein Oberbegriff für eine Reihe von Diagrammen, die das Verhalten eines objektorientierten Systems durch Objektinteraktionen beschreiben Ein Sequenzdiagramm

Mehr

Prof. W. Henrich Seite 1

Prof. W. Henrich Seite 1 Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse

Mehr

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen Teil 5 - Java Programmstruktur Operatoren Schlüsselwörter Datentypen 1 Kommentare in Java In Java gibt es drei Möglichkeiten zur Kommentierung: // Kommentar Alle Zeichen nach dem // werden ignoriert. für

Mehr

Vererbung und Polymorphie

Vererbung und Polymorphie Vererbung und Polymorphie Marc Satkowski, Sascha Peukert 29. September 2016 C# Kurs Gliederung 1. Methodenüberladung 2. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter

Mehr

AVID-Übung 5. Asynchronous.NET Remoting. 15. Juli Andreas I. Schmied Abteilung Verteilte Systeme Projektgruppe AspectIX

AVID-Übung 5. Asynchronous.NET Remoting. 15. Juli Andreas I. Schmied Abteilung Verteilte Systeme Projektgruppe AspectIX Abteilung Verteilte Systeme Projektgruppe AspectIX Universität Ulm Fakultät für Informatik AVID-Übung 5 Asynchronous.NET Remoting 15. Juli 2004 Andreas I. Schmied (schmied@inf...) Asynchrone Methodenaufrufe

Mehr

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Übung 1 mit C# 6.0 MATTHIAS RONCORONI Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,

Mehr

Praktikum Verteilte Anwendungen

Praktikum Verteilte Anwendungen Technische Informatik (Info II) -Sommersemester 2006 - Folie 1 / 27 0 Gliederung 1.) Kurze Wiederholung/ Einleitung 2.) RPC/ RMI 3.) Praktisches Beispiel 4.) Aufgabenblatt Folie 2 / 27 Wiederholung/ Einleitung

Mehr

Entwurfsmuster und Frameworks Singleton

Entwurfsmuster und Frameworks Singleton Entwurfsmuster und Frameworks Singleton Oliver Haase Oliver Haase Emfra Singleton 1/20 Beschreibung I Klassifikation: objektbasiertes Erzeugungsmuster Zweck: sicherstellen, dass eine Klasse nur genau einmal

Mehr

Die abstrakte Klasse Expression:

Die abstrakte Klasse Expression: Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die

Mehr

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein Objektorientierung Klassen und Objekte Dr. Beatrice Amrhein Überblick Konzepte der Objektorientierten Programmierung Klassen und Objekte o Implementierung von Klassen o Verwendung von Objekten 2 Konzepte

Mehr

Konzepte von Betriebssystem-Komponenten Middleware RMI

Konzepte von Betriebssystem-Komponenten Middleware RMI Konzepte von Betriebssystem-Komponenten Middleware RMI Mario Kiefer 21. Januar 2005 1 Einführung RMI (Remote Method Invocation) ermöglicht es mit relativ einfachen Mitteln verteilte Anwendungen zu erstellen.

Mehr

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a

Mehr

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken Mobile und Verteilte Datenbanken Java RMI Vorlesung Wintersemester 2013/2014 groppe@ifis.uni-luebeck.de Institut für Informationssysteme Universität zu Lübeck Kommunikations-Middleware Bietet höhere Kommunikations-Dienste

Mehr

Installation und Nutzung des SSH Clients 'PuTTY'

Installation und Nutzung des SSH Clients 'PuTTY' Installation und Nutzung des SSH Clients 'PuTTY' Einleitung Dieses Dokument beschreibt die Installation und Nutzung des PuTTY SSH Clients von Simon Tatham. Dieses Programm läuft unter den diversen Microsoft-Windows-

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition

Mehr

Lebenszyklus von Threads

Lebenszyklus von Threads Threads Umgangssprachlich Faden, Diskussionsfaden, Gewinde, Faser, Garn, roter Faden Threads ermöglichen Nebenläufigkeit (parallele Ausführung von Anwendungsteilen). Typisch für Threads ist,dass sie zu

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.

Mehr

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. ) Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:

Mehr

Remote Methode Invocation (RMI) ETIS SS05

Remote Methode Invocation (RMI) ETIS SS05 Remote Methode Invocation (RMI) ETIS SS05 Motivation Ablauf der Kommunikation Erstellung Remote-Service Zusammenfassung Gliederung 2 Motivation I RMI: Remote Method Invokation Möglichkeit verteilte Java-Anwendungen

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

Verteilte Systeme - Java Networking (Sockets) -

Verteilte Systeme - Java Networking (Sockets) - Verteilte Systeme - Java Networking (Sockets) - Prof. Dr. Michael Cebulla 30. Oktober 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 36 M. Cebulla Verteilte Systeme Gliederung Grundlagen TCP/IP

Mehr

Properties und Proxies

Properties und Proxies g n årà Dr. Winfried Grünewald service@grnwld.de Properties und Proxies Dr. Winfried Grünewald, Stutensee 2011 Version 0.9 2/10 1 Einleitung Die Java Entwicklungsumgebung bietet mit den Properties-Dateien

Mehr

KompaSbilität zu Standards (WS- I) Contracts. Interfaces und Generics Umfangreiche AXribuSerung. Mehr Spielraum auf Transportebene

KompaSbilität zu Standards (WS- I) Contracts. Interfaces und Generics Umfangreiche AXribuSerung. Mehr Spielraum auf Transportebene Komponenten WCF (.NET Framework) WCF Verfeinerung und Reifung der ursprünglichen Version Geringere Unterschiede zu ASMX 2.0 (.NET 2.0) + WSE 3.0 Schwerpunkte KompaSbilität zu Standards (WS- I) Contracts

Mehr

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen Thread-Synchronisation in in Java Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen Die Klasse Thread Die Die Klasse Thread gehört zur zur Standardbibliothek von von

Mehr

1 Fehler-Objekte: Werfen, Fangen, Behandeln

1 Fehler-Objekte: Werfen, Fangen, Behandeln 1 Fehler-Objekte: Werfen, Fangen, Behandeln Tritt während der Programm-Ausführung ein Fehler auf, wird die normale Programm-ausführung abgebrochen und ein Fehler-Objekt erzeugt (geworfen). Die Klasse Throwable

Mehr

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object Smalltalk vs. Objective-C Klassen als Objekte Klassendeklarationen Selektoren als first-class values Objekt-Erzeugung Implementierung: Eigene VM vs. Einbettung in C Smalltalk: Everything is an object Klassen

Mehr

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a

Mehr

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1 Inhaltsverzeichnis Grundlagen und Einführung (1. Band) 1 1 Einleitung und Vorwort 1 1.1 Vorwort zur 13. Auflage....................... 1 1.2 Vorwort zur 10. Auflage....................... 1 1.3 Voraussetzungen...........................

Mehr

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch Klassen (Java) vs. Records (Pascal) 14. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung Pascal RECORDs in Pascal sind reine

Mehr

Prof. W. Henrich Seite 1

Prof. W. Henrich Seite 1 Attribute Überblick - Attribute ermöglichen das Hinzufügen von benutzerdefinerbaren Informationen zur Klasse - analog der Sprache, Bsp.: ein schönes Auto - können zur Laufzeit abgefragt und ausgewertet

Mehr

Programmiertechnik Klassenvariablen & Instantiierung

Programmiertechnik Klassenvariablen & Instantiierung Programmiertechnik Klassenvariablen & Instantiierung Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Klassenvariablen Zur Erinnerung: Klassen bestehen aus Variablen und Methoden; beide zusammen

Mehr

Benutzerhandbuch. Neukirchen

Benutzerhandbuch. Neukirchen Benutzerhandbuch Neukirchen August 2015 Kontakt: Kai Hübl Lambertsberg 17 D-34626 Neukirchen kai.huebl@asneg.de 3 Contents 1 Einleitung... 5 1.1 Inhalt... 5 1.2 OpcUaWebServer... 5 1.3 Web Panel... 6 2

Mehr

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 8. September 2014 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr

Mehr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

KeptSecret User Guide

KeptSecret User Guide User Guide Mit können Sie Ihre Bilder und Notizen verschlüsselt und damit privat speichern. verwendet die im iphone und ipod Touch eingebaute 256-Bit starke Verschlüsselung nach dem Advances Encryption

Mehr

Programmiermethodik 3. Klausur Lösung

Programmiermethodik 3. Klausur Lösung Programmiermethodik 3. Klausur Lösung 9. 1. 2014 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 20 2 16 3 45 4 19 5 20 Gesamt 120 1 Seite 2 von 10 Aufgabe 1) Objekt-Orientierung und Vererbung

Mehr

Gliederung Einleitung Die Interprozess Kommunikation Zusammenfassung Fragen. .NET Remoting. André Frimberger

Gliederung Einleitung Die Interprozess Kommunikation Zusammenfassung Fragen. .NET Remoting. André Frimberger .NET Remoting André Frimberger 30.11.2004 André Frimberger.NET Remoting 1 Gliederung 1 Einleitung Was ist.net Remoting? 2 Die Interprozess Kommunikation Grundkonzept der Datenkanal Parameterübergabe Instanziierung

Mehr

Das Interface-Konzept am Beispiel der Sprache Java

Das Interface-Konzept am Beispiel der Sprache Java Das Interface-Konzept am Beispiel der Sprache Java Klaus Kusche, November 2013 Inhalt Motivation: Wozu braucht man Interfaces? Interfaces in Java Was spricht gegen die große Lösung? Voraussetzungen Kenntnisse

Mehr

Eine Untersuchung der Funktionen des Apache Wicket Webframeworks

Eine Untersuchung der Funktionen des Apache Wicket Webframeworks Eine Untersuchung der Funktionen des Apache Wicket Webframeworks Seminararbeit von Olaf Matticzk 1 15.01.2016 (c) by synaix 2016 synaix...your business as a service. Agenda 1. Einleitung 2. Webanwendungen

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr