Laden...

[erledigt] WCF - Timeout bei synchronem Aufruf [==> hier: Test-Problem]

Erstellt von inflames2k vor 10 Jahren Letzter Beitrag vor 10 Jahren 917 Views
inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 10 Jahren
[erledigt] WCF - Timeout bei synchronem Aufruf [==> hier: Test-Problem]

Hallo,

ich habe einen WCF-Service auf den ich mit einer Client-Anwendung zugreifen muss. - Die Client-Klasse habe ich mir durch svcutil erstellen lassen.

Rufe ich die Methoden des WCF-Services synchron auf, kommt es immer zu Timeouts, mit "immer" meine ich bei jedem Aufruf. Lediglich wenn ich die Methoden asynchron aufrufe, erhalte ich sofort das Ergebnis.

Woran könnte dies liegen? Braucht ihr evtl. mehr Informationen?

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

6.911 Beiträge seit 2009
vor 10 Jahren

Hallo inflames2k,

das Verhalten ist komisch und insofern ja, mehr Infos werden benötigt.

Welche TimeoutException ist es genau - davon gibts bei WCF ja mehrere. Poste mal den Stacktrace bzw. die komplette Fehlermeldung von so einer.

Lässt sich das Verhalten mit einem kleinem Demo-Projekt nachbilden? Vermutlich aber nicht, denn i.d.R. funktioniert das ja, aber falls doch häng das Projekt an.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

849 Beiträge seit 2006
vor 10 Jahren

Hi, hört sich für mich ersteinmal wie ein Threading Thema an.. aber wie gfoidl schon sagte, näheres kann man erst sagen mit ein wenig code.

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 10 Jahren

Naja... wie soll ich sagen, in der Mittagspause noch einmal drüber nachgedacht und da war der entscheidende Grund da.

Bisher ist es ja so, das der "Service" in einer Testanwendung läuft, welche gleichzeitig den Client beinhaltet. - Da Service und Client synchron im gleichen Thread laufen kommt es zu dieser blockierung. Der Client will ja schließlich verbinden und blockiert damit den Thread.

Sobald ich das ganze in 2 Anwendungen teile, können beide synchron laufen. - Wie ich mir das nach dem Essen auch gedacht habe.

Danke euch beiden dennoch. - Das kommt halt davon wenn man nicht 3 mal über soetwas nachdenkt.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

6.911 Beiträge seit 2009
vor 10 Jahren

Hallo inflames2k,

zur Erklärung warum das so ist.

Da Service und Client synchron im gleichen Thread laufen

So stimmt das nicht ganz exakt.

Der Service(Host) kann zwar im gleichen Thread erstellt worden sein als der Client, aber der im Service zugrunde liegende Listener arbeitet in einem anderen Thread. Ich vermute mal, dass die Test-Anwendung eine mit SynchronisationContext (WinForms, WPF, etc.) ist.

Das Standardverhalten eines WCF-Services ist nun, dass der SynchronisationContext, der beim Instanziieren des Services gefangen wurde, zum Ausführen der Service-Methoden verwendet wird.
Hier heißt das, dass die Service-Methode also im GUI-Thread ausgeführt wird. Da nun der Client synchron im GUI-Thread auf das Ergebnis der Service-Methode wartet kommt es zu einem Deadlock, der sich als Timeout äußert.

Wird das Verhalten des Service so geändert, dass nicht der gefangene SyncContext verwendet wird, so laufen Service und Client in verschiedenen Threads und es kommt zu keinem Deadlock. Dieses Verhalten kann über ServiceBehaviorAttribute.UseSynchronizationContext Property geändert werden - auf false setzen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 10 Jahren

Ja ok hast Recht. - Es ist eine Win Forms - Testanwendung um die Funktionalität zu Testen.

Ich werd das mal anpassen mit dem SyncContext. - Ist unter Umständen sinnvoll.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |