|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
[ASP.NET]: Web Service
Salve,
Sto realizzando un web service per un progetto all'università. Il mio problema è che ogni volta che invoco un web Method devo istanziare un oggetto della classe che ho creato. Per l'inizializzazione di quest'oggetto sono previste molte operazioni allora non mi conviene instanziare e distruggere ogni volta che viene invocato un web method, causa una notevole perdita di efficienza. Vorrei fare in modo che quest'oggetto resti vivo anche dopo un invocazione di un web method, in modo che quando viene richiamato un altro web method già dispone dell'oggetto (sul quale poi può fare quello che vuole) senza doverlo creare di nuovo. Ho sentito parlare di stato del web service o web service stateful.... Come si potrebbe realizzare questa cosa? esistono classi .Net? Grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
http://www.google.se/search?hl=it&q=...oogle&aq=f&oq=
Il secondo risultato potrebbe fare al caso tuo ![]() |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jul 2008
Città: Nel mio studio
Messaggi: 168
|
potresti provare anche con il caching degli oggetti
__________________
Since Rocco Siffredi, the saying "pain in the ass" got a total new meaning |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
Grazie mille, ho risolto (una parte).
Lato server : con un metodo instanzio l'oggetto g ed invoco il metodo g.open() di quella classe( che fà quelle operazioni che volevo far fare soltanto una volta e non ogni volta che soi invocava un metodo), poi inserisco quest' oggetto nella cash, il metodo open() restituisce il token. Gli altri metodi, oltre ai parametri, prendono in input il token univoco e quindi ottengono dalla cash lo stesso oggetto e possono invocare i metodi senza reinvocare il metodo open(); Lato client: Adesso ho creato l'applicazione che consuma il web service. Ed ho incontrato un altro problemino. ogni volta che utilizzo un controllo web la pagina viene ricaricata invocando il metodo page_load Codice:
private WS.Service ws; private String webToken; protected void Page_Load(object sender, EventArgs e) { if (IsPostBack == false) { ws = new WS.Service(); webToken = ws.open(); /*carico la pagina con alcuni valori restituiti dal web service. Es.*/ int result = ws.getValue(12,23, webToken); String[] list = ws.getNomi(webToken); } } //poi dopo aver inserito alcuni parametri in qualche textbob il metodo //deve rchiamare un altro metodo del webservice protected void btnOk_Click(object sender, EventArgs e) { lblValue.Text = Convert.ToString(ws.getValue(txt1.text.toString(), txt2.Text.toString(), webToken)); //Il problema è che dopo aver cliccato sul bottone ok la pagina si ricarica, //ma a causa del controllo sul IsPostBack non istanzia l'oggetto ws e //quindi in questo metodo ws = null ed anche webToken = null , qundi //viene sollevata un eccezione //non posso togliere il controllo nel page_load altrimenti ritorno al //problema che avevo prima, ovvero invocare // ws = new WS.Service(); // webToken = ws.open(); //ad ogni caricamento pagina, quindi poi non è servito a nulla gestire //la cash lato server } |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
Risolto, ho utilizzato la cash anche lato client
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Occhio che stai lasciando tutte le connessioni aperte finchè l'application pool non scade.
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
No no non ti preocccupare, svuoto sia la cache e chiudo le connessioni, ad ogni g.open() corrisponde un g.close().
Grazie per l'osservazione |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:19.