2016-04-16 15 views
0

Meine Lösung enthält zwei Projekte: WCF-Dienste und WCF-Client. Die Reihenfolge des Starts:Warum werden meine * Timeout-Einstellungen ignoriert?

enter image description here

Als ich meinen Dienst manuell starten und später meinen Kunden es funktioniert gut. Aber wenn ich das gleiche durch IDE im Debug-Modus dann Zeit der Zeit bekomme ich die Ausnahme:

Eine nicht behandelte Ausnahme des Typs System.ServiceModel.EndpointNotFoundException in aufgetreten mscorlib.dll

Zusätzliche Informationen: Zuhören auf net.pipe://localhost/ war nicht ausgeführt von jedem Endpunkt, der die Nachricht annehmen könnte. Unter anderen Ursachen kann es durch die falsche Adresse oder Aktion von SOAP verursacht werden. Für weitere Details finden Sie in der Beschreibung von InnerException (, wenn verfügbar ist).

Aber mein Klienten Config -datei enthält Einstellungen Timeout:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /> 
    </startup> 
    <system.serviceModel> 
     <bindings> 
      <netNamedPipeBinding> 
      <binding 
        closeTimeout="00:30:30" 
        openTimeout="00:30:30" 
        receiveTimeout="00:30:30" 
        sendTimeout="00:30:30"/> 
      </netNamedPipeBinding> 
     </bindings> 
     <client> 
      <endpoint name="pipe1" 
        address="net.pipe://localhost" 
        binding="netNamedPipeBinding" 
        contract="ServiceReference1.IContent"/> 

      <endpoint name="pipe2" 
        address="net.pipe://localhost" 
        binding="netNamedPipeBinding" 
        contract="ServiceReference1.IMessages"/> 
     </client> 
    </system.serviceModel> 
</configuration> 

Warum die Ausnahme Zeit Zeit in dem Debug-Modus auftreten?

UPD

Zusätzliche Variante des decission:

#if DEBUG 
      System.Threading.Thread.Sleep(1000); 
#endif 
+0

Ich denke, der Client versucht, zu früh eine Verbindung herzustellen. Sie könnten den Verbindungscode mit einem Wiederholungsmechanismus umgeben (d. H. Warten Sie auf x Millisekunden und versuchen Sie es erneut, wiederholen Sie das y-Mal, lösen Sie die Ausnahme aus, wenn die Verbindung nach dem Versuch nicht erfolgreich ist). – venerik

+0

Wahrscheinlich im Zusammenhang mit [dieser Frage] (http://stackoverflow.com/questions/340521/how-can-i-make-named-pipe-binding-reconnect-automatica-in-wcf). – khlr

+0

, aber die Ausnahme tritt früher als 30 Sekunden auf. –

Antwort

0

Sie sind nicht eigentlich ignoriert, ist es der expected behaviour:

Hinweis: Wenn eine Verbindung zum Service-Endpunkt kann nicht bei alle eingerichtet werden (dh der Dienst ist nicht erreichbar), wirft WCF keine TimeoutException löst stattdessen das Framework eine EndpointNotFoundException - sofort aus.

Ich bin nicht sicher, ob es eine Möglichkeit, um es richtig zu tun ist (zumindest kann ich nichts Standard finden - Time taken to throw EndPointNotFoundException), aber Sie können Ihren eigenen on-error Neuinitialisierung Mechanismus (die einfachste immer schaffen, aber nicht die beste Lösung ist, einfach die EndpointNotFoundException zu fangen und den Client später neu zu initialisieren).

+0

Ich habe UPD Abschnitt hinzugefügt. –

Verwandte Themen