22 messaggi dal 03 settembre 2008
Ho la necessità di gestire più thread su un server remoto, e non ho i privilegi per eseguirvi un form in locale che si occupi di ciò.

Così ho preparato un servizio .asmx con due semplici metodi Start() e Stop(), che invoco da remoto tramite due distinti bottoni di un Windows Form.

Ora il metodo Start funziona a meraviglia, ma non riesco più ad interrompere i thread.

Questo un estratto del codice del servizio:
----------
private bool running = false;
Thread tb;
Thread te;

[WebMethod]
public void Start()
{
running = true;
tb = new Thread(BasicRoutine);
te = new Thread(ExtendedRoutine);
tb.Start();
te.Start();
}
[WebMethod]
public void Stop()
{
running = false;
try
{
tb.Abort();
}
catch { }
try
{
te.Abort();
}
catch { }
}
-----------
Per interrompere i due thread, sto utilizzando sia il metodo Abort() che un valore booleano di controllo chiamato running ( while (running) {...} ), ma benchè inizializzi il servizio solo all'avvio del form, quando invoco il metodo Stop() sembra che venga creata una nuova istanza del servizio, che quindi non influisce su quella creata dal metodo Start().

Qualcuno mi può aiutare?
La ragione è semplice: l'invocazione ai web service è stateless e questa cosa fa un po' a pugni con il fatto che memorizzi il thread in un field della classe del tuo servizio, visto che poi quando torni ad invocarlo non è assolutamente detto che ti venga restituita la stessa istanza!!

IMHO una soluzione può consistere nel memorizzare il thread in un dictionary statico, con un guid come chiave e restituire questo guid alla chiamata Start; la Stop, invece deve fornire il guid per poter ripescare il thread dal dictionary e fermarlo.

La sfiga è che non hai controllo su cosa faccia il web server, se ricicla l'applicazione, tanto per dire, perdi il dictionary e il tuo task viene interrotto.

m.
22 messaggi dal 03 settembre 2008
Per ora ho risolto dichiarando statici i due thread del servizio, sembra funzioni a meraviglia così.
Grazie mille!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.