Laden...

Timeout Problem im WCF-Umfeld

Erstellt von UndercoverDeveloper vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.536 Views
U
UndercoverDeveloper Themenstarter:in
16 Beiträge seit 2015
vor 9 Jahren
Timeout Problem im WCF-Umfeld

Hallo zusammen,

wir haben ein Problem im WCF-Umfeld mit einer .NET-Anwendung (Windows Forms), die wir programmieren und betreuen. Der Sachverhalt ist etwas komplizierter, aber ich hoffe es verständlich erklären zu können.

Die Anwendung ist Multiuser-fähig und es arbeiten gleichzeitig etwa 5-10 Benutzer damit. Alle Benutzer starten die Anwendung über die gleiche EXE-Datei, die auf einem für alle erreichbaren Netzlaufwerk liegt. Verbunden sind die einzelnen gestarteten Anwendungen (Clients) mit einem auf WCF basierenden WebService, in den sich jeder gestartete Client über eine „SignIn“-Methode „einloggt“ und der anschließend jeden einzelnen Client informiert sich selbst zu aktualisieren, wenn die Information über eine Datensatz-Änderung den WebService erreicht.

Der Webservice selbst führt keine größeren Aktionen durch, sondern ist nur dafür zuständig „Aktualisierungs-Pings“ an die eingeloggten Clients zu senden (über CallBacks) und eine Liste der Benutzer zu verwalten, die jeweils einen Client gestartet haben.

Dies hat mehrere Monate nahezu reibungslos funktioniert. Seit einiger Zeit kommt es beim Aufruf von Funktionen des WebServices durch bestimmte gestartete Instanzen der Anwendung zu folgendem Fehler:

Fehlermeldung:
Dieser an
>
gesendete Anforderungsvorgang hat innerhalb des konfigurierten Zeitlimits (00:00:59.9843743) keine Antwort empfangen. Der diesem Vorgang zugewiesene Zeitraum ist möglicherweise ein Teil eines längeren Zeitlimits. Mögliche Ursachen: Der Dienst verarbeitet den Vorgang noch, oder der Dienst konnte keine Antwortnachricht senden. Erwägen Sie, das Zeitlimit für den Vorgang zu erhöhen (indem Sie den Kanal/Proxy in IContextChannel umwandeln und die OperationTimeout-Eigenschaft festlegen), und stellen Sie sicher, dass der Dienst eine Verbindung mit dem Client herstellen kann.

StackTrace:

Fehlermeldung:
Server stack trace:
bei System.ServiceModel.Dispatcher.DuplexChannelBinder.SyncDuplexRequest.WaitForReply(TimeSpan timeout)
bei System.ServiceModel.Dispatcher.DuplexChannelBinder.Request(Message message, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
bei MyCompany.MyProgram.Windows.BusinessLogic.SignIn(Boolean forced) in C:\Projekte\MyCompany\MyProgram\Windows\BusinessLogic\1.0\BusinessLogic.cs:Zeile 193.

Der Ablauf an der Stelle, an der der Fehler auftritt, ist folgender:
Client ruft die SignIn() Methode des WebServices auf -> WebService aktualisiert die Login-Liste und sendet ein CallBack an alle Clients -> Client holt sich die aktualisierte Loginliste.

Der Fehler tritt allerdings nicht bei jedem Anwender auf sondern nur in einer Wechselwirkung mit einem anderen Anwender, wenn dieser auch den Client geöffnet hat. Anscheinend sind in bisher jedem Fall zwei Benutzer betroffen, die direkt in einer Abteilung zusammenarbeiten. Jeder hat dabei seine eigene Workstation.

Hat also Kollege A eine Instanz der Anwendung geöffnet bekommt Kollege B in der gleichen Abteilung den Fehler, aber jeder andere aus anderen Abteilungen kann ohne Probleme mit dem WebService kommunizieren. Schließt Kollege A seine Instanz der Anwendung kann Kollege B dann wieder mit dem WebService kommunizieren. Die Useraccounts sind innerhalb der Anwendung aber nicht einzelnen Abteilungen zugeordnet und die Abteilung hat daher auch keine Auswirkung auf das Verhalten des Codes.

Wir sind bei der Fehlersuche bereits auf das Problem gestoßen das CallBacks deadlocks verursachen können (https://msdn.microsoft.com/en-us/magazine/cc163537.aspx#S4).

Allerdings helfen die möglichen Lösungen nicht und erklären auch nicht das ganze Problem (insbesondere nicht die Wechselwirkung bei den Anwendern)
Wegen der Wechselwirkung haben wir auf ein Netzwerkproblem geschlossen, da sich am Code auch nichts geändert hat und das Problem erst seit kurzem auftritt. Dazu haben wir aber auch keine Idee wie wir das eingrenzen sollen.

Ich spare es mir erstmal Code zu posten da der Fehler nicht so offensichtlich ist und unserer Meinung nach nicht direkt im Code zu sehen ist. Falls ich euch konkret mit weiteren Informationen versorgen kann dann sagt einfach Bescheid.

Habt ihr eine Idee? Wir nehmen gerne jeden Einfall entgegen auch wenn es keine direkte Fehlerlösung ist.

Viele Grüße

16.833 Beiträge seit 2008
vor 9 Jahren

Ja, spricht für einen Deadlock.
Aber da kann man jetzt mehr oder weniger nur mit der Glaskugel helfen, da man weder Code noch Anwendung kennt.

Dass es nun immer zwei Kollegen aus einer Anwendung trifft ist entweder ein Programmierfehler oder ein massiver Zufall.