J'ai un service Windows qui enregistre les lectures de vitesse d'un pistolet radar à une base de données. De plus, j'ai fait du service un serveur WCF. J'ai un formulaire et un client CF qui s'abonne au service et est rappelé chaque fois qu'il y a une lecture qui satisfait certains critères.Contrat de rappel de longue durée via le canal duplex WCF - modèles de conception alternatifs?
Cela fonctionne en principe, mais après un certain temps, le canal expire. Il semble qu'il y ait quelques problèmes fondamentaux avec des connexions à long terme (voir http://blogs.msdn.com/drnick/archive/2007/11/05/custom-transport-retry-logic.aspx) et un rappel HTTP duplex peut ne pas être la bonne solution. Existe-t-il d'autres façons de réaliser un modèle de publication/abonnement avec WCF? Edit: Même avec un timeout de 2 heures, le canal est éventuellement compromis. Je reçois cette erreur:
L'opération 'SignalSpeedData' n'a pas pu aboutir car la chaîne de session a expiré en attendant de recevoir un message. Pour augmenter le délai, définissez la propriété receiveTimeout sur la liaison dans votre fichier de configuration ou définissez directement la propriété ReceiveTimeout sur la liaison.
Cela s'est passé 15 minutes après le dernier appel réussi. Je me demande si au lieu de garder la session ouverte, il est possible de rétablir une nouvelle session pour chaque appel.
Si vous voulez dire une session fiable - je l'utilise déjà et j'ai réglé le délai d'inactivité à 2 heures. – cdonner
Ainsi, RS est supposé envoyer des messages d'infrastructure après votre délai d'inactivité. Malheureusement, il ne le fait pas dans la dernière version du cadre. Si vous envoyez un message "heartbeat" toutes les 20 minutes environ, il devrait prendre soin du problème. Il y a aussi un autre paramètre que je devrai regarder demain. – Steve
Cher Steve, cdonner, Quelle était la solution actuelle? Les messages de pulsation ne me semblent pas agréables et je préférerais un paramètre de configuration. –