Possiedo un servizio Windows che registra le letture della velocità da una pistola radar a un database. Inoltre, ho reso il servizio un server WCF. Ho un modulo e un client CF che si iscrivono al servizio e vengono richiamati ogni volta che c'è una lettura che soddisfa determinati criteri.Contratto callback a esecuzione prolungata tramite canale duplex WCF - schemi di progettazione alternativi?
Questo funziona in linea di principio, ma dopo qualche tempo il canale scade. Sembra che ci siano alcuni problemi fondamentali con connessioni di lunga durata (vedere http://blogs.msdn.com/drnick/archive/2007/11/05/custom-transport-retry-logic.aspx) e una richiamata HTTP duplex potrebbe non essere la soluzione giusta. Ci sono altri modi in cui posso realizzare un modello di pubblicazione/sottoscrizione con WCF?
Modifica: anche con un timeout di 2 ore il canale viene infine compromesso. Viene visualizzato questo errore:
L'operazione 'SignalSpeedData' non può essere completata perché il canale di sessione è scaduto in attesa di ricevere un messaggio. Per aumentare il timeout, impostare la proprietà receiveTimeout sull'associazione nel file di configurazione o impostare direttamente la proprietà ReceiveTimeout sul Binding.
Questo è successo 15 minuti dopo l'ultima chiamata riuscita. Mi chiedo se invece di mantenere aperta la sessione, è possibile ristabilire una nuova sessione per ogni chiamata.
Se si intende una sessione affidabile, lo sto già utilizzando e ho impostato il timeout di inattività a 2 ore. – cdonner
Quindi, "si suppone" che RS invii i messaggi di infrastruttura dopo il timeout di inattività. Purtroppo non è nell'ultima versione del framework. Se invii un messaggio "heartbeat" ogni 20 minuti circa, dovrebbe occuparsi del problema. C'è anche un'altra impostazione che dovrò cercare domani. – Steve
Caro Steve, cdonner, Qual era la soluzione? I messaggi heartbeat non mi sembrano carini e preferirei alcuni parametri di configurazione. –