2009-04-19 3 views
2

Ich habe zwei WCF-Apps, die über benannte Pipes in eine Richtung kommunizieren. Alles ist nett, bis auf eine Sache: Normalerweise dauert der Anfrage/Antwort-Zyklus Null (marginale) Zeit. Wenn es jedoch eine Zeitspanne von etwa einer halben Minute ohne Kommunikation gibt, erhöht sich die Anfrage/Antwort auf ~ 300-500 ms.NetNamedPipe: unterschiedliche Antwortzeit bei Kommunikation im Leerlauf

Ich schaute mich im Internet um und ich kam auf die Idee, einen Herzschlag/Ping-Mechanismus zu verwenden, um den Kommunikationskanal beschäftigt zu halten. Bei Versuch und Irrtum habe ich festgestellt, dass bei einer Anfrage alle 10 Sekunden die Antwortzeiten niedrig bleiben. Beginnend in Intervallen von etwa 15 Sekunden beginnen die "Hiccup" -Reaktionszeiten zu erscheinen.

Jetzt frage ich mich, woher dieses Phänomen stammt. Ich habe versucht, alle möglichen Timeouts auf beiden Seiten auf> 1 Minute einzustellen, aber das hat nicht geholfen.

Kann mir jemand erklären, was dort vor sich geht?

+0

Ich habe das gleiche Problem. Zuerst hatte ich den Verdacht, zwischengespeichert zu werden, aber neue Daten werden sofort zurückgegeben, wenn sie innerhalb von 15 Sekunden nach einem vorherigen Anruf beim Dienst angefordert werden. –

Antwort

0

Ist es möglich, dass der Leerlaufprozess auf Festplatte ausgelagert wird? Wenn Sie die Prozesse an beiden Enden beschäftigt halten, aber nicht die Verbindung beschäftigt machen, passiert es noch?

Das mag es nicht sein, aber es ist vielleicht einen Versuch wert.

+0

Ich versuchte es und fügte beiden Prozessen einen Thread hinzu, der einige dumme Berechnungen vornahm. Die CPU-Auslastung blieb für beide bei 0%, aber ich denke, es war immer noch genug, um sie davon abzuhalten, ausgelagert zu werden. Leider bleibt das beschriebene Problem unberührt. Es war aber definitiv einen Versuch wert. Danke für den Vorschlag- –