2010-10-25 21 views
1

J'ai du code C# qui donne une exception StackOverflowException quand il s'exécute sous IIS7 mais quand il est exécuté sous Cassini dans VS2008 alors le code fonctionne bien.StackoverflowException dans IIS7 mais pas dans Cassini

Est-ce un problème connu par lequel Cassini gère différemment ces types d'exceptions?

+0

Quel est le code? – Paddy

+0

Pourriez-vous montrer le code à l'origine du problème? –

Répondre

3

L'exécution IIS utilise une taille de pile différente pour les threads. IIRC est de 256 Ko, contrairement au standard de 1 Mo que vous obtenez en utilisant le runtime .NET standard, qui est celui utilisé par VS. En d'autres termes, vous pouvez avoir un code qui s'exécute correctement sous l'environnement d'exécution .NET normal, mais qui épuise la pile sous IIS. Si l'on regarde Cassini, on dirait qu'il utilise l'environnement d'exécution .NET habituel, donc je m'attendrais à utiliser une taille de pile de 1 Mo par thread.

+0

Excellent, cela semble être le problème. Juste besoin de voir si je peux le réparer maintenant. –

+0

@nelsona: Je suis heureux d'avoir pu aider. Si vous lancez les threads vous-même, il existe un constructeur qui vous permet de définir la taille de la pile. La taille de la pile par défaut peut également être définie en modifiant l'en-tête PE de l'exécutable. –

+0

J'utilise les idées dans ce post: http://blogs.msdn.com/b/tom/archive/2008/03/31/stack-sizes-in-iis-affects-asp-net.aspx pour obtenir le chose à travailler :-) –

1

Vous pouvez modifier la taille de la pile à l'aide de la commande EDITBIN. ou changez-le en créant votre thread avec la taille de pile requise