Frage

Wir haben sehr seltsames Problem, ein unsere Anwendungen kontinuierlich Server abfragt von .NET Remoting verwenden, und alle 100 Sekunden die Anwendung für eine kurze Dauer nicht mehr abfragen und dann erneut den Vorgang. Das Problem auf einem Client und nicht auf dem Server, weil Anwendungen abfragt tatsächlich mehrere Server in der gleichen Zeit und stoppt Daten aus alle von ihnen in der gleichen Zeit zu empfangen.

War es hilfreich?

Lösung

Ich habe dieses Verhalten noch nie gesehen und leider ist es eine vage genug Szenario Ich denke, Sie eine harte Zeit, jemanden zu finden, auf diesem Board haben werden, die das Problem aufgetreten ist. Es ist wahrscheinlich, speziell für Ihre Anwendung.

Ich denke, es gibt ein paar Untersuchungen Sie tun können Sie das Problem eingrenzen zu helfen.

  1. Sie fest, ob es der Client oder Server ist, der tatsächlich ein Abwürgen wird. Wenn Sie Probleme Bestimmung dieses haben, versuchen Sie einen Paketfilter zu installieren und überwachen den Verkehr zu sehen, wer die letzten Daten gesendet. Sie werden wahrscheinlich nicht in der Lage sein, die binären Daten zu lesen, aber zumindest werden Sie ein Gefühl dafür, wer hinter hinkt.
  2. Wenn Sie herausfinden, ob es der Client oder Server verursacht die Verzögerung ist, versuchen, in die Anwendung zu debuggen und einen Haltepunkt, wo der Hang auftritt. Dies sollten Sie genügend Details geben, das Problem zu helfen, die Spur zu kommen. Oder zumindest fragen, um eine definierte Frage auf SO.

Andere Tipps

100 Sekunden wird ein weggeben Nummer wie es das Standard-Timeout für einen webrequest in .Net ist.

Ich habe in der Vergangenheit gesehen, dass das PSI (Project Server-Schnittstelle in Microsoft Project) hat noch keinen Timeout außer Kraft setzen und so wurde die Standardeinstellung von 100 Sekunden angelegt und würde alles, um es länger im Gespräch beenden, als diese Zeit.

Haben Sie den Zugriff auf den gesamten Code und sind Sie sicher, dass Sie haben Timeouts festgelegt, wo anwendbar, so dass alle Standardwerte werden nicht ohne Ihr Wissen angewendet werden?

Wie wird die Anwendung codiert die kontinuierliche Abfrage zu implementieren? Ist es in einer Endlosschleife? oder eine Schleife mit einem Thread.Sleep? oder ist es auf einem Timer?

Es wäre zunächst nützlich sein, um festzustellen, ob Ihr System diesen „Trigger“ wird die Ausführung in Ihrem Code, wenn Sie es erwarten, oder wenn es ist, und der Remoteserver reagiert nicht ... so ...

Wenn Sie dieses Problem in einer Entwicklungsumgebung nicht reproduzieren können, wo Sie es debuggen können, dann, wenn Sie können, schlage ich vor, Sie Code zu dieser Schleife fügen in einer Protokolldatei zu schreiben (oder einem anderen Persistenzmechanismus) jedes Mal, wenn sein „sollte“ untersuchen, was Bedingungen verwendet es, um zu entscheiden, ob den Remoteserver oder nicht, abzufragen und dann diese Protokolle überprüfen, wenn das Problem erneut auftritt ...

Wenn Sie das gleiche in Ihrem Server-Remote tun können, aufzuzeichnen, wenn der Server eine Remoteanfrage empfängt, würde dies auch helfen ...

... und oh ja, nur ein Gedanke, (I don t wissen, wie Sie diese codiert haben ...), aber wenn Sie einen separaten Thread in Client verwenden, die Remote Anfrage auszustellen, und der Kanal wird registriert, und nicht registrierte auf diesem separaten Thread, stellen Sie sicher, dass Sie die Anforderungen sind Konfliktlösungs, weil Sie den gleichen Port zweimal auf der gleichen Maschine zur gleichen Zeit nicht registrieren kann ... (Obwohl dies wahrscheinlich eine Ausnahme in Ihrem Client ausgelöst, wenn dies das Problem ist)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top