Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    55

    Strano comportamento di Session su win 2003

    Salve,
    ho scritto, si fa per dire, per lo più ho ricopiato da altre applicazioni asp alcune righe di codice per valutare il comportamento di aspnet dovendo traslare le suddette applicazioni verso aspnet.
    Ho adattato il file global.asa di asp in un file global.aspx.

    codice:
    <%@ Application Language="VB" %>
    
    <script runat="server">
        
        
        Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
            ' Code that runs on application startup
            Application("ActiveUser") = 0
        End Sub
        
        Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
            ' Code that runs on application shutdown
        End Sub
            
        Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
            ' Code that runs when an unhandled error occurs
        End Sub
    
        Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
            ' Code that runs when a new session is started
            Application.Lock()
            Application("ActiveUser") = Application("ActiveUser") + 1
            Session("IDSessione") = Session.SessionID
            DBAccess(Session("NewID"), "S")
            Session.Timeout = 18
            Application.UnLock()
        End Sub
    
        Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
            ' Code that runs when a session ends. 
            ' Note: The Session_End event is raised only when the sessionstate mode
            ' is set to InProc in the Web.config file. If session mode is set to StateServer 
            ' or SQLServer, the event is not raised.
            Application.Lock()
            Application("ActiveUser") = Application("ActiveUser") - 1
            DBAccess(Session("NewID"), "E")
            Session.RemoveAll()
            Application.UnLock()
        End Sub
    
        Sub DBAccess(ByVal SS, ByVal SE)
            Dim odb As TOLPPServerNet.coDBAccess, sqlString As String = "", rs As Int32 = 0
            odb = New TOLPPServerNet.coDBAccess
            odb.NomeFileIni = System.Web.Hosting.HostingEnvironment.MapPath("\t3\bin\") & "toldbini.ini"
            odb.InitClass("192.168.1.50", "192.168.1.50")
            odb.DBServer = "192.168.1.50"
            odb.DBName = "GIIETAC"
            rs = odb.opendatabase("GIIETAC", "sa", "")
            If SE = "E" Then
                odb.ExecuteCommand("Delete from Tol2006..TolPostiSelezionati where IDPP=" & SS, Nothing, NetIDBAccess.IDBAccess.IDBAccess.DBCmdType.CmdUnknown)
                odb.ExecuteCommand("Delete from GIIETAC..tblOnLineSessione where IDSessione='" & SS & "'", Nothing, NetIDBAccess.IDBAccess.IDBAccess.DBCmdType.CmdUnknown)
            ElseIf SE = "S" Then
                Dim iRnd As Int32 = CType(Format(Date.Now, "hhmmssfff"), Int32)
                Randomize(iRnd)
                Session("rnd") = iRnd
                Dim NewID As Int64 = Rnd() * 1.0E+15
                Session("NewID") = NewID
                sqlString = "Insert into GIIETAC..TblOnLineSessione values('" & NewID & "',getdate())"
                odb.ExecuteCommand(sqlString, Nothing, NetIDBAccess.IDBAccess.IDBAccess.DBCmdType.CmdUnknown)
                sqlString = "Insert into GIIETAC..TblUserTrace values('" & Request.Servervariables("REMOTE_ADDR") & "','" & Request.Servervariables("HTTP_USER_AGENT") & "',getdate())"
                odb.ExecuteCommand(sqlString, Nothing, NetIDBAccess.IDBAccess.IDBAccess.DBCmdType.CmdUnknown)
            End If
            odb = Nothing
        End Sub
    
    </script>
    poi ho scritto una paginetta di prova default.aspx che eseguisse una semplice operazione

    il codice della pagina

    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
    <%@ Import Namespace="TOLPPServerNet" %>
    <%@ Import Namespace="CDataAccess"  %>
    <%
        Dim myDBAccess As TOLPPServerNet.coDBAccess = New TOLPPServerNet.coDBAccess
        Dim myRS As CDataAccess.DataAccess = Nothing
        Dim RetVal As Object = Nothing
        dim IDSessione as string=""
    
        Try
    
            'myDBAccess.InitClass("", "")
            myDBAccess.NomeFileIni = (Server.MapPath("\t3\bin\")) & "toldbini.ini"
            Response.Write(Server.MapPath("\t3") & "<br>")
            Response.Write(myDBAccess.NomeFileIni & "<br>")
            If myDBAccess.OpenDataBase("Tol2006", "sa", "") Then
                if Session("IDSessione")="" then
                   Session("IDSessione")=myDBAccess.SessionID
                else
                    myDBAccess.SessionID=Session("NewID")
                end if
                Response.Write("DB Opened<br>" & Session("IDSessione") & "<br>"  & Session("NewID") & "<br>")
                response.write(Session("rnd") & "<br>")
                If myDBAccess.OpenRecordset("Select * from tolanagraficautente", Nothing, Retval) Then
    
                    Response.Write("OpenRecordset<br>")
                    If IsArray(RetVal) Then
                        myRS = New CDataAccess.DataAccess
                        Dim cdo() As Object = CType(RetVal, Array)(0, 3)
                        Dim fdo As Int16 = CType(RetVal, Array).GetUpperBound(0) + 1
                        myRS.SetDataAccess(CType(RetVal, Array), fdo, cdo.Length)
                        Dim i, j As Int16
                        Response.Write("<table cellspacing=1 border=0>" & ControlChars.CrLf)
                        For i = 1 To myRS.RowCount
                            Response.Write("<tr>")
                            For j = 1 To myRS.FieldCount
                                Response.Write("<td>" & myRS.ValoreRecord(j, i) & "</td>")
                            Next
                            Response.Write("</tr>" & ControlChars.CrLf)
                        Next
                        Response.Write("</table>" & ControlChars.CrLf)
                    End If
                End If
            End If
        Catch ex As Exception
            Response.Write(ex.ToString)
        End Try
      
     %>
    Tralasciando il funzionamento delle due librerie referenziate in entrambi gli script, che sicuramente funzionano essendo state abbondantemente testate con diverse applicazioni dotnet, riporto quello che risulta dal file di log scritto dalla libreria "TOLPPServerNet"

    codice:
    2014-09-29 03.58.44.687 20140929155844343 - [ExecuteCommand Insert into GIIETAC..TblOnLineSessione values('349804103374481',getdate())] ()
    2014-09-29 03.58.44.843 20140929155844343 - [ExecuteCommand Insert into GIIETAC..TblUserTrace values('192.168.1.30','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)',getdate())] ()
    2014-09-29 03.58.44.937 349804103374481 - [OpenRecordset Select * from tolanagraficautente] ()
    2014-09-29 03.58.46.093 20140929155846078 - [ExecuteCommand Delete from Tol2006..TolPostiSelezionati where IDPP=349804103374481] ()
    2014-09-29 03.58.46.125 20140929155846078 - [ExecuteCommand Delete from GIIETAC..tblOnLineSessione where IDSessione='349804103374481'] ()
    Come si vede dalla sequenza delle chiamate effettuate subito dopo che la sessione è stata startata e la richiesta di accesso alla base dati è stata soddisfatta viene eseguito il codice di chiusura della sessione.
    Ho cercato da diverse parti ma non ho trovato nulla che mi chiarisse le idee.

    Premetto che lo stesso codice in formato asp funziona correttamente (ovviamente le librerie richiamate non sono le stesse, ma hanno le stesse funzionalità).

    C'è qualche buon samaritano che mi dia le giuste indicazioni o che dica dove è l'errore.

    Grazie

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    sicuro di aver chiamato il tuo file GLOBAL.ASAX (e non GLOBAL.ASPX) ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    55
    Quote Originariamente inviata da djciko Visualizza il messaggio
    sicuro di aver chiamato il tuo file GLOBAL.ASAX (e non GLOBAL.ASPX) ?
    Si il file in questione si chiama GLOBAL.ASAX, nel testo ho lasciato un orrore di trascrizione.
    Sai come è quando si digita le dita a volte vanno dove vogliono loro.

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    comunque scusa ma non si capisce molto il problema...

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    55
    Scusa se rispondo solo adesso.
    Il problema è che l'evento Session_End dovrebbe essere attivato solo da una istruzione Session.Abandon o quando scade il timeout della sessione e non al termine dello script ASPX che ha instanziato l'applicazione.
    Ora pensa se dalla pagina Default.aspx venisse richiamata un'altra pagina, diciamo pagina1.aspx, nel cui script vb ci sono riferimenti alla sessione aperta da Defalut.aspx cosa succede?
    Ovvio non ci saranno più le variabili relative alla sessione e quindi probabilmante l'applicazione andrebbe in crash o non eseguirebbe nulla, comunque avrebbe un comportamento anomalo.
    Ho chiarito l'arcano del problema ?
    Grazie ciao

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    ok, ma il problema che vuoi risolvere ancora non si capisce saro' io...

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    55
    Forse saro io che mi spiego male, ma se dai una occhiata al log

    codice:
    2014-09-2903.58.44.68720140929155844343-[ExecuteCommandInsertinto GIIETAC..TblOnLineSessione values('349804103374481',getdate())]()
    2014-09-2903.58.44.84320140929155844343-[ExecuteCommandInsertinto GIIETAC..TblUserTrace values('192.168.1.30','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)',getdate())]()
    2014-09-2903.58.44.937349804103374481-[OpenRecordsetSelect*from tolanagraficautente]()
    2014-09-2903.58.46.09320140929155846078-[ExecuteCommandDeletefromTol2006..TolPostiSelezionatiwhere IDPP=349804103374481]()
    2014-09-2903.58.46.12520140929155846078-[ExecuteCommandDeletefrom GIIETAC..tblOnLineSessione whereIDSessione='349804103374481']()
    che per semplicità ho riportato , si vede nella sequenza temporale delle operazioni strettamente in ordine cronologico
    1- Insert into ......
    2- Insert into ......
    3- Select * from .....
    4- Delete from ....
    5- Delete from ....

    dove
    le prime 2 'Insert into ...' sono i comandi sql richiamati dall'evento Session_Start
    poi la query 'Select * from ...' richiesta effettuata dalla pagina Default.aspx
    infine le ultime 2 'Delete from ... ' sono proprio i comandi sql richiamati dall'evento Session_End

    Ora quello che non capisco è come possa essere stato generato un evento 'Session_End' quando nel codice della pagina Default.aspx non è stata fatta alcuna richiesta di tipo 'Session.Abandon'.

  8. #8

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    55
    Si sembra proprio che questo link sia quello giusto.
    Comunque vai a fidarti di microsoft e dei suoi prodotti ed in ogni caso
    Comunque:
    'Non lasciare la via vecchia x la nuova che non sai quello che trova'

    Ciao e grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    55
    Comunque giusto per aggiornare la cronaca ed il popolo faccio presente che anche aggiungendo ASPNET 4.0.3 ad IIS continua a comportarsi nello stesso identico modo.
    Anche volendo inserire una variabile nella sessione per segnalare che è ancora attiva, come consiglia "Mike Carlisle - Technical Architect with over 15 years experience in a wide range of technologies", in che modo poi si può gestire il timeout della stessa ?

    Qualcuno ha qualche idea che non sia troppo arzigogolata per questo problema ??
    Ribadisco : 'Non lasciare la via vecchia per la nuova che sai quello che lasci e non sai quello che trova'

    Help me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.