In questi giorni, sono cominciati ad apparire alcuni post che mostrano come utilizzare il WSDualHttpBinding con la Beta 2 di Silverlight. Tale binding infatti è supportato a partire dall'ultima release, grazie alla presenza di due assembly, System.ServiceModel.PollingDuplex.dll, uno per la parte client e l'altro per la parte server.
Ma la domanda che mi sono posto, subito dopo i primi esercizi per vedere come trarne vantaggio è la seguente:
Assodato che questa tecnica fa uso di Polling (e tutti voi sapete quanto dannosa può essere per il webserver) per quale motivo dovrei ricorrere a tale binding anzichè implementare manualmente (e molto più semplicemente...) la medesima tecnica?
In effetti un reale vantaggio esiste ed è insito nella modalità con cui il polling viene effettuato. A differenza di quello che accade con un polling manuale, nel quale il client rimane sostanzialmente disconnesso per la maggior parte del tempo, e si accorge della presenza di informazioni solo allo scadere di un timeout, con il Polling di WCF quello che avviene è che il client si connette al server e rimane in questo stato per tutta la durata del timeout salvo eventualmente disconnettersi nel momento in cui arrivano informazioni utili.
La differenza che a prima vista pare banale è invece sostanziale. Infatti in questo modo si aggira il problema tipico del polling e cioè la latenza dei messaggi che costringono spesso a ridurre il più possibile l'intervallo tra due diverse chiamate. Con WCF potremmo avere un intervallo di poll anche molto ampio, ma continueremo ad ottenere in tempo reale i risultati dal server che si occuperà di chiudere la nostra connessione e notificarci l'arrivo nello stesso istante in cui i dati divengono disponibili.
A giudicare dal formato del messaggio SOAP, questa tecnica rispetta lo standard OASIS WS-MakeConnection, descritto ampiamente in questo documento. Quello che non mi è dato sapere è il livello di compatibilità dell'implementazione di Silverlight 2.0 con questo standard.
La tecnica quindi appare davvero interessante e apre la strada ad applicazioni in vero realtime anche per il web. Attenzione però che la licenza Go-Live di Silverlight 2.0 non si applica a questo assembly perciò dovremmo aspettare la RTM per poterlo portare in produzione (evidentemente si attendono modifiche importanti).