2013-03-21 25 views
5

ここで同様の質問がありましたが、回答が見つかりませんでした。私はWCFを使ってリモートアドレスへの接続を開くアプリケーションを持っています。タスクマネージャーからアプリケーションを削除すると、アプリケーションが正常に終了し、接続が開いたままになってしまい、アプリケーションを再起動したときに、このポート上のリスナープロセスが終了するとWCF tcp接続が開いたままになる

いくつかの質問:私は、プロセスを強制終了した後

  1. は、なぜこのような接続開いたまま?
  2. プロセスが非正常に終了したときにこの接続を閉じるにはどうすればよいですか?
  3. 新しい接続を作成する前に接続を閉じるにはどうすればよいですか?

serer側:

var url = Config.GetRemoteServerUrl(); 
var binding = new NetTcpBinding(); 

binding.Security.Mode = SecurityMode.None; 
binding.ReliableSession.Enabled = Config.RelaiableSession; 
binding.ReliableSession.InactivityTimeout = TimeSpan.MaxValue; 
binding.MaxConnections = Config.MaxConcurrentSessions; 
binding.ReaderQuotas.MaxArrayLength = Config.ReaderQuotasMaxArrayLength; 
binding.MaxReceivedMessageSize = Config.MaxReceivedMessageSize; 
binding.SendTimeout = new TimeSpan(0,0, 0, 0,Config.SendTimeout); 
binding.OpenTimeout = new TimeSpan(0,0, 0, 0,Config.OpenTimeout); 

host = new ServiceHost(ServerFacade.Instance, new Uri[] { new Uri(url) }); 

host.AddServiceEndpoint(typeof(ITSOServiceContract), binding, url); 

host.Open(); 

serverFacade = host.SingletonInstance as IServerFacade; 
+0

あなたには、いくつかのサーバー側のコードを提供することができ – Alex

+0

は、いくつかのコードを追加 – meirrav

答えて

0

あなたはChannel_Closedイベントハンドラを追加し、処分することを強制的に中止()メソッドを使用しようとすることができます。

OperationContext.Current.Channel.Closed += channelClosed; 


    void Channel_Closed(object sender, EventArgs e) 
    { 
     var success = false; 
     try 
     {   
      proxy.Close(); 
      success = true; 
     } 
     finally 
     { 
      if (!success) proxy.Abort();   
     } 
    } 
+0

はそれを試して、接続を開いたままに、なぜあなたは知っていますでしょうか? – meirrav

+0

@meirravは自己ホストのWindowsサービスですか? – Alex

+0

それは自己ホストです – meirrav

関連する問題