8 messaggi dal 19 ottobre 2006
In una applicazione ASP.NET convertita dalle VB.WEBClass utilizzo per problemi di compatibilità una connessione al db di tipo ADO.OLEDB (il vecchio metodo).

All'interno ho una variabile pubblica di tipo ADODB.Connection alla quale faccio riferimento per il recupero dei dati, dichiarata in un modulo (Module xxx)

Il problema nasce quando due utenti differenti accedono alla pagina web ed effettuano una richiesta contemporanea: la prima richiesta, quando termina, chiude la connessione anche alla seconda.

In pratica le richieste di utenti differenti vengono spedite sulla medesima connessione!!

Ora ho risolto mantenendo aperta la connessione, ma non è una soluzione.
Sinceramente quando l'applicazione girava con VB6 non ho mai avuto nessun problema, ne tantomeno ritengo che una sistema di accesso dati WEB debba comportarsi in questo modo.

Qualche idea ?
Grazie
6 messaggi dal 28 aprile 2004
Il modulo (la classe) in cui hai definito e creato la connessione e' per caso definita come
Shared?
Prova a vedere se questo può' essenti di aiuto http://www.4guysfromrolla.com/articles/122403-1.aspx
Modificato da szuccoli il 22 ottobre 2011 10.42 -
8 messaggi dal 19 ottobre 2006
No, nessun shared
Ecco qui il codice.


Module modAccessDB

Public DBcn As ADODB.Connection

Function OpenConnection() As Boolean
Dim CnString As String

On Error GoTo ErrorHandler

CnString = "File Name=" & glPathWEB & "Include\ConnessioneDB.udl"

If (DBcn Is Nothing) Then
DBcn = New ADODB.Connection
End If


If DBcn.State = ADODB.ObjectStateEnum.adStateClosed Then
DBcn.ConnectionString = CnString
DBcn.CommandTimeout = appSQL_COMMAND_TIMEOUT
DBcn.Open()
End If

OpenConnection = True
Exit Function


ErrorHandler:
OpenConnection = False

End Function
End Module
6 messaggi dal 28 aprile 2004
Prova a sostituire la dichiarazione di Modulo con la dichiarazione di Classe (Module = Public Class )....se non ricordo male (non li suo mai) i moduli sono classi globali nelle quali tutti i metodi e tutte le variabili diventano globali
8 messaggi dal 19 ottobre 2006
Fatto ma non cambia niente.

Purtroppo in ASP.net le dichiarazioni di variabili nei moduli sono "statiche" pertanto condivise tra tutti coloro che accedono al processo.
Questo può essere un vantaggio, ma nel mio caso che sto trasportando un applicativo da VB6 (webclass) a ASP.NET è una limitazione notevole.

Il vecchio compilato COM veniva eseguito sotto IIS in un processo isolato (ogni richiesta ne generava uno diverso), quindi una variabile pubblica era tale in tutto il progetto, ma non per tutti gli utenti.

Ora invece mi trovo che l'applicazione gira in un singolo processo e pertanto le variabili pubbliche lo sono anche per le richieste di utenti differenti.

Quello che mi sto chiedendo è come posso gestire istanze differenti di un oggetto con visibilità pubblica nel progetto.
45 messaggi dal 25 febbraio 2002
inserendo nel nome dell'oggetto il contenuto della sessionid.
fantesma wrote:
Quello che mi sto chiedendo è come posso gestire istanze differenti di un oggetto con visibilità pubblica nel progetto.

creando ogni volta l'istanza. è questo che differenzia una variabile statica da una di istanza.
.

Daniele Bochicchio | ASPItalia.com
I nostri libri
Chief Digital Officer@icubed
Microsoft Regional Director, Microsoft MVP
8 messaggi dal 19 ottobre 2006
Ho risolto utilizzando la seguente direttiva:
<ThreadStatic()> _
Public miaVariabile As string


In questo modo una variabile dichiarata in un modulo VB6 eseguito sotto .NET rimane pubblica per il progetto ma differente per ogni richiesta utente, esattamente come serve a me.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.