2011-02-18 3 views
9

Mon entreprise a un site Web construit en ASP.NET et cible .NET 3.5. Il est trop tronqué et massif pour être converti en .NET 4 en temps opportun. Je suis chargé de construire un système de billetterie. Je veux que ce système de billetterie soit une application complètement séparée de l'application principale. J'ai ajouté un répertoire sur le site Web appelé "TicketingSystem", puis dans IIS j'ai défini ce dossier comme une application, en utilisant un pool d'applications qui cible .net 4.0. J'ai supposé que cette application ne serait pas affectée par l'application ci-dessus, d'autant plus qu'elle utilise son propre pool d'applications, mais il semblerait qu'elle soit affectée d'une manière ou d'une autre. Navigation dans ce répertoire avec mon .net 4 application web en elle génère cette erreur:Comment utiliser une application Web .NET 4.0 dans une application Web .NET 3.5?

http://www.chevtek.com/content/error.jpg

Je couvert les informations sensibles comme les chemins de fichiers et d'autres choses, mais la ligne qui indique le fichier de configuration a un chemin vers le parent fichier de configuration de l'application, pas le fichier de configuration de l'application .net 4.

Toute information est appréciée. N'est-il pas possible d'imbriquer une application .net 4.0 dans une application .net 3.5?

EDIT Comme demandé ici est une capture d'écran de la structure du répertoire IIS.

http://www.chevtek.com/content/IISDirectoryStructure.jpg

+0

Cela semble fonctionner correctement. Pouvez-vous poster une capture d'écran de la liste de recherche de dossier dans IIS pour le site Web? – mellamokb

+0

Bien sûr, attendez une minute. – Chev

+0

Avez-vous veillé à recycler votre pool d'applications, etc.? – Jimmy

Répondre

12

L'héritage Web.config n'est malheureusement pas quelque chose que vous pouvez désactiver complètement; Plus précisément, la section supérieure de web.config qui définit les sections de configuration présentes dans le fichier web.config ne peut pas être ignorée/remplacée dans une application enfant.

La solution est documentée here(asp.net 4 breaking changes documentation); Essentiellement, vous devez déplacer les valeurs qui sont actuellement dans l'application supérieure dans un fichier de configuration spécifique machine/FrameworkVersion et ensuite envelopper tout (ou au moins, la plupart) de votre racine web.config dans un tag d'emplacement avec l'héritage désactivé.

+2

La page liée a été d'une grande aide. Je vous remercie. Je vous dirai tous comment cela s'est passé plus tard dans la soirée. – Chev

+1

Cela l'a fait. Merci d'avoir répondu à la question que j'ai posée. – Chev

+1

Bonne question, et répondez. Je n'ai jamais été fan de la conception des fichiers de configuration .NET, mais cette solution prouve une fois pour toutes que la conception est mauvaise à partir de zéro. Modification d'un fichier de configuration à l'échelle de la machine, de sorte que je peux obtenir une seule paire d'applications Web parent-enfant est terrible! –

0

Edit: Comme mentionné premier port d'escale est de vous assurer que chaque application a son propre pool d'applications. Double et triple vérifier cela en tant que site .net 3.5 et un site .net 4 dans le même pool d'applications entraînera la rupture de l'ensemble du pool d'applications.

Ensuite, essayez retirer l'ensemble du groupe de la section de script, de mon expérience, il résout et je n'ai pas remarqué aucun problème

+0

On dirait que son problème est de référencer le web.config incorrect. Faire des changements comme ceci casserait son application parent. – mellamokb

+0

Cela générerait normalement une erreur "C'est une erreur d'utiliser une section enregistrée comme allowDefinition = 'MachineToApplication' au-delà du niveau de l'application". – Hawxby

0

En supposant que votre site actuel utilise AppPool1 ciblé pour .NET 2.0

Créer AppPool2 , ciblez-le vers .NET 4.0 et utilisez-le par répertoire virtuel de votre application.

0

Assurez-vous que ce n'est pas dans la configuration de la machine pour le pool d'applications. Si c'est le cas, il suffit de le supprimer de votre configuration web.

1

Dans mes applications, je réussis plus ou moins avec des applications imbriquées en utilisant l'élément <location> avec <clear /> et des éléments similaires dans le fichier web.config.

Ceci est un extrait d'un fichier web.config de la mine:

... 
<!-- Do not inherit. --> 
<location path="." inheritInChildApplications="false"> 
    <system.web> 
     ... 

L'idée est de mettre toutes les sections que vous ne pas veulent hériter des applications de l'enfant dans ces location éléments, comme dans mon exemple ci-dessus.

1

Avez-vous essayé de définir l'attribut "inheritInChildApplications" sur "false" dans le fichier web.config du dossier parent?

Voir Saul Dolgin's answer à une question similaire pour savoir comment faire.

Questions connexes