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
WCF, Server macht Pause?!
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2143

Themenstarter:

WCF, Server macht Pause?!

beantworten | zitieren | melden

Hallo Forum

Bin gerade etwas ratlos.
Ich übertrage per WCF Daten (wenige hundert kB) von einem PC mit Compact Framework zum Server auf einem PC mit normalem Framework. Das dauert ungewöhnlich lange.
Die übertragenen Daten sind schnell am PC, das habe ich mit Wireshark nachgeprüft. Außerdem wird der Konstruktor meiner WCF-Klasse sehr zügig aufgerufen.
Danach passiert ca. 10 Sekunden lang nichts was ich debuggen oder sonst wie ermitteln könnte.
Nach dieser Zeit wird in meine WCF-Methode gesprungen und anschließend ist auch der Aufruf auf dem Client schnell beendet.
In Wireshark sehe ich danach nur noch die in SOAP formatierte Antwort des PCs. Die Daten sind also wirklich bereits alle nach ca. 1 Sekunde übertragen, ich dachte erst vielleicht ist das Netz da irgendwie verstopft.
Auch mit nur wenigen Bytes als Daten ist die Wartezeit da.

Was könnte da während der Wartezeit passieren? Das Demarshalling der Daten kann ja nicht wirklich so lange dauern.
Ich habe außerdem den Client auf einem normalen .NET Framework ausprobiert, da gehts gewohnt fix.
Das ganze habe ich inzwischen bestimmt zig mal getestet, ich schließe also aus dass da irgendwelche zufälligen Hintergrundprozesse den PC verlangsamen.

Was könnte das sonst sein? Der einzige Unterschied ist dass der Client auf CompactFramework läuft. Aber nachdem der Aufruf ja bereits durch ist, sollte ja eigentlich kein Unterschied mehr sein?
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2361

beantworten | zitieren | melden

Hast du den Client, den du unter normalem Framework laufen lassen hast mal auf einen zweit-PC getestet, oder war der Test lediglich auf dem gleichen System?
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
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2143

Themenstarter:

beantworten | zitieren | melden

Auch auf einem anderen. Da war der Aufruf so schnell wie erwartet, deutlich unter 1 s.
private Nachricht | Beiträge des Benutzers
GarlandGreene
myCSharp.de - Member



Dabei seit:
Beiträge: 499
Herkunft: Emmerich, NRW

beantworten | zitieren | melden

ich würd mal das Tracing in der web.config des WCF-Dienstes aktivieren und schauen, wo genau das Ding pausiert.
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2143

Themenstarter:

beantworten | zitieren | melden

Hab ich mit TraceLevel = All gemacht, ist nur etwas verwirrend. Ich schreib mal die aus meiner Sicht relevanten Teile, vielleicht erkennt da jemand was. Ich nehm die Einträge die um die Wartezeit herum stehen.

Start der Übertragung war um etwa xx:xx:07 Uhr (also 7 Sekunden).

Activity: Abhören von...
- 7 Sekunden (ziemlich am Startzeitpunkt): To: Bytes auf Verbindung .... empfangen.
- 18 Sekunden: From: ServiceHost "Server.TestServer" schließen.

Activity: Bytes auf Verbindung .... empfangen
- 7 Sekunden: To: Nachricht "1" wird verarbeitet.
- 7 Sekunden: Aktivitätsgrenze
- 8 Sekunden: To: Nachricht "1" wird verarbeitet.
- 8 Sekunden: Aktivitätsgrenze
- 8 Sekunden: Es wurde eine Nachricht über einen Kanal empfangen.
- 15 Sekunden: Aktivitätsgrenze

Activity: Aktion "http:/tempuri..." verarbeiten
- 8 Sekunden: Es wurde eine Nachricht über einen Kanal empfangen.
- 8 Sekunden: einige Einträge der Art "System.irgendwas wurde geöffnet"
- 8 Sekunden: Eine Nachricht wurde gelesen
- 14 Sekunden: To: "Server.ITestServer.DataUpload" ausführen.
- 14 Sekunden: Aktivitätsgrenze
...
- 15 Sekunden: Eine Nachricht wurde geschrieben (scheint die Antwort gewesen zu sein)


zwischen den 8 und 14 Sekunden steht da nirgends was. Code von mir wird keiner ausgeführt, die aufgerufene Methode ist leer, die macht also gar nichts. Sie wird erst nach der Wartezeit angesprungen.
Erkennt da jemand noch was? Ich blick nicht mehr durch :-(
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2143

Themenstarter:

beantworten | zitieren | melden

Stand der Dinge, für alle die es interessiert.

Ich habe die Daten bisher als byte-Array verschickt. Wenn ich sie stattdessen Base64 codiere und als String verschicke, werden aus 10 Sekunden knapp 2 Sekunden.
Für Erklärungen bin ich nach wie vor offen :-)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von chilic am .
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2361

beantworten | zitieren | melden

Das einzige was ich mir vorstellen könnte ist, das die Byte-Arrays von normalen Framework gesendet sich von denen des CF unterscheiden und das Demarshalling deshalb wirklich länger dauert. Ist aber nur eine Vermutung.
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