2011-02-03 17 views
5

Sto lavorando con un numero <gulp>codice precedente scritto in .NET 3.5 utilizzando i servizi Web ASMX.È corretto utilizzare un proxy del servizio Web ASMX singleton?

Un servizio Windows (chiamalo FooService) memorizza staticamente un proxy ASMX per un servizio Web (chiamalo BarWS) che chiama in risposta alle richieste del client circa 10-30 volte all'ora.

Essendo <gulp>codice legacy è per varie ragioni incredibilmente difficile da testare. Sono in procinto di rompere le dipendenze per renderlo testabile e questo riferimento statico mi ha fatto riflettere. Sono passati anni da quando usavo ASMX e ricordo che il proxy è sicuro per i thread - ma mi chiedevo se potesse diventare inutilizzabile nello stesso modo in cui i proxy WCF singleton/condivisi possono quando sviluppano un problema e diventano irreversibili.

Dato l'uso leggero di questo proxy (BarWS è chiamato meno di 30 volte all'ora), penso che sarebbe molto più sicuro creare un nuovo proxy per ogni chiamata, ma mi chiedo solo se lo farei un cambiamento inutile. Qualcuno sa?

P.S. So che WCF è migliore, ma la migrazione a WCF è troppo cambiata adesso in questa base di codice legacy <gulp>.

+4

'legacy' e' .NET 3.5' ​​... woah ... Mi sento vecchio! :) –

+1

Qual è il significato del * codice legacy * che è in corsivo due volte? – Amy

+1

@James: non è necessario modificare il servizio in WCF, ma si consiglia di modificare l'uso di un "Riferimento servizio" anziché di un "Riferimento Web". –

risposta

4

Misurare il tempo necessario per creare un proxy. Se si tratta di una falsa ottimizzazione (ho il forte sospetto che sia), quindi cambiarla in creazione basata sull'istanza. In genere è bene evitare la statica. Mettilo dietro una fabbrica, quindi almeno puoi ancora avere un comportamento di tipo singleton se lo desideri, ma questo comportamento creazionale sarebbe mascherato e indipendente dal client.

+0

Sono sicuro al 99% che si tratta di una falsa ottimizzazione ... Mi piace molto l'idea della fabbrica, grazie. Sto votando questa risposta, ma non ticchettio poiché non chiarisce la domanda sulla riusabilità dell'istanza del proxy dopo un errore. Grazie! –

+0

@James Certo, non ho idea (non ricordo) se è statico. Se lo è, ovviamente hai un problema aggiuntivo e più grande: è thread-safe? –

+0

I documenti MSDN affermano che è thread-safe, ma non l'ho ancora testato. È abbastanza complicato testarlo e il comportamento in errore poiché l'unica implementazione del servizio è (ovviamente) un servizio di produzione in tempo reale (senza WSDL, nessun codice sorgente :)) Non ci si allontana da esso, dovrò fare il reverse engineer un falso per questo! –

Problemi correlati