.NET und die COM Interop Threading Apartments

Ähnliche Dokumente
Microsoft.NET Framework & Component Object Model. ein Vortrag von Florian Steuber

Andreas Kosch. Software & Support $ > Verlag GmbH

Inhalt. 1. Motivation. 2. COM Architektur. 3. COM Implementierung. 4. Zusammenhang zu ATL. 5. Beispiel COM Client/ Server. 6..

Einführung in COM Seite 1

Inhaltsverzeichnis. Teil I Grundlagen der Programmarchitektur Vorwort... XIII XV XVI XVI

Microsoft.NET Framework

.NET Framework. 3. Das.NET Framework

Java Concurrency Utilities

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

9.5 Microsoft.NET

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Einführung in die Programmiersprache C#

Algorithmen und Datenstrukturen

DCOM und.net. B. Sc. Tobias Buchloh. Seminar Software-Entwurf Fachgebiet Software Engineering, Institut für Angewandte Informatik Universität Hannover

Komponentenbasierte Softwareentwicklung

Komponenten & Frameworks Seite 1

2.1 Visual C Express installieren Visual C Express starten Visual C Express registrieren...

Enterprise Application Integration Erfahrungen aus der Praxis

Grundlagen der OO- Programmierung in C#

Visual Studio 2012 Windows 8 und.net 4.5. Hans Peter Bornhauser, Noser Engineering AG Fachbereichsleiter.NET, Digicomp AG

Client/Server-Programmierung

VIVIT TQA Treffen in Köln am API- Programmierung und Nutzung bei HP Quality Center / ALM. Michael Oestereich IT Consultant QA

Variablen und Parameter

Produktionsdebugging für.net Framework-Anwendungen

Seminar Softwarearchitekturen SoSe Martin Schrage

Ein einfacher Server. .NET Remoting. Klassentypen

Vergleich.Net und COM

Administrationshandbuch D Outlook Add-In. Dokumentation für Administratoren

Objektorientierte Programmierung Studiengang Medieninformatik

Einführung in die Programmiersprache Java II

Entwicklung einer echtzeitfähigen CLI-Laufzeitumgebung für den Einsatz in der Automatisierungstechnik

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

Polymorphie. 15. Java Objektorientierung II

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg

Polymorphie. 15. Java Objektorientierung II

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

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

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

High Performance REST Applications Sven Hasselbach

Thomas Claudius Huber. Asynchrone Programmierung mit C#

Charles Petzold. Windows 95. Programmierung ; ' :,:" 'üijijsarkmüw.flsfflfi <<>\ lll i '»,, 'S ) ;ji*roi/;>w >JG

Vorkurs Informatik WiSe 15/16

Remote Method Invocation

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Das Component Object Model (COM)

Implementieren von Klassen

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

Algorithmen und Datenstrukturen 07

PHP Debugging für.net Dummies (IIS WordPress PhpStorm Xdebug)

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

Eine Untersuchung der Funktionen des Apache Wicket Webframeworks

Einführung in C# Teil 1. Matthias Nübling

Einrichten des IIS für DataFlex WebApp Server. Einrichten des IIS (Internet Information Server) für DataFlex WebApp Server

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

Klausur Software-Entwicklung März 01

Vorlesung Programmieren

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

~±] Inhalt. 1.1 Ähnlichkeiten zwischen C# und Java Unterschiede zwischen C# und Java Das.NET-Framework 4 1.

Grundlagen der Informatik

Abschnitt 11: Beispiel: Die Klasse String (Teil 1)

Algorithmen und Datenstrukturen 06

Master-Thread führt Programm aus, bis durch die Direktive

Repetitorium Programmieren I + II

Die SharePoint-Welt für den erfahrenen.net-entwickler. Fabian Moritz MVP Office SharePoint Server ITaCS GmbH

Transkript:

.NET und die COM Interop Threading Apartments Quicktip bei BonnToCode 20. März 2007 Martin Krieger www.kriegermartin.de

Warum dieser Quicktip? Es läßt sich unglücklicherweise nicht immer vermeiden, auf vorhandene COM (DCOM, COM+, OLE, ActiveX) e zurückgreifen zu müssen. Die Nutzung von COM en in.net Programmen ist eigentlich ganz einfach. Eigentlich... Nichtberücksichtigung der COM Nebenläufigkeitsmodelle kann zu schlechter Performanz, Speicherverlust, Fehlfunktionen, Hängern und Abstürzen führen. Die Dokumentation ist eher versteckt in der MSDN und diversen Blogs. Daher soll hier ein Überblick mit Hinweisen auf weiterführende Texte gegeben werden.

Themenüberblick COM Interop Early Binding Late Binding COM Nebenläufigkeitsmodell Apartments Apartments und Prozesse Modell Thread Model setzen Nachrichten Pumpen Fazit Literatur

COM Interop Early Binding Early Binding (statisch - IUnknown) Type Library (.tlb, normalerweise in COM dll eingebunden) erforderlich. Es wird eine Runtime Callable Wrapper Assembly erzeugt, die als.net Stellvertreter dient. Visual Studio: Verweis hinzufügen, COM. Kommandozeile: TblImp.exe Programm: System.Runtime.InteropServices.TypeLibConverter Händisch: System.Runtime.InteropServices.ComImportAttribute etc. Garbage Collector verwaltet auch COM e. Deterministisches Löschen durch System.Runtime.InteropServices.Marshal.FinalReleaseComObject

COM Interop Late Binding Late Binding (dynamisch - IDispatch) VB.NET: CreateObject(ProgId, ServerName) Direkter Methodenaufruf Erfordert Option Strict Off Andere Sprachen: System.Type.GetTypeFromProgId System.Activator.CreateInstance System.Type.InvokeMember etc.

Apartments Apartments sind logische Gruppen von Threads und COM en. Jeder Thread gehört zu genau einem Apartment. Jedes COM gehört zu genau einem Apartment..NET e gehören zu keinem Apartment. Die Apartments der Threads sind für.net e ohne Belang. Threads können auf e ihres Apartments (sowie auf e im Neutral Apartment) frei zugreifen. Der Zugriff auf e in fremden Apartments erfordert einen Threadwechsel (Marshaling). Es gibt drei Sorten von Apartments: Single Threaded Apartments (STA) und Multi Threaded Apartments (MTA) sowie seit Windows 2000 Neutral Apartment (NA)

Apartments und Prozesse Prozesse haben beliebig viele STA aber höchstens ein MTA Zugriffe auf andere Apartments erforder Serialisierung - Deserialisierung (Marshaling) und einen Threadwechsel ebenso wie prozessübergreifende Zugriffe STA haben genau einen Thread e in STA können somit nicht parallel von mehreren Threads ausgeführt werden Aufrufe aus anderen Apartments werden in eine Warteschlange eingereiht MTA haben mehrere Threads e sind daher selbst für die Synchronisierung verantwortlich Aufrufe aus anderen Apartments werden über einen Threadpool ausgeführt NA e können aus jedem Apartment ohne Threadwechsel aufgerufen werden Main STA STA 2 STA 3 (-n) MTA NA Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 RPCThreadpool Stub Proxy Stub Proxy

COM Apartment Model Der Apartmenttyp eines COM es wird durch den Registryeintrag ThreadingModel unter HKEY_CLASSES_ROOT\CLSID\{guid}\InprocServer32 festgelegt Regedit, OleView, Tool auf meiner Homepage (kein) Apartment Free Both Neutral STA Main STA Aktuelles STA MTA Aktuelles STA NA MTA Main STA STA, ggf. neu MTA MTA NA

Thread Apartment Model setzen Startthread eines Programms Threadpool Thread Eigener Thread STA MTA [STAThread] [MTAThread] static void Main() static void Main() (default) nicht möglich (außer durch eigene Threadpool Klasse) (default) Thread.SetApartmentState(ApartmentState.STA) Thread.SetApartmentState(ApartmentState.MTA) (default).aspx <%@ Page AspCompat="true" %> (default).asmx eigener http handler (siehe MSDN Mag 10/06) (default)

Hör' nicht auf zu Pumpen... Threadwechsel in STA erfolgen über die Nachrichtenwarteschlange eines dem Apartment zugeordneten, unsichtbaren, Fensters. Die Nachrichten müssen gepumpt werden.net pumpt u.a. bei Anfordern eines COM-Interfaces Monitor.Enter, WaitHandle.WaitOne, WaitHandle.WaitAny Thread.Join(int) GC.WaitForPendingFinalizers Der Finalizer ist ein MTA Thread. Fehlendes Pumpen kann das Entfernen der COM e blockieren (und somit zu Speicherverlust führen) Beim Pumpen werden in der Nachrichtenwarteschlange befindlichen Aufrufe ausgeführt was u.u. zu Reentranzproblemen führen kann Debugging ContextSwitchDeadlock MDA sos.dll: FinalizeQueue -detail

Fazit Beim Umgang mit COM en in.net: Geeignetes Threading Modell wählen. Zwischen deterministischem und undeterministischem (GC) Löschen der e wählen. Nachrichten pumpen.

Literatur Prosise, Jeff: Understanding COM Apartments www.codeguru.com/cpp/com-tech/activex/apts/article.php/c5529/ (Teil 1) www.codeguru.com/cpp/com-tech/activex/apts/article.php/c5533/ (Teil 2) Prosise, Jeff: Running ASMX Web Services on STA Threads msdn.microsoft.com/msdnmag/issues/06/10/wickedcode/default.aspx Brumme, Chris: Apartments and Pumping in the CLR blogs.msdn.com/cbrumme/archive/2004/02/02/66219.aspx Duffy, Joe: Pump me baby one more time (and break my invariants) www.bluebytesoftware.com/blog/permalink,guid,1ca19b0e-ef5b-4efc-b614-48d8c913efb9.aspx MSDN Library

Fragen? Fragen! Grafik durch Doppel-