WCFのServiceHost :::スレッドが死んでいる場合でも、風変わり...まだ生きていますか?
-
06-09-2019 - |
質問
ここに新しいメンバー。そのようなきちんとしたコミュニティを見てニースます。
研究のビットの後、私は、プロセス間通信を行うために自分のアプリケーションで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);}
感謝します。
解決
、追加のスレッドは、着信サービス要求をリッスンするために作成されます。このように、あなたのスレッドが実行を終了しているかもしれないが、別のスレッドが作成されている、とあなたがのServiceHostの「閉じる」を呼び出すまで実行を継続します。
これは、スレッド自身をオフに産卵するために、あなたのケースで必要ではないかもしれません。ただ、アプリケーションのメインスレッドであなたのServiceHostを開きます。あなたは、あなたのメインスレッドで他のことを行うには、あなたがホストを殺すために準備ができたら、ちょうどserviceHost.Close()を呼び出すことができます。
ここで私が見つけかなり良い説明があります
http://www.code-magazine.com/article。 aspxの?quickid = 0701041&ページ= 1 の