Logo UGIdotNET

Discussione 'dll in VB6 per applicazione Web in ASP.NET'

# Pubblicato il 19 giu 2004 16.10 - Rispondi
Daniel Malino
dll in VB6 per applicazione Web in ASP.NET
Ciao a tutti, premetto che non sono molto esperto in materia.
Dovrei utilizzare un oggetto COM (dll in VB6) in un'applicazione Web in ASP.NET. In questa dll si trovano alcune funzioni che eseguono delle operazioni su database. Ho iniziato creando un riferimento alla dll ma ho alcuni dubbi:
nella mia applicazione ASP.NET posso creare l'istanza dell'oggetto COM dove e quando voglio oppure potrebbero esserci dei problemi di multiconcorrenza fra threads? Nel caso in cui ci fossero questi problemi, li posso risolvere creando un'istanza per ogni sessione? Un'ultima cosa: se creo un componente derivando da System.ComponentModel.Component e nel costruttore creo l'istanza dell'oggetto COM, posso utilizzare il componente nei Web Form senza incorrere in problemi di utilizzo di memoria o altro?
Qualcuno mi può aiutare, grazie a tutti.

Daniel
# Pubblicato il 19 giu 2004 21.49 - Rispondi
Raffaele Rialdi
Re: dll in VB6 per applicazione Web in ASP.NET
> Dovrei utilizzare un oggetto COM (dll in VB6) in un'applicazione Web in
> ASP.NET. In questa dll si trovano alcune funzioni che eseguono delle operazioni
> su database. Ho iniziato creando un riferimento alla dll ma ho alcuni dubbi:
> nella mia applicazione ASP.NET posso creare l'istanza dell'oggetto COM dove e
> quando voglio oppure potrebbero esserci dei problemi di multiconcorrenza fra
> threads? Nel caso in cui ci fossero questi problemi, li posso risolvere creando
> un'istanza per ogni sessione?
L"uso di componenti COM STA (cioè quelli creati da VB6) in asp.net è molto sconsigliato perchè il modello di threading STA è molto diverso da MTA usato invece in asp.net.
Se proprio non ne puoi fare a meno *devi* mettere l'attributo aspcompat=true nella normativa Page. Questa soluzione abbatte di conseguenza le performance.

> Un'ultima cosa: se creo un componente derivando da
> System.ComponentModel.Component e nel costruttore creo l'istanza dell'oggetto
> COM, posso utilizzare il componente nei Web Form senza incorrere in problemi di
> utilizzo di memoria o altro?
Ogni pagina può girare in un thread diverso e quindi è meglio che il tuo componente sia studiato per essere thread-safe. Questo implica la protezione di tutti i membri statici (shared). Ovviamente anche i membri dell'istanza richiedono la protezione se l'istanza è condivisa tra più sessioni (per esempio mettendolo in Application).

Raffaele
# Pubblicato il 21 giu 2004 1.40 - Rispondi
Daniel Malino
Re: dll in VB6 per applicazione Web in ASP.NET
Grazie per i suggerimenti che mi hai dato, ti chiedo ancora un'ultima cosa: se io facessi un Web service in cui metto l'istanza del mio oggetto COM in Application (prendendo le dovute precauzioni per quando riguarda il multithreading) otterrei delle prestazioni migliori?
Grazie ancora, ciao

Daniel
# Pubblicato il 21 giu 2004 16.28 - Rispondi
Raffaele Rialdi
Re: dll in VB6 per applicazione Web in ASP.NET
> Grazie per i suggerimenti che mi hai dato, ti chiedo ancora un'ultima cosa: se io facessi
> un Web service in cui metto l'istanza del mio oggetto COM in Application (prendendo le
> dovute precauzioni per quando riguarda il multithreading) otterrei delle prestazioni
> migliori?
Di gran lunga peggiori perchè dovresti cercare il modo di far partire anche l'application in STA.
Un oggetto COM necessita il threading model corretto oltre alle precauzioni per non incorrere nei problemi di concorrenza. Se cerchi "aspcompat" su msdn troverai diversi articoli che parlano del problema.

Non so però quanto ti possa aver aiutato ...

Raffaele
# Pubblicato il 21 giu 2004 23.16 - Rispondi
Daniel Malino
Re: dll in VB6 per applicazione Web in ASP.NET
Grazie mille Raffaele, mi documenterò meglio su aspcompact.
Ciao,

Daniel

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185