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
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.
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?
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):
und in Ihrer Verhaltenskonfiguration in demselben app.config
set behaviorConfiguration wie folgt:
Hoffe das spart dir etwas Zeit
Tags und Links wcf .net user-interface multithreading web-services