2009-07-17 6 views
7

Sto provando servizi Web per un'idea che ho avuto. Eseguendo il debug sembra che la classe del servizio Web venga istanziata ogni volta che un client chiama un metodo nel servizio web. Posso vedere questo vedendo che il costruttore viene chiamato ogni volta che chiamo un metodo. Istanzio il servizio web proxy solo una volta nel client.Un servizio Web .NET crea un'istanza con ogni chiamata di metodo?

Ciò significherebbe che dovrei memorizzare tutti i dati tra le chiamate e significa che se uso un databse dovrò riconnetterti per ogni chiamata a un metodo.

Che non può essere corretto?

+0

Perché? Ecco come funzionano le pagine Web e un servizio Web è in realtà solo una pagina Web con una funzione alternativa. –

+0

Oh giusto. Come una pagina web. Bother! Proverò l'idea di WCF Grazie – Richard210363

+0

Spencer Ruport: Se non hai già trattato pagine Web o altri framework senza stato, all'inizio sembrerà strano. Dopotutto, in un framework stateful non dovrai fare tutto quel lavoro extra più volte. – Halvard

risposta

3

Per ASMX, è corretto e in gran parte una buona cosa. I servizi devono essere il più apolidi possibile e, se è davvero necessario archiviare qualcosa tra le chiamate, è possibile utilizzare un singleton. Non credo che mantenere una connessione al database sia idoneo, perché sono memorizzati nella cache e comunque lo scopo del tuo utilizzo.

Se si desidera che un singolo oggetto rimanga attivo tra le chiamate, WCF offre questa opzione. Dato che ASMX è obsoleto, potresti voler passare a WCF.

+1

Forse non del tutto obsoleto. "Legacy" è la parola utilizzata da MS. –

+0

Questo è molto delicato da parte loro. –

5

Questo è davvero corretto.

I servizi Web (in un'architettura orientata ai servizi) sono considerati senza stato (non ricordano nulla tra le chiamate ... tutta la persistenza dei dati dipende da voi).

Se si cerca abbastanza a lungo sul web, si troveranno tentativi di creare servizi Web stateful (che hanno il loro posto, ma vanno contro i principi principali di SOA). Scoprirai, tuttavia, che non alleviano le tue preoccupazioni. Otterrai una nuova istanza di classe con ogni chiamata e tutte le connessioni al DB dovranno essere ricreate.

2

Sì, questo è corretto al 100%. Ogni volta che viene ricevuta una richiesta dal server, viene creato un nuovo oggetto per gestire la richiesta su un thread separato.

Questa è la stessa cosa che si verifica con un Web Form ASP.NET di base.

Problemi correlati