Comunicazione bidirezionale tra server e client

3

Situazione: abbiamo un'applicazione Web in esecuzione su un server. Questa applicazione deve recuperare i dati da altri PC (client), che si trovano su una rete diversa.

Sul PC dei client ci sono WCF ospitate in Servizi Windows usando il loro db Sql locale. Voglio fare una comunicazione duplex tra server e client per condividere i dati tra loro. condivisione dei dati significa condividere tabella di dati, set di dati, stringhe ecc. tra client e server.

Problema:

1) Non ho alcun controllo su firewall, proxy, NAT sul PC lato client. La maggior parte dei PC aziendali dipendenti hanno molta sicurezza di rete, ad esempio il firewall blocca il traffico ICMP e anche alcune porte, alcuni router potrebbero essere disabilitati port forwarding ecc ecc, il client può cambiare posizione di rete. Non voglio fare alcuna impostazione sul router lato client, proxy, firewall però. durante la comunicazione come posso gestire questo tipo di problema del lato client? come sai skype funziona perfettamente in quella situazione.

I firewall

molto spesso bloccano le connessioni in entrata ai client; il client potrebbe non essere raggiungibile dal server, potrebbe utilizzare la traduzione NAT dietro un router e quindi non può essere contattato senza il port forwarding impostato sul router e qualche nuovo router disabilitato il port forwarding.

2) Sul lato client non c'è IIS.

Non voglio consentire l'accesso remoto sul PC client.

Ci sono più di 100 client e un solo server. un server deve comunicare con molti client su reti diverse.

3) Da un lato l'applicazione client utilizza l'applicazione window e wcf ospitato nel servizio window, dall'altro lato sul mio server sto usando l'applicazione web. quindi la sua comunicazione media è tra desktop pc e web pc, questo è il problema.

Se entrambi utilizzano un'applicazione web, non è stato un problema per la comunicazione duplex, perché so che WEBRTC è adatto lì lol.

Tecnologia che avevo già testato e trovato il problema

WSDualHttpBinding: non funziona se il client dietro NAT.

MSMQ: la sua tecnica errata se i client hanno più di 1 e problemi di prestazioni anche perché usano la memoria RAM.

Xsocket: Inoltre, non funziona se il blocco del traffico ICMP viene eseguito dal firewall sul client.

WebRTC: funziona bene, ma supporta la comunicazione web-web. come parte del mio cliente ho vinto l'app.

Socket.io: La sua necessità di impostare node.js e molte altre cose, difficili da implementare perché ho bisogno di implementare un'applicazione di esistenza, non sto facendo una nuova applicazione.

Programma socket C #: non funziona se client e server su reti diverse.

Relè del bus di servizio: non è gratuito nemmeno per i test.

socketPro: ho studiato trovo il suo buono ma non riesco a trovare alcun campione giusto su google. così che potrei testarlo.

Canali originali: non riesco a trovare esempi su google.

Vediamo il problema SignalR che ottengo.: lato server eseguo un'applicazione console e lato client eseguo due applicazioni, una è console e altro web. quando stavo eseguendo l'applicazione client della console che non stava iniziando la connessione con il Server ma quando stavo usando l'applicazione client Web, funzionava perfettamente. Non riesco a capire perché thas ??

Per favore dimmi qual è il modo più sicuro e veloce per gestire questa situazione? quale approccio dovrei usare?

Grazie Advance.

    
posta Tariq_ASp.net 02.01.2015 - 15:09
fonte

1 risposta

1

Questo può essere fatto usando un contratto CallBack WCF.

Se il client può stabilire una connessione con il server, il server può utilizzare un servizio WCF con una costruzione callback . Questo descrive che il server si aspetta che il client implementa anche un servizio (il servizio di callback), come parte del contratto di servizio.

Questo becca in basso come segue:

  1. Il server ospita un servizio WCF.
  2. Il contratto di servizio ha un attributo CallBackContract:

    [ServiceContract(CallbackContract = typeof(IMyServiceCallback))]

  3. I client che desiderano utilizzare questo servizio, devono implementare il contratto di callback desiderato (servizio) per poter comunicare con il server.

  4. Quando un client si connette al servizio lato server, la connessione inversa / callback sarà effettuata sulla stessa connessione.

L'uso di callback avviene tramite la stessa connessione (che è già stata aperta). Ciò richiede un canale di comunicazione bidirezionale (ad esempio http ).

Vedi link per un esempio su come implementarlo.

    
risposta data 02.01.2015 - 16:11
fonte

Leggi altre domande sui tag