2015-11-11 21 views
6

Ho provato a cercare questo, ma non ho trovato molto simile a qualcosa che ho bisogno di implementare. In breve, eseguiremo un sito Web ASP su un server a cui accederanno i client. Idealmente, abbiamo una funzione che vogliamo inizializzare all'inizio della sessione di un utente e terminare quando termina la sessione. Durante la sessione, questa funzione invia e riceve messaggi tramite la comunicazione socket, il che significa che dobbiamo accedere alle funzioni di invio/ricezione di questo corso dalle pagine per spostare le informazioni. Qual è il modo migliore per farlo?Come eseguire un'attività continua su un server ASP.Net?

+1

FWIW, a tutti coloro che votano, penso che questa sia una domanda perfettamente valida. Ha (efficacemente) una sola risposta giusta, e viene chiesto bene. L'unico problema possibile è che il titolo è un po 'confuso e sembra descrivere un problema diverso da quello che viene realmente chiesto. –

risposta

6

Cerca in SignalR. Questo è probabilmente quello che vuoi. I suoi "hub" sono in effetti ciò che stai cercando di avviare all'avvio della sessione e avviarsi quando l'utente scompare. Ha una libreria JS lato client che sceglie automaticamente il miglior metodo di connessione disponibile (ad esempio, websockets> server-inviati-eventi> polling lungo) e consente di inviare messaggi sia dal client al server, sia dal server al client.

http://www.asp.net/signalr

Un'altra alternativa che ho giocato in giro con in passato è XSockets:

https://xsockets.net/

E 'simile a SignalR sotto molti aspetti, ma non è gratuito.

+0

Ho indagato su questo, e credo che questo sia quello che stiamo cercando. Grazie! – JtHa77

2

È difficile distinguere la descrizione, stai cercando di comunicare con il browser client tramite le prese? O stai cercando di comunicare con altri servizi tramite prese?

Le applicazioni Web non sono ideali per tipi deterministici di azioni. È difficile per il server Web sapere se il client ha effettivamente chiuso il browser o meno. Nella maggior parte dei casi, le sessioni scadono semplicemente dopo un periodo di inattività (più di 20 minuti nella maggior parte dei casi). Quindi non puoi sapere in modo affidabile quando la sessione degli utenti è effettivamente finita.

Per finire, ci sono alcuni casi limite in cui Session_End non sparerà. Ad esempio, se il pool di applicazioni viene riciclato, non verrà generato alcun evento Session_End. Questo potrebbe non essere un problema, dal momento che se il pool di app ricicla anche le altre connessioni verrebbero riciclate, ma è comunque un problema da tenere a mente.

Infine, le app Web non sono pensate per essere di lunga durata.