4

私は次のようにネットtcpWCFサービスを持っています

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
    public class AVService : IAVService
    {
        static int _numberofInst = 0;
        public AVService()
        {
            ++_numberofInst;
            Console.WriteLine("Number of instances "+_numberofInst);
        }
        ~AVService()
        {
            --_numberofInst;
            Console.WriteLine("Number of instances " + _numberofInst);
        }
        public void Foo(){}
    }

次のようにクライアント側でオブジェクトを作成する場合

AVService client = new AVService();
client.Foo();

コンストラクターが呼び出されますが、close mehotdを呼び出さずにクライアントアプリケーションを閉じると、デストラクタが呼び出されませんか?なぜ?これは、サービスオブジェクトがサーバー上で引き続き機能することを意味しますか?

4

1 に答える 1

3

はい-クライアントを明示的に破棄しない場合、サーバーはしばらくの間「ハングアラウンド」します(PerSessionモードを指定したため)。

最終的にタイムアウトになり(InactivityTimeoutバインディング構成の設定で指定)、破棄されます。ただし、これには時間がかかる場合があります(設定によっては、数分から数時間かかります)。

<bindings>
   <netTcpBinding>
      <binding name="NetTcp_Reliable" receiveTimeout="00:20:00">
         <reliableSession enabled="true" ordered="false" 
                          inactivityTimeout="00:15:00" />
      </binding>
   </netTcpBinding>
</bindings>

したがって、アプリを閉じる前に常にクライアントを破棄することをお勧めします

于 2009-06-16T10:24:17.387 に答える