Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

HttpModule et ConfigurationManager

9 réponses
Avatar
Delf
Bonjour.

J'ai une exception que je ne comprends pas : InvalidCastException.

Voici ma classe :

namespace WebUnhandledException
{
using System;
using System.Web;
using System.Text;

public class UnhandledExceptionModule : IHttpModule
{
public void Dispose() { }

public void Init(HttpApplication pContext)
{
UnhandledExceptionSection section =3D
UnhandledExceptionSectionHandler.GetSection();
...
}
}
}

O=F9 UnhandledExceptionSectionHandler.GetSection() :

public static UnhandledExceptionSection GetSection()
{
return (UnhandledExceptionSection)
ConfigurationManager.GetSection
("unhandledExceptionConfiguration");
}

Tout est farpaitement configur=E9 au niveau du Web.config.
Si j'appelle :

UnhandledExceptionSection section =3D
UnhandledExceptionSectionHandler.GetSection();

dans Default.cs, j'ai bien mon objet section.

Par contre, au niveau de ma m=E9thode Inti() de l'HttpModule, j'ai
l'exception :

Additional information: Unable to cast object of type
'WebUnhandledException.UnhandledExceptionSection' to type
'WebUnhandledException.UnhandledExceptionSection'.

Super...

Par contre, si GetSection() retourne un Object, =E7a marche, j'ai bien
mon objet avec les valeurs attendues, et m=EAme le type : Object
{ WebUnhandledException.UnhandledExceptionSection }

Donc je n'y comprends rien... c'est vraiment la mis=E8re.
Est-ce que quelqu'un voit ce qui se passe ?

--
Delf

9 réponses

Avatar
Delf
On 6 fév, 13:19, Delf wrote:

J'ai une exception que je ne comprends pas : InvalidCastException.

Voici ma classe :

namespace WebUnhandledException
{
    using System;
    using System.Web;
    using System.Text;

    public class UnhandledExceptionModule : IHttpModule
    {
        public void Dispose() { }

        public void Init(HttpApplication pContext)
        {
            UnhandledExceptionSection section =
UnhandledExceptionSectionHandler.GetSection();
            ...
        }
    }

}

Où UnhandledExceptionSectionHandler.GetSection() :

public static UnhandledExceptionSection GetSection()
{
    return (UnhandledExceptionSection)
                  ConfigurationManager.GetSection
("unhandledExceptionConfiguration");

}

Tout est farpaitement configuré au niveau du Web.config.
Si j'appelle :

UnhandledExceptionSection section =
UnhandledExceptionSectionHandler.GetSection();

dans Default.cs, j'ai bien mon objet section.

Par contre, au niveau de ma méthode Inti() de l'HttpModule, j'ai
l'exception :

Additional information: Unable to cast object of type
'WebUnhandledException.UnhandledExceptionSection' to type
'WebUnhandledException.UnhandledExceptionSection'.

Super...

Par contre, si GetSection() retourne un Object, ça marche, j'ai bien
mon objet avec les valeurs attendues, et même le type : Object
{ WebUnhandledException.UnhandledExceptionSection }

Donc je n'y comprends rien... c'est vraiment la misère.
Est-ce que quelqu'un voit ce qui se passe ?



Bon... j'ai déporté le code de Init() dans l'event (attaché dans Init
())... et là ça fonctionne.

public void Init(HttpApplication pContext)
{
pContext.Error += new EventHandler(this.OnUnhandledException);
}

private void OnUnhandledException(object sender, EventArgs e)
{
UnhandledExceptionSection section =
UnhandledExceptionSectionHandler.GetSection();
if (section.IsLoaded)
{
...

Pourquoi ?! Merci.

--
Delf
Avatar
Delf
On 6 fév, 13:26, Delf wrote:

Bon... j'ai déporté le code de Init() dans l'event (attaché dans In it
())... et là ça fonctionne.



En fait, non :|

--
Delf
Avatar
Jérémy Jeanson
Bonjour Delf,

As tu penser à utiliser un "as" afin d'avoir un cast un peu moins
"violant" qui pourait peut être te soulager d'une exception quand ton
objet est null ou ne peuut pas être casté..

public static UnhandledExceptionSection GetSection()
{
return ConfigurationManager.GetSection
("unhandledExceptionConfiguration") as UnhandledExceptionSection;
}

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Delf
On 6 fév, 14:15, Jérémy Jeanson wrote:

As tu penser à utiliser un "as" afin d'avoir un cast un peu moins
"violant" qui pourait peut être te soulager d'une exception quand ton
objet est null ou ne peuut pas être casté..



Oui. Je reçois 'null'.
Dans ce cas là je préfère l'exception.

public static UnhandledExceptionSection GetSection()
{
      return ConfigurationManager.GetSection
("unhandledExceptionConfiguration") as UnhandledExceptionSection;

}



Le debuggeur m'indique que le type est correct.
Si GetSection() retourne un objet de type object, le debuggeur me
donne object { UnhandledExceptionSection } mais le cast static ne
fonctionne pas.

C'est dingue, j'ai jamais vu ça auparavant.

--
Delf
Avatar
Delf
On 6 fév, 14:15, Jérémy Jeanson wrote:

As tu penser à utiliser un "as" afin d'avoir un cast un peu moins
"violant" qui pourait peut être te soulager d'une exception quand ton
objet est null ou ne peuut pas être casté..



J'ai retesté au cas où, ça a fonctionné 1 fois !

Maintenant le débuggeur, lors du cast dynamique me donne :

config as CustomErrorSection
The type 'WebUnhandledException.CustomErrorSection' exists in both
'{0E583DB4-DBA8-4BC2-91FB-E7379EE95BCD}' and '{A6483D21-D2C2-4F89-
AC37-2C10D7AEC054}'

Toutes mes méthodes GetSection() de mes custom sections plantent 8

--
Delf
Avatar
Delf
Beuhhh...

Si je retire mes classes du répertoire App_Code, tout fonctionne.
Si je les remets dedans, mes casts plantent.

Est-ce que ce répertoire à quelque chose de spécial ?!

Merci.

--
Delf
Avatar
Jérémy Jeanson
Bnojour Delf,

Oui ce répertoire à "quelque chose" de "spéciale"... si tu as fais un
site web (à différencier d'une application web) tu est sensés y mettre
ton code-behind externe aux pages. Il est impréatif que ce code y soit
si tu veux déployer un site sans le précompiler (fonction publié). Par
moment tu peux avoir des surprises avec ce genre de site car le system
peut te mettre des messages étranges comme quoi ton assembly ne peut pas
être compilé ou une de ses classes, méthodes ne peut pas être utilisé
car elle est en double... dans les répertoire temporaire de ta
machine... en gros la crois et la bannière, mais heureusement ça 'arrive
que rarement car en général on demande la publication du site ;)

Si tu as fais une application web, à contrario, App_Code ne te sert à
rien car tu peux ajouter ton code-behind partout dans l'arborescence du
projet. Le répertoire App_Code peut même être problématique (j'ai déjà
rencontré le cas) car étant un répertoire spécial, les fichiers que tu y
ajoutes ne sont pas automatiquement marqués comme étant à compiler. Par
défaut je crois qu'ils sont marqué à inclure (copie de fichier). Et cela
pause problème car ton application web doit être compiler, alors mélangé
compiler et non compiler, c'est le drame.

Pour faire simple ne pas utiliser App_Code si tu as fais une application
Web.

Par contre si
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Delf
On 9 fév, 10:06, Jérémy Jeanson wrote:

Oui ce répertoire à "quelque chose" de "spéciale"... si tu as fais un
site web (à différencier d'une application web) tu est sensés y met tre
ton code-behind externe aux pages. Il est impréatif que ce code y soit
si tu veux déployer un site sans le précompiler (fonction publié). Par
moment tu peux avoir des surprises avec ce genre de site car le system
peut te mettre des messages étranges comme quoi ton assembly ne peut pa s
être compilé ou une de ses classes, méthodes ne peut pas être uti lisé
car elle est en double... dans les répertoire temporaire de ta
machine... en gros la crois et la bannière, mais heureusement ça 'arr ive
que rarement car en général on demande la publication du site ;)



Je ne fais plus de projet de type Web Site car j'ai eu pleins de
problèmes et erreurs aléatoires sous VS2005...
J'ai donc laissé tombé cette approche ; je n'utilise que le template
Web Application.

Si tu as fais une application web, à contrario, App_Code ne te sert à
rien car tu peux ajouter ton code-behind partout dans l'arborescence du
projet. Le répertoire App_Code peut même être problématique (j'ai déjà
rencontré le cas) car étant un répertoire spécial, les fichiers q ue tu y
ajoutes ne sont pas automatiquement marqués comme étant à compiler. Par
défaut je crois qu'ils sont marqué à inclure (copie de fichier). Et cela
pause problème car ton application web doit être compiler, alors mé langé
compiler et non compiler, c'est le drame.



C'était mon cas là, merci pour les explications.

Pour faire simple ne pas utiliser App_Code si tu as fais une application
Web.



Bon à savoir.

Par contre si



Il manque un bout :)

--
Delf
Avatar
Jérémy Jeanson
Bonjour Delf,

Oui donc, euhh??? par contre si.... et bien si je savais ce que j'avais
commencé à écrire dire je pense que cela me reviendrait tout seul...

Non la seule chose à la quelle j'ai peut être pensé est un cas idiot
pour lequel j'avais une autre version de mes classes déjà présente dans
le GAC. Mais vu que tu as trouvé ton bonheur, rien d'intéressant.

Comptent de t'avoir permis de trouver ton chemin dans cette nébuleuse.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr