Come arrestare il servizio WCF (interrogazione del database) in esecuzione

1

Ho un servizio WCF che otterrà un oggetto con enormi dati dal database sotto forma di raccolta. Ho un'interfaccia utente che ha i pulsanti per ottenere e annullare.

Pulsante Ottieni: fai richiesta di servizio e continua con la popolazione di dati con i dati restituiti dal servizio.Io avvio come di seguito

Thread _workerThread = new Thread(DoExportTreeLoad);
_workerThread.Start();

Annulla: interrompe il thread precedente. Funziona come di seguito

_workerThread.Abort()

Il mio DoExportTreeLoad () ha la chiamata al servizio sincrono che a sua volta colpisce il database e ottiene i dati.

result = serivce.GetData(criteria);

Problema: quando annullo l'operazione dopo aver richiesto il servizio, il codice DAL è ancora in esecuzione in background (recupero dei dati dal database) dove non dovrebbe accadere.

Non appena annullo l'operazione dall'interfaccia utente, la transazione (per ottenere i dati) dal database deve essere interrotta. Porta a un grande problema di prestazioni.

Per favore aiutatemi in qualsiasi modo a finire l'attività di back-end quando il thread è cancellato. Grazie in anticipo.

    
posta Swetha 18.06.2014 - 14:17
fonte

1 risposta

1

Non c'è modo di dire a WCF di uccidere una richiesta in corso. Dovresti preparare la tua soluzione. Ad esempio, avere un altro metodo sull'oggetto WCF che è possibile chiamare dicendolo per annullare qualsiasi operazione attualmente in corso.

Potresti voler riprogettare la tua soluzione per supportarla. Ad esempio, quando si avvia la funzione di recupero di dati di grandi dimensioni, è possibile tornare immediatamente con un ID di richiesta. Quindi avere eventi periodici che vengono inviati al client dal componente WCF con i dati raccolti finora e un argomento "annulla" che è possibile impostare per annullare l'operazione. Oppure avere un metodo che il client può chiamare per ottenere i dati raccolti finora, passando l'id-richiesta e fornire un metodo di annullamento accettando l'id-richiesta.

Ecco una domanda simile su SO: link

    
risposta data 18.06.2014 - 15:04
fonte

Leggi altre domande sui tag