2009-05-14 3 views
1

Ich habe einen COM-EXE-Out-of-proc-Server, der eine API von einer seiner Schnittstellen aus verfügbar macht. Die Funktionalität dieser API besteht darin, URLs zu posten.Benötige ich eine Jobwarteschlange auf meinem COM-Server?

Mein Client erstellt die Instanz des COM-Servers und ruft diese API mit neuen URLs auf.

Jedes Mal, wenn der Client eine URL veröffentlichen muss, wird eine Instanz dieses COM-Servers erstellt.

Muss ich eine Warteschlange im COM-Server implementieren, um alle vom Client veröffentlichten URLs zu verfolgen und sicherzustellen, dass nichts verloren geht?

Was ich frage mich ist, wenn jedes Mal, wenn ich ein COM-Objekt erstellen, ein neuer Prozess gestartet wird? Wenn das der Fall ist, denke ich, dass ich keine Jobwarteschlange im Server implementieren muss.

Wenn jedoch nur eine Instanz im Speicher verbleibt, ist es möglich, dass die vom Client veröffentlichten Jobs/URLs verloren gehen.

Antwort

1

COM startet normalerweise einen Serverprozess für alle Anforderungen und instanziiert alle Objekte in diesem Prozess. Wenn Daten zwischen allen Objekten (globale Variablen oder statische Membervariablen) gemeinsam genutzt werden, sollten Sie entweder für die Synchronisierung sorgen oder die COM-Komponente apartment-threaded (STA) erstellen.

Wenn Sie keine Synchronisierung haben und die Komponente Multi-Threaded (MTA) ist, unterliegen alle zwischen Instanzen verteilten Daten der Beschädigung, wenn sie von mehreren Threads gleichzeitig geschrieben werden.

+0

Okay, mein COM-Server ist single-threaded. Kann ich mehrere Anfragen an COM-Server stellen? Ich möchte auch, dass der COM-Server die Anfrage entgegennimmt und sofort zurückkehrt. Es sieht so aus, als müsste ich einen zweiten Thread im COM-Server implementieren, der sich um URLs kümmert. – anand

+0

Wenn es sich bei der Komponente um STA handelt, können Sie mehrere Anforderungen posten. Wenn jedoch eine Anforderung ausgeführt wird, werden alle nachfolgenden Anforderungen stillschweigend ausgesetzt, bis die erste Anforderung zurückgegeben und anschließend eine der ausstehenden Anforderungen wiederaufgenommen wird. Dies wird automatisch von COM durchgeführt, um die Beschädigung von gemeinsam genutzten Variablen zu verhindern. Sie können beliebig viele Threads spawnen, aber dann müssen Sie sich um die Synchronisation kümmern. – sharptooth