Ciclo di vita e membri statici di un web service

venerdì 08 maggio 2009 - 17.01

todero Profilo | Newbie

salve,

avrei bisogno di sapere qualcosa sul ciclo di vita di un web service. Io creo i miei web services cn visual studio 2008, quindi li eredito da System.Web.Services.WebService.

Desideravo sapere in particolare quando viene creata un'istanza della classe e qual'è il suo ciclo di vita, ovvero dopo che è stata istanziata(se non sbaglio viene istanziata quando chiamo uno qualunque dei web method) che fine fa?

Inoltre come si comportano i metodi static di questa classe?? posso per esempio dichiarare un hashtable come static in modo che diverse chiamate dei web method la riempiano con degli url che mi servono per effettuare richieste ad altri web services in modo dinamico?

grazie in anticipo, ciauzzzzzzzzzzzzz by tod

Jeremy Profilo | Guru

Ciao Bruno.
>Desideravo sapere in particolare quando viene creata un'istanza
>della classe e qual'è il suo ciclo di vita, ovvero dopo che è
>stata istanziata(se non sbaglio viene istanziata quando chiamo
>uno qualunque dei web method) che fine fa?
Come hai già detto tu, ad ogni chiamata di un WebMethod, viene creata una nuova istanza

>Inoltre come si comportano i metodi static di questa classe??
Le variabili Static(Shared per VB) rimangono valorizzate per qualsiasi istanza per tutta la durata della sessione

>posso per esempio dichiarare un hashtable come static in modo
>che diverse chiamate dei web method la riempiano con degli url
>che mi servono per effettuare richieste ad altri web services
>in modo dinamico?
Si

Facci sapere...
Ciao

todero Profilo | Newbie

grazie per la celere risposta,

dopo che viene creata un'istanza a seguito di una chiamata di un web method da parte di un client, che fine fa quest'istanza dopo che è stato inviato il messaggio di risposta al client??? muore oppure dura per una sessione(in questo caso quanto dura questa sessione???)?

dunque io dovrei poter definire una qualunque variabile static(come membro della mia classe ereditata da WebService) e poterla utilizzare cn dei valori consistenti da diverse chiamate di diversi client, ovvero io chiamo un metodo e setto nella mia hashtable un coppia key, value e poi successivamente potrò usare questi valori in qualunque altra chiamata. Esatto o non ho capito???

ciauzzzzzzz


Nonostante nessuno mi abbia + risposto, io pubblico cmq la soluzione al problema che avevo con i membri static. Non riuscivo ad usare un hashtable statica, perchè stupidamente l'avevo inizializzata all'interno del costruttore del web service, dunque ad ogni chiamata veniva rinizializzata ed io perdevo l'oggetto a cui avevo fatto riferimento nelle chiamate precedenti.

se qualcuno volesse comunque suggerirmi una guida sul ciclo di vita di un web service, io resto sempre qui in ascolto.

ciauzzzzzzzzzzzzzzzzz

Jeremy Profilo | Guru

Ciao Bruno.
Allora, andiamo con ordine.

>grazie per la celere risposta,
prego.

>dopo che viene creata un'istanza a seguito di una chiamata di
>un web method da parte di un client, che fine fa quest'istanza
>dopo che è stato inviato il messaggio di risposta al client???
>muore oppure dura per una sessione.
Muore ... nel senso che, ad ogni chiamata al webMethod, viene creata una nuova istanza del proxy, quindi .......
>(in questo caso quanto dura questa sessione???)?
Se non sbaglio, di default, dovrebbe durare 30 minuti.(ma non sono assolutamente sicuro.)

>dunque io dovrei poter definire una qualunque variabile static(come
>membro della mia classe ereditata da WebService) e poterla utilizzare
>cn dei valori consistenti da diverse chiamate di diversi client,
>ovvero io chiamo un metodo e setto nella mia hashtable un coppia
>key, value e poi successivamente potrò usare questi valori in
>qualunque altra chiamata. Esatto o non ho capito???
Penso tu abbia capito bene, per chiarirti meglio le idee, ti posso dire che io ho usato delle variabili Shared(Static in c#), per generare eventi a tutti i client qualora un solo client avesse modificato i dati sul server.

>Nonostante nessuno mi abbia + risposto, io pubblico cmq la soluzione
>al problema che avevo con i membri static. Non riuscivo ad usare
>un hashtable statica, perchè stupidamente l'avevo inizializzata
>all'interno del costruttore del web service, dunque ad ogni chiamata
>veniva rinizializzata ed io perdevo l'oggetto a cui avevo fatto
>riferimento nelle chiamate precedenti.
Non è che nessuno ti abbia più voluto risponderti, è solo che a volte non si ha tutto il tempo che si vorrebbe avere per condivedere le informazioni sul forum.

>se qualcuno volesse comunque suggerirmi una guida sul ciclo di
>vita di un web service, io resto sempre qui in ascolto.
Spiega cosa non ti è ancora chiaro che vediamo di fare ulteriore chiarezza.

Facci sapere....
Ciao.

todero Profilo | Newbie

grazie di nuovo per l'attenzione,

dunque se ho ben capito, la sessione dura ma le istanze della classe webservice muoiono, giusto???

beh ora non mi resta che attendere la risposta all'altro post che ho ho lasciato nella sessione ASP.net 2.0.


saluti by tod

Jeremy Profilo | Guru

Ciao Bruno.
>dunque se ho ben capito, la sessione dura ma le istanze della
>classe webservice muoiono, giusto???
Esatto.

todero Profilo | Newbie

ulteriore dubbio:

io ho prodotto il codice per il web service di un negozio, se io volessi utilizzare questo stesso codice, senza fare copia e incolla del sorgente, per definire i web service degli altri negozi??? mi spiego meglio, posso parametrizzare questo codice in modo da specificare i parametri variabili, quali url del negozio e database del negozio, e dunque creare tanti negozi utilizzando la classe scritta per il primo negozio???



spero di essere stato chiaro :-)

aspetto suggerimenti,
grazie ciauzzzzzzzzzzzzzzzz

Jeremy Profilo | Guru

> mi spiego meglio, posso parametrizzare questo codice
>in modo da specificare i parametri variabili, quali url del negozio
>e database del negozio, e dunque creare tanti negozi utilizzando
>la classe scritta per il primo negozio???
Certo che si.
Mi rimane solo un piccolo dubbio per quanto riguarda l'url in quanto è definita in ambito Applicazione e pertanto ReadOnly, ma questo rimarebbe un problema solo qualora tu volessi modificarla a runtime.
Per quanto riguarda il database, dubbi non ce ne sono.

Facci sapere...
Ciao.

todero Profilo | Newbie

ok,

forse ho capito cosa dovrei fare, ma non so come farlo, quindi accetto suggerimenti.
Dovrei creare un file di setup che mi permetta in fase di installazione dell'applicazione di specificare alcuni parametri che io poi vorrei passare alla mia classe.(nome database, utente database, password database).

Ho scoperto che in dot net si possono creare dei tipi di progetto specifici per questo determinato compito, i web setup project. Qualcuno sa spiegarmi come fare? vorrei sapere in particolare come definire i parametri da passare in fase di costruzione, non la procedura per creare un web setup project, perchè quest'ultima in rete si trova facilmente.

attendo una risp,
saluti

Jeremy Profilo | Guru

Ciao Bruno.
>vorrei sapere in particolare come definire i parametri da passare in fase di costruzione
Nelle proprietà di progetto, scheda impostazioni, puoi dichiarare delle variabili in ambito utente od applicazione(lì, troverai anche l'url del webservice).
Spero sia quello che chiedevi.

Facci sapere...
Ciao.

todero Profilo | Newbie

ok ,proverò il tuo suggerimento + tardi, perchè di pome sono impegnato. Spero di riuscire a postarti l'esito stasera.

grazie, ciauzzzzzzzzzz



ieri sera ho spulciato un pochino la scheda proprietà del progetto e non ho trovato nessun riferimento esplicito a ciò che mi serve. Potresti darmi gentilmente qualche indicazione più precisa su quali voci cercare e come utilizzarle.

Inoltre è sorto un altro dubbio, visto che il web service viene istanziato ad ogni chiamata di web method, io non posso passare questi parametri durante l'installazione al costruttore della mia classe, altrimenti come farei a richiamarlo dopo averlo installato???

dunque dove devo inserire questo codice che viene parametrizzato in fase di installazione della web application???

grazie , ciauzzzzzzzzzzzzzzzzz

Ho risolto il problema. Mi è stato di grandissimo aiuto il seguente articolo, anche se ho dovuto cmq fare qualche modifica per adattare la soluzione proposta al mio problema.

ecco il link che spiega come parametrizzare un set up in visual studio:

http://raquila.com/software/configure-app-config-application-settings-during-msi-install/

l'articolo spiega come creare un setup project, io ho creato un web setup project, procedura quasi identica, cambia solo il codice della classe "Installer". Nel dettaglio per aprire il file di configurazione "web.config" e impostare i parametri definiti in fase di installazione, ho usato il seguente codice nell'override del metodo Install
{
base.Install(stateSaver);
string targetvdir = Context.Parameters["targetvdir"]; // ottieni il percorso della virtual directory, necessario conoscerlo poichè devi localizzare il file web.config
string param1 = Context.Parameters["Param1"];
// così via per tutti gli altri parametri necessari
Configuration config = WebConfigurationManager.OpenWebConfiguration("\\" + targetvdir);
config.AppSettings["Param1"].Value = param1;
//così via per tutti gli altri parametri

config.Save()
}

credo che l'argomento sia importante e che magari qualcuno potrebbe scrivere un articolo in merito ad esso, e pubblicarlo sul sito.

spero di essere stato d'aiuto, ciauzzzzzzzzzzz
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5