2013-03-21 11 views
5

Widziałem podobne pytania tutaj, ale nie mogłem znaleźć odpowiedzi. mam aplikację, która używa WCF do otwierania połączenia z adresem zdalnym, czasami gdy zabijam aplikację od menedżera zadań lub aplikacja nieoczekiwanie zamyka połączenie, a następnie po ponownym uruchomieniu aplikacji otrzymuję wyjątek informujący mnie, że jest już słuchacz na tym porcie.Połączenia WCF tcp pozostają otwarte po zabiciu procesu

kilka pytań:

  1. dlaczego takie połączenia pozostają otwarte po tym jak zabić proces?
  2. Jak mogę zamknąć te połączenia, gdy proces kończy się nieprzyzwoicie?
  3. Jak mogę zamknąć połączenia, zanim spróbuję utworzyć nowy?

strona 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

mógłbyś podać jakiś kod po stronie serwera – Alex

+0

dodanego kodu – meirrav

Odpowiedz

0

Można spróbować dodać obsługi zdarzeń Channel_Closed i używać Abort() metoda, aby zmusić go do dysponowania.

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

ll spróbować, czy wiesz, dlaczego połączenie pozostaje otwarta? – meirrav

+0

@meirrav czy to usługa Windows self-host? – Alex

+0

to self-host – meirrav

Powiązane problemy