這是一個新成員。很高興看到這樣一個整潔的社區。WCF :: ServiceHost:奇怪...即使線程死了仍然活着?
經過一番研究,我決定在我的應用程序中使用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活着然後一段時間(真){線程。休眠狀態(100);}?
謝謝。
這是正確的答案......我出票一天壽;) – TheSoftwareJedi 2009-05-31 20:20:47
那麼,什麼是告訴它不是就像看起來那樣直截了當。 我jut寫了一個簡單的程序,沒有產生一個線程。在這個簡單的過程中,我創建了ServiceHost和Opened()它。之後,我創建了一個連接到服務主機的客戶端。客戶端失敗(我猜它是死鎖)。 如果我在單獨的線程上創建ServiceHost(即使線程退出),客戶端調用將成功。 那麼,如果Open()已經產生了處理線程,爲什麼客戶端調用會在同一個線程上失敗呢? – Futurist 2009-05-31 20:34:02
你應該可以做到這一點,我只是寫了一個小測試程序,做你所描述和它的工作。你得到的錯誤是什麼?這可能是因爲你的app.config system.serviceModel部分沒有配置客戶端。 – 2009-05-31 20:59:24