wcf :: servicehost : 이상한… 스레드가 죽었더라도 여전히 살아 있습니까?

StackOverflow https://stackoverflow.com/questions/932690

문제

여기에 새로운 회원. 그런 깔끔한 커뮤니티를 만나서 반갑습니다.

약간의 연구 후, 나는 응용 프로그램에서 WCF를 사용하여 프로세스 간 커뮤니케이션을 수행하기로 결정 했으므로 NetNamedPipeBinding 바인딩을 사용하고 있습니다.

ServiceHost 호스팅 응용 프로그램은 전용 서버가 아니므로 스레드를 통해 ServiceHost를 스폰해야합니다. 여태까지는 그런대로 잘됐다.

그래서 나는 다음과 같은 것이 있습니다.

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

예상대로, 나는 다음과 같이 본다.

->   Server Thread Exited
->   Foo Exited

그러나 놀랍게도 서버가 실행중인 스레드가 흥분하더라도 클라이언트는 여전히 ServiceHost에 연결할 수 있으며 서비스 호스트는 요청을 올바르게 처리합니다!

그렇다면 ServiceHost가 메인 스레드 (생성 된 것)이 죽었음에도 불구하고 요청을 계속 처리하고 처리하는 방법은 무엇입니까?

또한 Serverthread를 잠시 동안 살아있게 유지하는 더 좋은 방법이 있습니까 (true) {thread. 수면 (100);}?

감사.

도움이 되었습니까?

해결책

ServiceHost에서 Open을 호출하면 들어오는 서비스 요청을 듣기 위해 추가 스레드가 생성됩니다. 이런 식으로 스레드가 실행을 마쳤을 수도 있지만 다른 스레드가 생성되었으며 ServiceHost에서 "Close"라고 부를 때까지 계속 실행됩니다.

귀하의 경우에 스레드를 직접 스폰하는 것은 필요하지 않을 수 있습니다. 애플리케이션의 기본 스레드에서 ServiceHost를 엽니 다. 그런 다음 기본 스레드에서 다른 작업을 수행 할 수 있으며 호스트를 죽일 준비가되면 servicehost.close ()로 전화하십시오.

여기에 내가 찾은 꽤 좋은 설명이 있습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top