Con risposta Channel su netTcpBinding

  • venerdì 3 febbraio 2012 15:35
     
     

    Ciao a tutti,

    ho fatto un servizio WCF che conta il numero dei client commessi, il cui binding è netTcpBinding che esegue una callback. [ServiceContract(Namespace = "Silverlight", CallbackContract = typeof(IDuplexClient))]

    Il client sottoscrive l'interfaccia: proxy.ShowMessageReceived += new EventHandler<ShowMessageReceivedEventArgs>(proxy_ShowMessageReceived); e valorizza il numero dei client connessi.

    Il tutto funziona ma avrei un paio di domande:

    1)  Se non sbaglio viene creato un canale tra server e client tipo "cordone ombelicale". Questo quanto è pesante per il server, all'umentare del numero dei client che effettuano una cosa simile?

    2) Io dichiaro una variabile a livello di classe di tipo List<T> e la incremento ad ogni client connesso, tale variabile mi viene incrementata. Io mi aspetterei di avere tale variabile vuota ad ogni connessione client ed invece la trovo valorizzata. Come mai?

    Grazie anticipate

Tutte le risposte

  • sabato 4 febbraio 2012 00:25
     
     

    ciao

    1) no, non cambia niente per il server perchè la comunicazione è duplex

    2) la variabile la dichiari nel client o nel server?

    come è impostato il servicebehavior?

    è per caso statica?


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     
  • sabato 4 febbraio 2012 10:58
     
     Con risposta

    Ciao Pengo11,

    You wrote on 03/02/2012 :

    1)  Se non sbaglio viene creato un canale tra server e client tipo "cordone ombelicale". Questo quanto è pesante per il server, all'umentare del numero dei client che effettuano una cosa simile?

    dipende molto da cosa significa "aumentare" quando parli di numero di client, se parliamo di decine non vedo nessun problema se parliamo di centinaia o più allora la cosa è tutto tranne che indolore perchè il server ovviamente per mantenere il "cordone" (scelta di parola mai fu più esatta :-) ) deve mantenere un concetto di "sessione"...cosa che ovviamente pesa "inutilmente" sulle risorse server side se paragonato con un server stateless. In duplex channel ha anche tutta una serie di limitazioni se devi scalare orizzontalmente quindi passare da una singole macchina server a più macchine in balancing perchè, ovviamente, si basa sul concetto di affinity.

    se la IList<> la dichiari server side direi che ho risposto anche a quella :-)

    .m


    --
    blog @ //milestone.topics.it
    • Contrassegnato come risposta Pengo11 lunedì 6 febbraio 2012 09:14
    •  
  • domenica 5 febbraio 2012 10:33
     
     

    Grazie per le risposte!

    il mio problema è che da server WCF, dovrò controllare il numero dei client Silverlight5 collegati e da MSDN vedo che gli unici modi per avere un ritorno dal server WCF sono  netTcpBinding o pollingDuplexHttpBinding.

    Il numero dei client potrebbero essere qualche centinaio direi. Se come dici Mauro la cosa ha un notevole costo, il secondo binding potrebbe migliorare le cose (anche in relazione alla scalabilità)? 

    GRAZIE 

  • domenica 5 febbraio 2012 11:31
     
     Con risposta

    Pengo11 wrote:

    il mio problema è che da server WCF, dovrò controllare il numero dei client Silverlight5 collegati e da MSDN vedo che gli unici modi per avere un ritorno dal server WCF sono  netTcpBinding o pollingDuplexHttpBinding.

    Queste cose si fanno col polling di solito, non tenendo una comunicazione aperta solo per sapere quanti client ci sono. È troppo dispendioso di risorse e non scala.


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    • Contrassegnato come risposta Pengo11 lunedì 6 febbraio 2012 09:14
    •