2012-01-23 12 views
6

ho un self hosted servizio WCF utilizzando il protocollo TCP duplex netta callbackWcf callback tcp duplex rete solo 1 modo violata

sul lato client, ascolto su evento in errore su Canale e ChennelFactory. quando il canale è in errore, il client ricrea il canale e ri-abbona.

sul lato server, memorizzo il canale di richiamata e un negozio un riferimento del canale chiamando lo OperationContext.Current.Channel in modo da poter ascoltare l'evento guasto e chiuso su questo canale. In caso di errore, il server rimuoverà quell'iscritto.

Questo è il lavoro il più delle volte fino a poco tempo ho osservato un comportamento imprevisto: il canale di callback viene violata sul server, ma il canale sembra a posto sul lato client, questo porta al cliente non sottoscrivere nuovamente mentre il server già rimosso quell'abbonato e il cliente non riceveranno alcuna richiamata.

Ho pensato a una comunicazione duplex, se un capo ha rilevato un errore, il canale duplex dovrebbe essere guasto.

sessione affidabile è abilitato e il timeout è molto lungo (2 ore) (forse questo può conduce al cliente finale colpa non rilevamento abbastanza veloce?)

Qualcuno potrebbe spiegare perché questo sta accadendo?

Un'altra domanda sarebbe il motivo per cui è comunque colpa? Ho 40 client collegati ma il server avrebbe rilevato un client casuale guasto in un momento casuale.

risposta

2

Non sono sicuro del motivo. Ma suppongo che un canale possa fallire in un modo in cui l'evento guasto non raggiunge mai il client o il server. C'è anche il caso di considerare quando un client si arresta bruscamente.

In ogni caso Nel mio progetto ho concluso che basarsi su eventi di canale guasti non è abbastanza affidabile. Quindi ho regolarmente eseguito il ping di tutti gli utenti dal server attraverso il canale di richiamata. Se il client non risponde entro il limite di timeout, viene rimosso dall'elenco degli iscritti.

Dal lato client è possibile anche rilevare le eccezioni di timeout e ricreare il canale se necessario.

1

Timeout lunghi non sono la colpa, che sono sicuro perché mi trovo in una situazione identica e ho riscontrato il problema anche con brevi timeout.

La gestione dei canali guasti sul lato assistenza è semplice. Puoi provare/aggirare la callback e gestirla solo quando ne hai effettivamente bisogno.

Sul lato client, al momento non vedo alcun modo ragionevole di farlo. Speriamo che qualcuno possa proporre qualcosa qui ...

Problemi correlati