2016-04-27 9 views
-2

Wenn ich mehr als 200 000 Datensätze vom Server an den Kunden abrufen ich diese Störung erhalte:erhalte ich diesen Fehler in wcf

The underlying connection was closed: A connection that was expected to be kept alive was closed by the server.

Was ist los hier los ist?

+2

Der Fehler scheint ziemlich klar zu sein - öffnen Sie eine Verbindung für jede DB-Anfrage oder halten Sie eine für lange Zeit am Leben und verwenden Sie sie erneut? –

+0

ohne Ihren Code zu sehen, wäre dies eher rate für uns, aber hier ist eine Idee .. Wenn Sie irgendwelche Verbindungen mit dem erstellen (using (SqlConnection sqlConn = neue SqlConnection)) {} 'zum Beispiel die Verbindung wird entsorgt, wenn Sie versuchen Zugriff auf das sqlConn-Objekt, wenn es außerhalb des Gültigkeitsbereichs ist und die Verbindung nicht global ist, wird es geschlossen usw. Versuchen Sie, uns den Code zu zeigen, wo das aktuelle Problem auftritt, was bedeutet, dass Sie Breakpoints einrichten und den Code mithilfe des Debuggers durchlaufen müssen ... – MethodMan

Antwort

0

Viele Dinge können zu diesem Problem in WCF führen. Der beste Weg zu lösen ist es, Trace-Log hinzuzufügen. Fügen Sie den folgenden Code in Ihre Konfigurationsdatei aktiv die Verfolgung:

<system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel" 
      switchValue="Information, ActivityTracing" 
      propagateActivity="true"> 
     <listeners> 
     <add name="traceListener" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData="e:\path_tolog\WebTrace.svclog" /> <-- Path to the log file 
     </listeners> 
    </source> 
    </sources> 
</system.diagnostics> 
0

Wie andere gesagt haben, ohne Code zu sehen, wir nur vermuten können, aber ich habe ähnliche Probleme gesehen, wenn sie versuchen eine unenumerated Abfrage über WCF senden .

Zum Beispiel, wenn Sie so etwas wie haben (Achtung: Air-Code) dieses ..

var data = ctx.Customers.Where(c => c.CustType == 1); 

... und Sie versuchen, und gibt diese aus einem WCF-Service-Methode, erhalten Sie die Ausnahme erhalten du erwähntest. Dies liegt daran, dass die Abfrage eingerichtet und an WCF gesendet wird, wo sie serialisiert wird, was fehlschlägt, da die Serialisierung versucht, die Abfrage aufzuzählen, nachdem die Verbindung geschlossen wurde.

Die Antwort besteht darin, die Aufzählung der Abfrage zu erzwingen, bevor Sie sie zurückgeben. Sie können dies tun, indem Sie .ToList() am Ende der Abfrage (unter anderem) hinzufügen.

Wie gesagt, ohne einen Code zu sehen, ist dies eine vollständige Vermutung, aber ich hatte die gleiche Ausnahme unter diesen Umständen, also ist es eine Überprüfung wert.

Verwandte Themen