| 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 |
| 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 |
| 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 |
| 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 |
| Daniel Malino |
Re: dll in VB6 per applicazione Web in ASP.NET
Grazie mille Raffaele, mi documenterò meglio su aspcompact.
Ciao, Daniel |