Domanda

un nuovo membro qui. Bello vedere una comunità così pulito.

Dopo un po 'di ricerca, ho deciso di usare WCF nella mia richiesta di fare comunicazione di processo inter, quindi sto usando vincolante il NetNamedPipeBinding.

L'applicazione di hosting ServiceHost non è un server dedicato, quindi deve deporre le uova il ServiceHost tramite un filo. Fin qui tutto bene.

Così ho qualcosa di simile al seguente:

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");
}

Così come previsto, vedo:

->   Server Thread Exited
->   Foo Exited

Ma con mia sorpresa, anche se il filo del server è in esecuzione su è eccitato, il cliente può ancora collegarsi al ServiceHost e l'host di servizio elabora la richiesta correttamente!

Quindi, come mai il ServiceHost sta ancora elaborando e trattare le richieste, anche se si tratta di thread principale (quello è stato creato su) è morto?

è anche c'è un modo migliore per mantenere la vita ServerThread poi un while (true) {Thread. Dormire (100);?}

Grazie.

È stato utile?

Soluzione

Quando si chiama Apri dal ServiceHost, un thread aggiuntivo verrà creato per l'ascolto delle richieste di servizio in entrata. In questo modo, il filo potrebbe aver terminato l'esecuzione, ma un altro thread è stato creato, e continuerà a funzionare fino a quando si chiama "Close" sul ServiceHost.

Potrebbe non essere necessario nel tuo caso per deporre le uova fuori un filo da soli. Basta aprire la ServiceHost nel thread principale dell'applicazione. È quindi possibile fare altre cose nel vostro thread principale, e quando si è pronti a uccidere il padrone di casa, basta chiamare serviceHost.Close ().

Ecco una descrizione abbastanza buona ho trovato:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top