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を維持するためのより良い方法があります。睡眠(100);}

感謝します。

役に立ちましたか?

解決

あなたがのServiceHostでOpenを呼び出すと、

、追加のスレッドは、着信サービス要求をリッスンするために作成されます。このように、あなたのスレッドが実行を終了しているかもしれないが、別のスレッドが作成されている、とあなたがのServiceHostの「閉じる」を呼び出すまで実行を継続します。

これは、スレッド自身をオフに産卵するために、あなたのケースで必要ではないかもしれません。ただ、アプリケーションのメインスレッドであなたのServiceHostを開きます。あなたは、あなたのメインスレッドで他のことを行うには、あなたがホストを殺すために準備ができたら、ちょうどserviceHost.Close()を呼び出すことができます。

ここで私が見つけかなり良い説明があります

http://www.code-magazine.com/article。 aspxの?quickid = 0701041&ページ= 1

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top