Frage

ein neues Mitglied hier. Schön, so eine saubere Gemeinschaft zu sehen.

Nach einem wenig Forschung, entschied ich WCF in meiner Anwendung zu verwenden, Inter-Prozess-Kommunikation zu tun, so dass ich bin mit dem NetNamedPipeBinding Bindung.

Die Servicehost Hosting-Anwendung ist kein dedizierter Server, so dass er die Servicehost über ein Gewinde zum Laichen hat. So weit so gut.

So habe ich etwas wie folgt aus:

Foo()
{
    Thread serverThread = new Thread(new ThreadStart(ServerThread));
    serverThread.Start();
    Console.WriteLine("Foo Exited");
}

ServerThread()
{
   Uri baseAddress = new Uri("net.pipe://localhost/service");
   ServiceHost serviceHost = new ServiceHost(typeof(MyService), baseAddress);
   ...
   serviceHost.Open();
   Console.WriteLine("Server Thread Exited");
}

So wie erwartet, ich sehe:

->   Server Thread Exited
->   Foo Exited

Aber zu meiner Überraschung, auch wenn der Faden des Server hat angeregt ausgeführt wird, kann der Client noch mit dem servicehost verbinden und die Service-Host verarbeitet die Anforderung richtig!

Wie kommt die Servicehost noch verarbeitet wird und die Behandlung von Anfragen, obwohl es Hauptthread (die es auf erstellt wurde) ist tot?

Auch gibt es einen besseren Weg, um den Serverthread am Leben dann einer while (true) {Thema zu halten. Schlafen (100);}?

Danke.

War es hilfreich?

Lösung

Wenn Sie auf die Servicehost öffnen aufrufen, ein zusätzlicher Thread wird erstellt für eingehende Dienstanforderungen zu hören. Auf diese Weise kann der Thread ausgeführt wird fertig, aber ein anderer Thread erstellt wurde, und läuft weiter, bis Sie auf „Schließen“ auf der Servicehost nennen.

Es kann nicht in Ihrem Fall notwendig sein, sich einen Thread zum Laichen aus. Öffnen Sie einfach Ihre Servicehost in der Haupt-Thread der Anwendung. Sie können dann andere Dinge in Ihrem Haupt-Thread tun, und wenn Sie bereit sind, den Wirt zu töten, rufen Sie einfach serviceHost.Close ().

Hier ist eine ziemlich gute Beschreibung, die ich gefunden:

http://www.code-magazine.com/article. aspx? QuickID = 0701041 & page = 1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top