IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

Code spécifique au framework 3.5 qui ne fonctionne pas


Sujet :

Framework .NET

  1. #1
    Membre actif Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Points : 209
    Points
    209
    Par défaut Code spécifique au framework 3.5 qui ne fonctionne pas
    Bonjour,
    Mon problème est un peu bizarre. J'ai un serveur 2008 DataCenter R2 avec IIS et Framework 3.5 installé
    SI j'exécute un bout de code "spécfique" 3.5 et bien ca ne marche pas, par contre la version 2 fonctionne.
    Sur aucune machine je n'ai rencontré le problème.
    Je vous met le code en bas a mettre dans une page aspx (pas besoin de cs) si vous voulez bien m'indiquer ce que ca vous met en retour ce serait sympa.
    Le but du code initial (la je l'ai simplifié) est de lire les variables de toutes les sessions utilisateur
    En principe avec le framework 3 ca renvoi :
    _disposed
    _caches --> c'est ce champ que j'utilise ensuite
    _cacheIndexMask
    _cacheCommon
    avec le framework 2 on a plus de champ, le 1er étant
    _entries ---> vous verrez dans la fonction Framework2 ci dessous qu'on l'utilise pour la suite

    Je ne comprend pas pourquoi sur cette machine fraichement installé le code 3.5 ne fonctionne pas alors que partout ailleur ca a marché (j'ai meme tester chez moi sur mon pc perso avec webmatrix2 installé pour l'occasion et ca fonctionne)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    <%@ Import NameSpace="System" %>
    <%@ Import NameSpace="System.Collections.Generic" %>
    <%@ Import NameSpace="System.Data" %>
    <%@ Import NameSpace="System.Configuration" %>
    <%@ Import NameSpace="System.Collections" %>
    <%@ Import NameSpace="System.Web" %>
    <%@ Import NameSpace="System.Web.Security" %>
    <%@ Import NameSpace="System.Web.UI" %>
    <%@ Import NameSpace="System.Web.UI.WebControls" %>
    <%@ Import NameSpace="System.Web.UI.WebControls.WebParts" %>
    <%@ Import NameSpace="System.Web.UI.HtmlControls" %>
    <%@ Import NameSpace="System.Reflection" %>
    <%@ Import NameSpace="System.Web.SessionState" %>
     
    <script language="c#" runat="server">
     
    public void CodeFramework2()
    {
    	HttpContext.Current.Session["FRAMEWORK2"] = "FRAMEWORK 2";
    	object obj = typeof(HttpRuntime).GetProperty("CacheInternal", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null, null);
    //ici on va utiliser "entries"
    	        Hashtable c2 = (Hashtable)obj.GetType().GetField("_entries", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj);
    	        foreach (DictionaryEntry entry in c2)
    	        {
    	            object o1 = entry.Value.GetType().GetProperty("Value", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(entry.Value, null);
    	            if (o1.GetType().ToString() == "System.Web.SessionState.InProcSessionState")
    	            {
    	                SessionStateItemCollection sess = (SessionStateItemCollection)o1.GetType().GetField("_sessionItems", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(o1);
    	                if (sess != null)
    	                {
                              if (sess["FRAMEWORK2"] != null)
    	                    {
    	                        Label1.Text += sess["FRAMEWORK2"] + " is Active.<br>";
    	                    }
     
    	                }
     
    	            }
     
    	        }
    }
     
    public void Page_Load(object sender, EventArgs e)
    {
     
     
    object obj = typeof(HttpRuntime).GetProperty("CacheInternal", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null, null);
     
    foreach (FieldInfo ofi in obj.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
    {
    	Label1.Text += ofi.Name + "<br/>";
    }
    Label1.Text += "FIN<br/>";
    try
    {CodeFramework2();}
    catch
    {
    Label1.Text += "ERREUR FRAMEWORK2 <br>";
    }
     
     
    try
    {CodeFramework3();}
    catch
    {
    Label1.Text += "ERREUR FRAMEWORK3 <br>";
    }
     
     
    Label1.Text += "System.Environment.Version = "  + System.Environment.Version; 
    }
     
    public void CodeFramework3()
    {
    HttpContext.Current.Session["FRAMEWORK3"] = "FRAMEWORK 3";
     
    	object obj = typeof(HttpRuntime).GetProperty("CacheInternal", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null, null);	
    //ici on va utiliser "_caches"
    	object[] obj2 = (object[])obj.GetType().GetField("_caches", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj);
     
     
    	for (int i = 0; i < obj2.Length; i++)
    	{
    		Hashtable c2 = (Hashtable)obj2[i].GetType().GetField("_entries", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj2[i]);
    		foreach (DictionaryEntry entry in c2)
    		{
    			object o1 = entry.Value.GetType().GetProperty("Value", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(entry.Value, null);
    			if (o1.GetType().ToString() == "System.Web.SessionState.InProcSessionState")
    			{
    				SessionStateItemCollection sess = (SessionStateItemCollection)o1.GetType().GetField("_sessionItems", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(o1);
    				if (sess != null)
    				{
    					if (sess["FRAMEWORK3"] != null)
    	        		        {
    	                        		Label1.Text += sess["FRAMEWORK3"] + " is Active.<br>";
    	   	                        }
    				}
    			}
    		}
    	}
     
    }
    </script>
     
    <html>
    <body>
        <form id="form1" runat="server">
     
    <asp:Label id="Label1" runat="server"/>
        </form>
    </body>
    </html>
    résultat attendu devant ressembler a ca si le framework 3.5 "fonctionne"

    _disposed
    _caches
    _cacheIndexMask
    _cacheCommon
    FIN
    ERREUR FRAMEWORK2
    FRAMEWORK 3 is Active.
    System.Environment.Version = 2.0.50727.4927
    Merci de partager vos résultats, et, si vous avez une piste, je suis preneur...

  2. #2
    Membre actif Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Points : 209
    Points
    209
    Par défaut
    Une piste.
    En réinstallant de zéro, j'ai choisi dans les rôles/fonctionnalités lors de l'install de Windows Server 2008 DataCenter R2 un ordre particulier.

    1 - Je coche FrameWork3.5
    2 - celui demande d'installer IIS et autres, je valide

    et pas l'inverse, cad d'abord cocher IIS puis Framework 3.5

    et la miracle mon code me retourne bien ce que je veux à savoir
    _disposed
    _caches
    _cacheIndexMask
    _cacheCommon

    Le problème reste entier, ca veux dire que la ligne de code de départ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object obj = typeof(HttpRuntime).GetProperty("CacheInternal", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null, null);
    retourne un objet CacheMultiple ou CacheSingle et donc cela impact sur la suite du code.
    Mais pourquoi selon les machines, ca retourne l'un ou l'autre des objets ?

    Autre point important, System.Environment.Version = 2.0.50727.4927 alors qu'avant c'était 2.0.50727.5456
    Je ne connais pas la différence entre le 2 mais le pb ne semble pas venir de la car sur mon poste de dev j'ai 2.0.50727.5456 et la 1ere ligne de code retourne bien un CacheMultiple

Discussions similaires

  1. Code qui ne fonctionne pas
    Par egg3774 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/06/2007, 18h00
  2. Réponses: 10
    Dernier message: 30/03/2007, 17h30
  3. [Language] Code qui ne fonctionne pas
    Par kevinf dans le forum Langage
    Réponses: 2
    Dernier message: 21/11/2006, 21h08
  4. Code qui ne fonctionne pas
    Par maxti dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/10/2006, 11h45
  5. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo