Pergunta

um novo membro aqui. Bom ver uma comunidade tão puro.

Depois de um pouco de pesquisa, eu decidi usar WCF no meu aplicativo para fazer a comunicação entre processos, por isso estou usando o NetNamedPipeBinding vinculativo.

A aplicação de hospedagem ServiceHost não é um servidor dedicado, por isso tem que gerar o ServiceHost via um fio. Até aqui tudo bem.

Então, eu tenho algo como o seguinte:

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

Assim como esperado, eu vejo:

->   Server Thread Exited
->   Foo Exited

Mas para minha surpresa, apesar do segmento do servidor está sendo executado em excitou, o cliente pode ainda se conectar à ServiceHost e o host de serviço processa a solicitação corretamente!

Então, como é que o ServiceHost ainda está a processar e tratar solicitações mesmo que seja thread principal (aquele em que foi criado) está morto?

Além disso, há uma maneira melhor para manter o ServerThread vivo depois de um tempo (true) {Thread. Sleep (100);}

Graças.

Foi útil?

Solução

Quando você chama Abrir no ServiceHost, um segmento adicional será criado para escutar as solicitações de serviços recebidas. Desta forma, a sua discussão pode ter em execução acabado, mas outro segmento foi criado, e continuará a funcionar até que você chama de "Close" na ServiceHost.

Pode não ser necessário no seu caso para a desova fora de um fio de si mesmo. Basta abrir o seu ServiceHost no segmento principal do aplicativo. Você pode então fazer outras coisas em seu segmento principal, e quando você está pronto para matar o hospedeiro, basta ligar serviceHost.Close ().

Aqui está uma descrição muito bom que eu encontrei:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top