So erstellen Sie eine WCF-Service-STA (single-threaded)

9

Ich habe einen WCF-Dienst, der UI-Komponenten enthält, was mich zwingt, im STA-Modus zu sein.

Wie stelle ich das Dienstverhalten auf den STA-Modus ein?

Der Dienst verwendet einen Verweis auf eine WPF-DLL-Datei, die ein UI-Fenster (als Ansichtsanschluss) für die Bildanalyse öffnet. Wenn der Dienst versucht, eine Instanz dieses Elements zu erstellen (erbt vom Fenster), löst er eine Ausnahme aus:

  

Der aufrufende Thread muss eine STA sein

    
Martijn Pieters 08.09.2008, 10:41
quelle

3 Antworten

1

Ich mache etwas ähnliches wie du.

Meine Lösung bestand darin, alle Anrufe durch eine STA-Thread-Warteschlange zu leiten. Ich habe eine Threadsafe-Sammlung aus dem neuen parallelen Framework um Aktionen anzuheften, die ich in einem STA-Thread ausführen wollte. Ich hatte dann X Anzahl von STA-Threads, die die Warteschlange ständig auf neue auszuführende Aktionen prüften.

    
Will 08.09.2008 13:10
quelle
0

Ich untersuche das Attribut [STAThread], um das Threading-Modell zu wechseln. z.B.

%Vor%

Beschreibung des STAThread-Attributs

Aber ich bin verwirrt, warum Sie überhaupt UI-Komponenten in einem Web-Service verwenden. Können Sie etwas mehr darüber erklären, warum Sie das versuchen?

    
John Sibly 08.09.2008 10:48
quelle
0

ServiceBehaviour Attribut können Sie angeben Verhalten. In Ihrem Fall für einen einzelnen Thread würden Sie Folgendes verwenden:

%Vor%

Sie möchten vielleicht etwas über lesen > InstanceContextMode s, damit Sie besser auswählen können, wie sich der Dienst verhalten soll.

Sie müssen auch zu Ihrem app.config neuen Dienstverhalten hinzufügen (oder ein bestehendes bearbeiten):

%Vor%

und in Ihrer Verhaltenskonfiguration in demselben app.config set behaviorConfiguration wie folgt:

%Vor%

Hoffe das spart dir etwas Zeit

    
Matas Vaitkevicius 09.05.2016 15:31
quelle