2013-03-21 17 views
5

Ich habe ähnliche Fragen hier, konnte aber keine Antwort finden. Ich habe eine App, die WCF verwendet, um eine Verbindung zu Remote-Adresse zu öffnen, manchmal, wenn ich die App aus dem Task-Manager kille oder die App nicht ordnungsgemäß geschlossen bleibt die Verbindung geöffnet und wenn ich meine App neu starte, bekomme ich eine Ausnahme ein Listener an diesem Port.WCF TCP-Verbindungen bleiben offen, wenn der Prozess beendet wird

paar Fragen:

  1. warum solche Verbindungen offen bleiben, nachdem ich den Prozess zu beenden?
  2. Wie kann ich diese Verbindungen schließen, wenn der Prozess nicht ordnungsgemäß beendet wird?
  3. wie kann ich die verbindungen schließen, bevor ich versuche, eine neue zu erstellen?

serer Seite:

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

Sie einig serverseitigen Code liefern können – Alex

+0

einige Codes hinzugefügt – meirrav

Antwort

0

Sie können versuchen, Channel_Closed Event-Handler und verwenden Abort() -Methode, um es zu zwingen zu entsorgen hinzuzufügen.

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

es versuchen würde, wissen Sie, warum die Verbindung offen bleibt? – meirrav

+0

@meirrav ist es Windows-Dienst von Selbst-Host? – Alex

+0

ist es selbst-host – meirrav

Verwandte Themen