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)
:arf:
Code:
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"
Citation:
_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...