Ich habe einen Windows-Dienst, der Geschwindigkeitsmesswerte von einer Radarpistole zu einer Datenbank protokolliert. Außerdem habe ich den Service zu einem WCF-Server gemacht. Ich habe einen Forms-Client und einen CF-Client, die den Dienst abonnieren und immer dann zurückgerufen werden, wenn ein Messwert vorliegt, der bestimmte Kriterien erfüllt.
Das funktioniert im Prinzip, aber nach einiger Zeit läuft der Kanal ab. Es scheint, dass es einige grundlegende Probleme mit lang laufenden Verbindungen gibt (vgl Ссылка ) und ein Duplex-HTTP-Callback möglicherweise nicht die richtige Lösung. Gibt es noch andere Möglichkeiten, ein Veröffentlichungs- / Abonnementmuster mit WCF zu realisieren?
Edit: Selbst bei einem 2-Stunden-Timeout ist der Kanal eventuell kompromittiert. Ich bekomme diesen Fehler:
Die Operation 'SignalSpeedData' konnte nicht abgeschlossen werden, da der sessionvolle Kanal eine Zeitüberschreitung hatte und auf den Empfang einer Nachricht wartete. Um das Zeitlimit zu erhöhen, legen Sie in der Konfigurationsdatei die Eigenschaft receiveTimeout für die Bindung fest, oder legen Sie die Eigenschaft ReceiveTimeout für die Bindung direkt fest.
Dies passierte 15 Minuten nach dem letzten erfolgreichen Anruf. Ich frage mich, ob, anstatt die Sitzung offen zu halten, es möglich ist, für jeden Anruf eine neue Sitzung wiederherzustellen.
Zuverlässige Nachrichtenübertragung wird sich um Ihre Bedürfnisse kümmern. Der Kanal wird wiederhergestellt, wenn ein Problem auftritt. WSDualHTTPBinding stellt dies für die http-Bindung bereit, und es gibt auch eine tcp-Bindung, die dies ermöglicht. Wenn Sie sich auf demselben Computer befinden, bietet die Named Pipe-Bindung dies standardmäßig.
Tags und Links wcf design-patterns publish-subscribe duplex