Question

un nouveau membre ici. Agréable de voir une communauté propre.

Après un peu de recherche, j'ai décidé d'utiliser WCF dans ma demande de faire la communication inter processus, je me sers du NetNamedPipeBinding obligatoire.

L'application d'hébergement ServiceHost n'est pas un serveur dédié, il doit frayer la ServiceHost via un fil. Jusqu'à présent, si bon.

J'ai donc quelque chose comme ce qui suit:

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

Comme prévu, je vois:

->   Server Thread Exited
->   Foo Exited

Mais à ma grande surprise, même si le fil du serveur est en cours d'exécution sur a excité, le client peut toujours se connecter à l'ServiceHost et l'hôte de service traite la requête correctement!

Alors, comment se le ServiceHost est encore le traitement et le traitement des demandes, même si elle est thread principal (celui il a été créé) est mort?

est-il aussi une meilleure façon de garder la vie ServerThread alors while (true) {fil. Sommeil (100);}?

Merci.

Était-ce utile?

La solution

Lorsque vous appelez Ouvrir le ServiceHost, un fil supplémentaire sera créé pour écouter les demandes de service entrantes. De cette façon, votre fil peut-être fini, mais un autre thread a été créé, et continuera à fonctionner jusqu'à ce que vous appelez « Close » sur le ServiceHost.

Il ne peut pas être nécessaire dans votre cas pour se reproduire hors vous-même fil. Il suffit d'ouvrir votre ServiceHost dans le thread principal de l'application. Vous pouvez alors faire d'autres choses dans votre thread principal, et quand vous êtes prêt à tuer l'hôte, il suffit d'appeler serviceHost.Close ().

Voici une assez bonne description que j'ai trouvé:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top