Condivisione di Oggetti tra Web Services

giovedì 08 maggio 2008 - 17.16

cesareino Profilo | Newbie

Salve,
sto programmando un'applicazione Web composta da tre Web Service. Ho l'esigenza di condividere e contemporaneamente di tenere in memoria una lista di oggetti.
Ho realizzato questo meccanismo creando una classe statica che uso come contenitore della lista.
Ho purtroppo notato che gli oggetti statici vengono di tanto in tanto (ogni mezz'ora circa) distrutti.
Come faccio ad evitarne la distruzione? O eventualmente esiste qualche altra tecnica (esclusa la memorizzazione persistente) per condividere i dati tra i Web Service?

rossimarko Profilo | Guru

I tuoi tre webservice sono all'interno dello stesso progetto vero?
Se i dati vengono distrutti ogni mezz'ora di inattività e ad esempio usi IIS6 è una cosa normale perchè di default dopo 20 min di inattività spegne l'application pool.

Se non vuoi proprio persistere i dati l'unica cosa che puoi fare è modificare le impostazioni dell'application pool in IIS.

Ma come mai non vuoi persistere quelle informazioni? Potresti comunque fare una procedura che persiste le informazioni ogni tot tempo e comunque in lettura continua ad usare i dati che hai in memoria.. Li vai a rileggere da dove li hai salvati solo in caso di necessità.


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

cesareino Profilo | Newbie

Grazie mille per la risposta.
Devo realizzare un gioco e la struttura dati da tenere in memoria è una lista di oggetti "Partita". Visto che il ciclo di vita di uno di questi oggetti è inferiore alla mezz'ora ho pensato a memorizzare i dati in modo volatile. Questo perchè rende l'accesso ai dati più semplice e veloce (in termini di righe di codice).
L'idea di fare un gioco con Web Services non è mia, purtroppo sono costretto a farlo per la 'folle' idea di un professore.

rossimarko Profilo | Guru

Ho capito. Usi IIS per eseguire il webservice oppure il webserver di visual studio?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

cesareino Profilo | Newbie

Uso IIS

rossimarko Profilo | Guru

Usi IIS6? Hai verificato le impostazioni del tuo application pool?

http://msdn.microsoft.com/en-us/library/aa720391.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

cesareino Profilo | Newbie

Alla fine ho optato per la soluzione di serializzare su file la classe che contiene le risorse condivise tra i web service. Ho implementato un metodo che salva lo stato della classe ad ogni modifica ed un altro metodo che lo ricarica nel caso in cui per qualche motivo lo stato venga 'perso' (es. riavvio del web server).
Adesso mi trovo di fronte ad un nuovo problema, dovrei gestire l'accesso concorrente a tale classe, in modo che, ad esempio, solo un web service alla volta possa salvare/modificare o ripristinare lo stato della classe.
E' corretto usare in questo ambito l'uso del lock?

rossimarko Profilo | Guru

Sicuramente il lock è necessario per evitare scritture contemporanee.

La cosa che devi valutare è il numero di volte che ricevi delle chiamate al webservice. Se il numero è troppo alto ci sono forti rischi di scritture contemporanee, e quindi un forte calo di prestazioni
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5