Benutzer mit den meisten Antworten
WCF Callback Aufrufe dauern z.T. mehrere Minuten

Frage
-
Hallo,
wir verwenden bei der Client-Server Kommunikation für die Benachrichtigung WCF ServiceContracts, die als Callback markiert sind.
Die Methoden des Contracts sind mit dem OperationContract(IsOneWay=true, Name="MyName") versehen. Es wird das TCP-Binding verwendet.
Hin und wieder passiert es, dass die Aufrufe an dem OperationContract ausgeführt werden, diese beim Client jedoch mit einer Verzögerung von mehreren Minuten eintreffen.
Die zu benachrichtigenden Clients werden sequentiell aus einem Thread aufgerufen. Ist die Verbindung zu einigen Clients schlecht (Bandbreite reduziert auf 2.000 kpbs), tritt dieser Effekt häufiger auf, jedoch bei den Clients mit uneingeschränkter Bandbreite.
Da durch das Attribut "IsOneWay" nicht auf die Antwort des Clients gewartet wird(msdn), bin ich ein bisschen verwundert.
Hat noch jemand bitte einen Hinweis für mich?VG,
Christian
Antworten
-
Hi Christian,
auch, wenn "IsOneWay" auf true gesetzt ist, wird mindestens auf den erfolgreichen Abschluss des Starts des Rückrufs gewartet, nicht auf eine möglicherweise Antwort des Clients. Damit kann es bei synchronem Aufruf zu längeren Wartezeiten der "hinteren / letzten" Aufrufe kommen. Ich würde jeden Rückruf in einem separaten thread ausführen und ggf. die Anzahl der gleichzeitig laufenden Threads über einen Pool einschränken.--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 16. Juli 2018 07:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 30. Juli 2018 13:41
Alle Antworten
-
Hi Christian,
auch, wenn "IsOneWay" auf true gesetzt ist, wird mindestens auf den erfolgreichen Abschluss des Starts des Rückrufs gewartet, nicht auf eine möglicherweise Antwort des Clients. Damit kann es bei synchronem Aufruf zu längeren Wartezeiten der "hinteren / letzten" Aufrufe kommen. Ich würde jeden Rückruf in einem separaten thread ausführen und ggf. die Anzahl der gleichzeitig laufenden Threads über einen Pool einschränken.--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 16. Juli 2018 07:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 30. Juli 2018 13:41