2009-06-22 6 views
3

Wie würden Sie einen WCF-Named Pipe-Dienst im Hintergrund einer WPF-Windows-Anwendung ausführen? Ich kann anscheinend keine Beispiele finden, wie der WCF-Server in einer WPF-Anwendung ausgeführt wird.WCF Named Pipes in der WPF-Anwendung

Irgendwelche Ideen?

Ich verwende derzeit den folgenden Code im Application_Startup. Muss das mit einem eigenen Thread laufen?

Using Host As ServiceModel.ServiceHost = New ServiceModel.ServiceHost(GetType(Service), New Uri(("net.pipe://localhost"))) 
     ' 
     Host.AddServiceEndpoint(GetType(IService), New ServiceModel.NetNamedPipeBinding, "Test") 
     Host.Open() 
     ' 
    End Using 
+0

Es kann oder darf nicht gelten, aber eine aktuelle SO-Frage etwa das gleiche in einer WinForms-Anwendung festgestellt, er brauchte den ServiceHost in einem anderen Thread als dem UI-Thread zu starten. Bitte aktualisieren Sie Ihre Frage, um zu sagen, welches Problem Sie haben. Ausnahme? Kann nicht verbinden? Was? –

+0

Sie haben das wahrscheinlich schon herausgefunden, aber für andere würde ich empfehlen, in einem eigenen Thread zu laufen. Ich habe einen ähnlichen Server in Winforms ausgeführt, und wenn Sie nicht in einem separaten Thread laufen, läuft alles, was nicht passiert, das Risiko auf, die GUI zu sperren. –

Antwort

0

Ich habe den Codeblock "Verwenden" entfernt und den ServiceHost als private Variable in der WPF-Anwendungsklasse eingerichtet. Ich schließe dann den ServiceHost, wenn die Anwendung beendet wird. Scheint gut zu funktionieren.

2

Juval Löwy bietet Hilfsklassen in seiner ServiceModelEx Bibliothek zusammen mit Informationen darüber, wie WCF Komponenten in-Prozess ausgeführt werden, was wahrscheinlich ist, was Sie mit Ihrem WCF-Komponente wollen, tun werden, da Sie verwenden möchten Named-Pipes, bei denen die Komponente auf demselben Computer wie die WPF-App ausgeführt werden muss.

Ich empfehle das Lesen über die InProcFactory-Klasse ab Seite 60 der 2. Ausgabe von "Programming WCF Services" von Juval Lowy. Dies ist im Wesentlichen die "Bibel" von WCF.

Dies zeigt Ihnen genau, wie Sie Ihre Komponente im Prozess unter Verwendung seiner Hilfsklassen hosten.

+0

Das Starten des ServiceHost innerhalb der WPF-Anwendungsklasse scheint das Problem zu beheben. Danke für die Buchempfehlung! – Luke

+0

Könnten Sie bitte http://StackOverflow.com/Questions/9702379/queuing-in-oneway-wcf-messages-using-windows-service-and-sql-server beantworten? – Lijo