Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] WCF - Timeout bei synchronem Aufruf [==> hier: Test-Problem]
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

Themenstarter:

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

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inflames2k am .
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7561
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von unconnected am .
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

Themenstarter:

beantworten | zitieren | melden

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 | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7561
Herkunft: Waidring

beantworten | zitieren | melden

Hallo inflames2k,

zur Erklärung warum das so ist.
Zitat
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!"
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

Themenstarter:

beantworten | zitieren | melden

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 | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers